Infrarot Controller eigenen Treiber schreiben
-
Hallo,
ich habe mir eine no-name Infrarotfernbedienung gekauft.
Per USB an Linux angeschlossen. Mit LIRC wird das Teil auch angesprochen, aber: Alle paar Minuten schmiert der Treiber ab und die Fernbedienung wird nicht mehr von Lirc angesprochen.Per XEV habe ich gesehen, dass das Teil als Tastatur erkannt wird. Und in der Tat, viele Buttons (Pfeile, Nummern) der Remote mappen auf die ganz normalen Xorg Keyboardevents. Die Remote wird also als Tastatur angesprochen. Das klappt auch immer. D.h. selbst wenn Lirc abschmiert, kann ich mit der Remote noch tippen. Edit: Solange LIRC noch läuft, werden die Events von LIRC verwaltet.
Meine Frage nun: Wie kann ich die Keyboardevents der Remote abfangen UND feststellen, dass sie von der Remote kommen? Beispie: Ich stelle fest, dass Page Up gedrückt wurde - dann brauche ich die Info "das Event kam von der Remote" und dann möchte ich meinen eigenen Handler dafür einhängen.
Danke für Tipps und Ansätze
-
Du kannst über die Devices /dev/input/eventX alle Events der einzelnen Eingabegeräte (Tastaturen, Fernbedienungen, Powerknopf usw.) abfragen. Einfach öffnen, Daten lesen, und dann mit der Fernbedienung aufs Auge halten :). Auf http://www.linuxjournal.com/article/6429 gibt es einen Artikel zu der Input-API.
Dazu gibt es in /sys/class/input/eventX Informationen zum Eingabegerät, z.B. über /sys/class/input/eventX/device/name den Namen im Klartext. Damit solltest Du zumindest rausfinden können, welches Device Deine Fernbedienung ist.
Gizmod ist ein Daemon, der mit Input Events umgeht und z.B. Programme starten kann.
-
Danke für deine Antwort.
Gizmod ist genau das, was ich brauche. Aber leider furchtbar dokumentiert, so dass es wiederum komplett unbrauchbar ist.Mein Ansatz ist der selbe wie aus dem Linuxjournal. Ein C Programm liest die Events von /dev/input und schreibt sie im Klartext nach stdout.
Wenn Ruby vernünftig und ohne Verzögerung von Stdin lesen könnte, würde ich darauf dann eine Regexp ansetzen und Aktionen je nach Event auslösen.
-
So, mein Treiber ist fertig.
Eine Seite C++, 10 Zeilen Ruby: Und fortan kann ich meiner Remote (und eigentlich allen anderen Inputgeräten auch) Events zuordnen: Lautstärke ändern, Song wechseln, Desktop aktivieren usw... Einfach, aber funktioniert.
Wer den Quellcode haben will, soll sich meldenEdit: Wer nette Commandline Shortcuts für Gnome kennt, möge sich auch bitte melden.