Se você estiver usando o Linux, a melhor maneira de distinguir entre dispositivos de entrada é usar a Interface de eventos do Linux . Depois que a entrada específica do hardware de um dispositivo é decodificada, ela é convertida em uma estrutura de evento específica do Linux intermediária e disponibilizada pela leitura de um ou mais dispositivos de caracteres em /dev/input/
. Isto é completamente independente da linguagem de programação que você usa, a propósito.
Cada dispositivo de hardware recebe seu próprio /dev/input/eventX
device e também há agregados (por exemplo, /dev/input/mice
, que representa o movimento de todos os mouses no sistema). Seu sistema também pode ter /dev/input/by-path
e /dev/input/by-id
.
Há um ioctl
chamado EVIOCGNAME
, que retorna o nome do dispositivo como uma string legível humanamente, ou você pode usar algo como /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse
.
Você abre o dispositivo e toda vez que um evento chega do hardware de entrada, você obtém um pacote de dados. Se você pode ler C, você pode estudar o arquivo /usr/include/linux/input.h
, que mostra exatamente como isso funciona. Se você não fizer isso, poderá ler esta pergunta , que fornece todas as informações necessárias .
O problema é que a interface do evento não retorna caracteres 'cozidos', apenas usa códigos numéricos para chaves (os códigos correspondentes a cada chave são encontrados no arquivo de cabeçalho mencionado anteriormente - mas também na fonte Python < a href="https://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py"> event.py . Se o seu dispositivo de entrada tiver chaves / botões incomuns, você pode precisar experimentar um pouco até obter os números certos.