Steuerung per Fernbedienung

Zuerst sollte man sich in der c't den Artikel Ein Pinguin sieht (infra)rot durchlesen. In diesem Artikel wird der Bau eines Infrarotempfängers genau beschrieben. Weiterhin besorgt man sich lirc-0.6.6. Zu beachten ist, dass der Serial-Treiber nicht fest in den Kernel eingebunden ist, sondern nur als Modul übersetzt wird, da das lirc-Modul vor dem Serial-Treiber des Kernels gestartet werden muss.

tar xfj lirc-0.6.6.tar.bz2
cd lirc-0.6.6
./setup.sh

Nun sollte ein Menü erscheinen, indem man den Typ des Infrarotempfängers festlegt.

1 Driver configuration (driver:serial io:0x3f8 irq:4)
1 Home-brew (16x50 UART compatible serial port)

Jetzt wählt man die Schnittstelle aus, z.B.

(X) 1 COM1 (0x3f8, 4)

und den Typ.

[X] 1 With transmitter diode
[ ] 2 Software generated carrier

Wenn gewünscht, können noch einige Einstellungen für die Software vorgenommen werden. Dann sollte man im Hauptmenü den Punkt

3 Save configuration and run configure

auswählen. Wenn keine Fehler aufgetreten sind, folgt danach das übliche

make
make install

In der /etc/modules.conf sollte das Character-Device auf serial stehen. Ist diese Zeile nicht vorhanden oder steht statt serial off dort, dann ist dies entsprechend zu korrigieren.

alias char-major-4 serial

Nun wird es Zeit, die Fernbedienungssignale zu erlernen. Wir laden dazu das soeben erstelle lirc-Modul und starten irrecord, welches die Signale der Fernbedienung analysiert. Die Daten werden in der Datei /etc/lirc.conf gespeichert.

modprobe lirc_serial
irrecord /etc/lirc.conf

Nachdem einmal alle Tasten der Fernbedienung gedrückt und erkannt worden sind, können wir den Tasten Funktionen zuweisen. Dazu legen wir die Datei .lircrc im Heimatverzeichnis des Nutzers an. Diese Datei beschreibt, wie auf erkannte Signale reagiert werden soll. Wir können z.B. in einen Modus wechseln oder ein Programm starten. Die Datei besteht aus einen oder mehreren Blöcken der folgenden Form:

begin
  prog    = ...
  remote  = ...
  button  = ...
  repeat  = ...
  config  = ...
  mode    = ...
  flags   = ...
end

Die Parameter und deren Bedeutung erläutert die folgende Tabelle.

Option Erläuterung
prog gibt an, welches Programm den Config-String erhalten soll
remote Name der Fernbedienung (definiert in lirc.conf, es können mehrere Fernbedienungen gleichzeitig benutzt werden
button Name des Buttons (definiert in lirc.conf)
repeat gibt die Anzahl der Wiederholungen an, bis reagiert werden soll, 0 (Standard) bedeutet, Tastenwiederholungen werden ignoriert
config Diese Argumente werden dem aufgerufenen Programm übergeben. Es ist möglich, mehrere Configzeilen zu definieren. Diese werden dann nacheinander abgearbeitet, so dass z.B. Buttons mit verschiedenen Zuständen emuliert werden können
mode in dieser Modus soll gewechselt werden.
flags mode (der aktuelle Modus wird verlassen), once (der Modus wird nur einmal betreten), quit (verhindert, dass alle ausführbaren Konfigurationen untersucht werden)

Damit kann man für jede angelernte Taste ein Programm definieren, das bei Tastendruck dann gestartet werden soll. Weiterhin kann man verschiedene Modi festlegen. So kann man auf gleiche Tasten verschieden reagieren, je nachdem in welchem Modus sich lirc gerade befindet.

Nun wird es Zeit, lirc zu starten. Die erste Zeile ist nur nötig, wenn das Modul nicht bereits geladen wurde.

modprobe lirc_serial
lircd /etc/lirc.conf
/bin/su - <user> -c /usr/local/bin/irexec &

Dieser Aufruf kann auch gut in einem Startskript untergebracht werden. Wichtig ist, dass lircd vor irexec gestartet wird, und das der Serial-Treiber des Kernels noch nicht geladen ist.

Mit Hilfe der o.g. Tools kann man sich leicht einen mp3-Player basteln. Xmms arbeitet hervorragend mit lirc zusammen. Auf der Seite findet man das Plugin xmms-plugin-1.4 (unter General), damit Xmms die Befehle von lirc entgegen nehmen kann.

tar xfj lirc-xmms-plugin-1.4.tar.bz2
cd lirc-xmms-plugin-1.4
./configure
make
make install

Das Plugin benötigt die Quellen von xmms. Am besten, man erstellt sich vorher xmms aus den Quellen.

Der xmms sollte nicht unter root-Rechten laufen. Deswegen wird irexec auch unter der Benutzerkennung user ausgeführt. In der Regel sind aber solche Nutzer nicht berechtigt, lirc Daten zu lesen und den Rechner herunterzufahren. Ersteres behebt man mit

chmod a+rw /dev/lircd

Für Letzteres verwendet man sudo. Dazu setzt man mit visudo das benötigte Recht.

<user>  FIREWALL=NOPASSWD: /sbin/poweroff

Mit der Tastenkombination ESC :x beendet man visudo und speichert die Änderungen.

Bleibt noch ein Problem offen. Xmms ist eine X-Anwendung. Normalerweise wird lirc xmms nicht starten können, weil das Recht fehlt, die lokale Anzeige zu benutzen. Als Abhilfe kann man das lokale Display für alle Nutzer freigeben. Dazu trägt man in der /etc/X11R6/xdm/xdm-config die Zeile ein:

DisplayManager._0.authorize:    false