Login
Newsletter
Werbung

Do, 15. Mai 2014, 15:00

Einstieg in LIRC mit inputlirc

Verfügt der Computer bzw. die Sound- oder DVB/TV-Karte über einen Infrarot-Empfänger, kann der Computer via Infrarot-Fernbedienung bedient werden, um zum Beispiel die Lautstärke und Medienplayer vom Sofa aus zu steuern.

Für die Verarbeitung der Infrarot-Signale der Fernbedienung ist unter Linux LIRC (Linux Infrared Remote Control) verantwortlich. Dies benötigt eine Konfigurationsdatei, die auf die jeweilige Fernbedienung abgestimmt sein muss.

Flussdiagramm von inputlirc

Steffen Rumberger

Flussdiagramm von inputlirc

Dieser Artikel zeigt eine einfache Lösung mit inputlirc auf, die alle Infrarot-Empfänger unterstützt, die als Human Interface Device (HID) implementiert sind. Diese Geräte vereinheitlichen die benötigte LIRC-Konfigurationsdatei, sodass immer die selben Tastencodes (definiert in der Linux-Quellcodedatei input.h) genutzt werden können.

Der Infrarot-Empfänger als Eingabegerät

Um den Computer mittels Fernbedienung bedienen zu können, müssen die Pakete inputlirc, ir-keytable und lirc über die Paketverwaltung installiert werden.

Das Paket inputlirc installiert den Daemon inputlircd. Dieser wird während des Bootvorgangs gestartet, nimmt die Ereignisse von sämtlichen Empfängern (/dev/input/eventN) entgegen und übergibt sie an alle laufenden LIRC-Clientprogramme wie Medienplayer oder irexec aus dem Paket lirc, damit diese entsprechend die Befehle ausführen.

Um eine Liste der verfügbaren Infrarot-Empfänger samt unterstützter Übertragungsprotokolle zu bekommen, wird das Programm ir-keytable ohne Kommandozeilenoptionen aufgerufen:

$ ir-keytable
Found /sys/class/rc/rc2/ (/dev/input/event6) with:
...

Hier wurde das Eingabegerät /dev/input/event6 als Infrarot-Empfänger erkannt.

Wird auf der Fernbedienung nun eine Taste gedrückt, gibt der Empfänger nicht das empfangene Infrarot-Signal (»scancode« genannt), sondern einen definierten Tastencode an den LIRC-Deamon inputlircd weiter. Diese Abstraktion ermöglicht es u.a. für unterschiedliche Geräte der HID-Klasse, dieselbe Konfiguration zu verwenden. Der LIRC-Deamon inputlircd stößt dann über einen Unix Domain Socket (Pfad /var/run/lirc/lircd) die LIRC-Clientprogramme an, damit diese entsprechend des Tastencodes in der Konfigurationsdatei $HOME/.lircrc reagieren.

Tastencodes des Infrarot-Empfängers auslesen

In der sogenannte Übersetzungstabelle sind für die Scancodes die einheitlichen Tastencodes (Keycodes genannt) definiert. Mit folgendem Befehl wird die aktuell vom Empfänger verwendete Übersetzungstabelle ausgelesen:

$ ir-keytable --read
...
scancode 0x0017 = KEY_CHANNELDOWN (0x193)
scancode 0x0019 = KEY_CHANNELUP (0x192)
scancode 0x004d = KEY_PLAYPAUSE (0xa4)
...

Der Empfänger reagiert nur auf die in der Übersetzungstabelle definierten Signale (»scancodes«, d.h. der Teil vor dem Gleichheitszeichen) und gibt den entsprechenden Tastencode (»keycode«, also der Teil nach dem Gleichheitszeichen) weiter.

Wurde zum Empfänger eine Fernbedienung mitgeliefert, zeigt die Tabelle eine Liste aller Tastencodes, die für die Konfiguration von inputlircd verwendet werden können. Andernfalls kann die Tabelle auch leer sein. Für viele Empfänger liegt die Konfiguration unter /lib/udev/rc_keymaps/.

Um zum Empfänger eine passende Fernbedienung zu finden, ist es wichtig, das Protokoll des Empfängers zu wissen. Es wird z.B. in der Ausgabe von ir-keytable --read unter »Enabled protocols:« angezeigt.

$ ir-keytable --read | grep "^Enabled protocols:"
Enabled protocols: NEC

Neben dem Protokoll NEC, gibt es noch andere Protokolle wie bspw. rc-5, rc-6 und weitere. Die wichtigsten Protokolle listet u.a. das Magazin ELVjournal auf.

Nach passender Fernbedienung suchen

Eine passende Fernbedienung zu finden, erfordert etwas Glück. Zuerst sucht man sich alle im Haushalt greifbaren Fernbedienung zusammen, schaut, auf welche der Empfänger reagiert und notiert sich die Scancodes der Tasten. Dazu öffnet man ein Terminal, startet den Befehl ir-keytable --test und testet, ob bei einem Tastendruck auf der Fernbedienung ein Ereignis ausgelöst wird.

Hier ein Beispiel:

$ ir-keytable --test
Testing events. Please, press CTRL-C to abort.
1385405182.689787: event MSC: scancode = 10ed09
1385405182.689793: event sync
...
^C

Hier wurde ein Ereignis mit dem (hexadezimalen) Scancode 10edf1 ausgelöst.

Werden keine Ereignisse ausgelöst, passen die Übertragungsprotokolle von Empfänger und Fernbedienung nicht zusammen. Hierauf ist beim Kauf einer Fernbedienung zu achten. Ggf. kann das verwendete Protokoll geändert werden. Hier sollte die Dokumentation zur Hardware weiterhelfen.

Um nun die Signale (Scancodes) der Fernbedienung mit dem Empfänger abzugleichen, muss dem Empfänger eine neue Übersetzungstabelle mit passenden Scancodes zugewiesen werden.

Für Fernbedienungen die zum Empfänger mitgeliefert wurden, entfällt dieser Schritt, da vom Hersteller eine Übersetzungstabelle mit passenden Scancodes bereits hinterlegt ist. Allenfalls die Tastencodes könnten angepasst werden.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung