Se utilizzi Linux, il modo migliore per distinguere i dispositivi di input è utilizzare l'interfaccia eventi di Linux. Dopo che l'input specifico dell'hardware di un dispositivo è stato decodificato, viene convertito in una struttura di eventi intermedia specifica di Linux e reso disponibile leggendo uno o più dei dispositivi a caratteri in /dev/input/
. Questo è completamente indipendente dal linguaggio di programmazione che usi, tra l'altro.
Ogni dispositivo hardware ottiene il proprio /dev/input/eventX
dispositivo, e ci sono anche aggregati (ad es. /dev/input/mice
che rappresenta il movimento di tutti i topi nel sistema). Il tuo sistema potrebbe anche avere /dev/input/by-path
e /dev/input/by-id
.
C'è un ioctl
chiamato EVIOCGNAME
che restituisce il nome del dispositivo come una stringa leggibile dall'uomo, oppure puoi usare qualcosa come /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse
.
Apri il dispositivo e ogni volta che arriva un evento dall'hardware di input, otterrai un pacchetto di dati. Se sai leggere il C, puoi studiare il file /usr/include/linux/input.h
che mostra esattamente come funziona questa roba. In caso contrario, puoi leggere questa domanda che fornisce tutte le informazioni di cui hai bisogno.
La cosa buona dell'interfaccia degli eventi è che devi solo scoprire di quale dispositivo hai bisogno e puoi leggere l'input da quel dispositivo di input solo , ignorando tutti gli altri. Riceverai anche notifiche su tasti, pulsanti e controlli che normalmente non avresti semplicemente leggendo il flusso di caratteri "cotti" da un terminale:anche tasti morti come Maiusc , ecc.
La cosa brutta è che l'interfaccia degli eventi non restituisce caratteri 'cucinati', utilizza solo codici numerici per le chiavi (i codici corrispondenti a ciascuna chiave si trovano nel suddetto file di intestazione, ma anche nella fonte Python di event.py. Se il tuo dispositivo di input ha tasti/pulsanti insoliti, potresti dover sperimentare un po' finché non ottieni i numeri giusti.
Un approccio alternativo (se la tua "tastiera" non ha molti tasti - molti dispositivi fingono di essere tastiere) consiste nell'applicare una mappatura dei tasti specificatamente a ciascuna tastiera e assicurarsi che i tasti siano distinti.
Questo è descritto qui:https://superuser.com/questions/760602/how-to-remap-keys-under-linux-for-a-specific-keyboard-only. Il punto principale è il setxkbmap
accetta un argomento dispositivo.
Se stai usando l'approccio raw input, lsinput troverà il tuo dispositivo raw per te.