GNU/Linux >> Linux Esercitazione >  >> Linux

Come distinguere l'input da diverse tastiere?

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.


Linux
  1. Come fare in modo che "data" produca l'ora da un fuso orario diverso?

  2. Linux:come cambiare in modo affidabile il dispositivo di uscita Pulseaudio dalla riga di comando?

  3. In che modo Ubuntu è diverso da Debian?

  4. In che modo install -c è diverso da cp

  5. Come montare un dispositivo in Linux?

Come digitare emoji su Linux

Telnet vs. SSH:in che cosa SSH è diverso da Telnet?

Come aggiornare il server Ubuntu a 20.04 dal 18.04

come ar x nomefile.a in una directory diversa

Come posso eseguire il gunzip in una directory di destinazione diversa?

Come impedire l'apertura dei popup del dispositivo Impossibile aprire MTP?