GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man Eingaben von verschiedenen Tastaturen unterscheiden?

Wenn Sie Linux verwenden, können Sie Eingabegeräte am besten mithilfe der Linux-Ereignisschnittstelle unterscheiden. Nachdem die hardwarespezifischen Eingaben eines Geräts dekodiert wurden, werden sie in eine Linux-spezifische Zwischenereignisstruktur konvertiert und verfügbar gemacht, indem eines oder mehrere der Zeichengeräte unter /dev/input/ gelesen werden . Dies ist übrigens völlig unabhängig von der verwendeten Programmiersprache.

Jedes Hardwaregerät bekommt seinen eigenen /dev/input/eventX Gerät, und es gibt auch Aggregate (z.B. /dev/input/mice die die Bewegung aller Mäuse im System darstellt). Ihr System kann auch /dev/input/by-path haben und /dev/input/by-id .

Da ist ein ioctl genannt EVIOCGNAME die den Namen des Geräts als lesbare Zeichenfolge zurückgibt, oder Sie können etwas wie /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse verwenden .

Sie öffnen das Gerät und jedes Mal, wenn ein Ereignis von der Eingabehardware eintrifft, erhalten Sie ein Datenpaket. Wenn Sie C lesen können, können Sie die Datei /usr/include/linux/input.h studieren das zeigt genau, wie dieses Zeug funktioniert. Wenn nicht, können Sie diese Frage lesen, die alle Informationen enthält, die Sie benötigen.

Das Gute an der Ereignisschnittstelle ist, dass Sie einfach herausfinden, welches Gerät Sie benötigen, und Eingaben von diesem Eingabegerät nur lesen können , alle anderen ignorierend. Sie erhalten auch Benachrichtigungen über Tasten, Schaltflächen und Steuerelemente, die Sie normalerweise nicht erhalten, wenn Sie einfach den „gekochten“ Zeichenstrom von einem Terminal lesen:sogar tote Tasten wie Shift usw.

Das Schlimme ist, dass die Ereignisschnittstelle keine "gekochten" Zeichen zurückgibt, sondern nur numerische Codes für Tasten verwendet (die Codes, die jeder Taste entsprechen, finden sich in der oben genannten Header-Datei — aber auch in der Python-Quelle von event.py. Wenn Ihr Eingabegerät ungewöhnliche Tasten/Schaltflächen hat, müssen Sie möglicherweise ein wenig experimentieren, bis Sie die richtigen Zahlen erhalten.


Ein alternativer Ansatz (wenn Ihre "Tastatur" nicht viele Tasten hat - viele Geräte geben vor, Tastaturen zu sein) besteht darin, eine Tastenbelegung speziell auf jede Tastatur anzuwenden und sicherzustellen, dass die Tasten unterschieden werden.

Dies wird hier beschrieben:https://superuser.com/questions/760602/how-to-remap-keys-under-linux-for-a-specific-keyboard-only. Der Hauptpunkt ist die setxkbmap nimmt ein Geräteargument.

Wenn Sie den Raw-Input-Ansatz verwenden, findet lsinput Ihr Raw-Gerät für Sie.


Linux
  1. So installieren Sie einen Gerätetreiber unter Linux

  2. Wie kann `date` die Uhrzeit aus einer anderen Zeitzone ausgeben?

  3. Linux – Wie führe ich einen Bootloader von Linux aus?

  4. Linux – Wie kann man das Pulsaudio-Ausgabegerät robust von der Befehlszeile aus wechseln?

  5. Wie unterscheidet sich Ubuntu von Debian?

Emoji unter Linux eingeben

Telnet vs. SSH:Wie unterscheidet sich SSH von Telnet?

So aktualisieren Sie Ubuntu Server auf 20.04 vom 18.04

Wie kann verhindert werden, dass MTP-Geräte-Popups nicht geöffnet werden können?

Wie entferne ich das Cache-Gerät aus bcache?

Wie unterscheidet sich cp -f von cp --remove-destination?