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:

  1. 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.
  2. 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.
  3. 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?
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top