Wie lese ich Ereignisse von einem HID-Gerät unter Ubuntu Jaunty?
Frage
habe ich ein Linux-USB-HID-Gerät (ein Hama MCE ), und ich kann seine Ereignisse manuell durch das lesen cat /dev/input/event7
und cat /dev/input/event8
lesen. Jedes Mal, wenn ich eine Taste auf dem Gerät drücken, werden einige Bytes oben zum Lesen mit einem der cat
Befehle zur Verfügung. Ich habe eine Standardinstallation von Ubuntu Jaunty 64-Bit-Desktop auf der Maschine.
Ich glaube, ich kann einen Parser schreibt das Bytes von der Vorrichtung emittiert wird, zu interpretieren, oder ich werde benutzen libhid wenn es bequemer.
Meine Fragen sind:
- Wie verhindere ich die Text-Modus virtuelle Konsolen von einigen der Tastendrücke auf dem Gerät als normale Tastenfolgen zu erhalten? Ab sofort einige Gerätetasten führen eine Enter , ein Backspace , ein BildAuf oder numerische Tastatur Zahlen.
- In ähnlichen Weise, wie verhindere ich den X-Server von Empfang Tastatur und Maus-Ereignisse von diesem Gerät? Ich habe mehrere USB-Tastaturen und Mäuse mit dem Computer verbunden. Ich möchte, dass die X-Server-Ereignisse aus allen von ihnen, außer für dieses Gerät erhalten.
- Wie kann ich einstellen, dass immer dann, wenn das Gerät an den Computer angeschlossen wird, der Befehl
/usr/local/bin/keydumper /dev/input/event7 /dev/input/event8
(oder ein Befehl für jeden/dev/
Pfad) laufen würde bekommen, mit den richtigen/dev/
Pfaden in der Kommandozeile ersetzt?
Lösung
Die Beantwortung meiner Frage basiert auf Antworten von dem Linux-USB-HID-Treiber-Entwickler:
Frage 1 und 2 .: Do
ioctl(open("/dev/input/event7", O_RDONLY), EVIOCGRAB, 1);
Solange diese Dateihandle geöffnet ist, würden die Ereignisse generiert gehen nur auf diese Dateihandle (nicht an anderen open () s der gleichen Vorrichtung oder die Systemtastatur oder Maus-Event-Pool). Allenfalls ein Prozess kann eine halten erfolgreicher EVIOCGRAB zu einem Zeitpunkt, an einem HID-Gerät. Lirc kann so konfiguriert werden, eine EVIOCGRAB zu tun.
Frage 3 .: Configure udev das Programm zu starten, sobald das Gerät angeschlossen ist.
Andere Tipps
Ich habe nicht genug Punkte, leider zu kommentieren.
Wenn Sie für die Definition von EVIOCGRAB try suchen
#include <linux/input.h>
Ich denke Lösung für alle Fragen können eigene Filter-Gerätetreiber oder benutzerdefinierte Treiber für das Gerät schreiben. Ich weiß, so etwas (Filter-Gerätetreiber) auf Windows verfügbar ist so etwas ähnliches auf Linux sein kann. In diesem Filter-Gerätetreiber können Sie alle unerwünschten Ereignisse aus dem Zielgerät sperren, die Sie blockieren möchten, kann ich nicht wirklich 3 Frage, damit ich weiß nicht, wie für das beantworten.