Gentoo LIRC
Grundlagen
Um den VDR auch über eine IR-Fernbedienung steuern zu können braucht man erstmal das zum IR-Empfänger passende Kernelmodul. Als Empfängerhardware gibt es zahlreiche Möglichkeiten. Eine davon ist das sogenannte Homebrew-Model. Dabei handelt es sich um eine einfache Schaltung für die serielle Schnittstelle, die man auch mit etwas Geschick selber bauen kann. Mehr Infos dazu findet man auf der Lirc-Homepage http://www.lirc.org. Ob die Irda-Unterstützung als Kernelmodul vorhanden ist, kann man z. B. mit
modprobe irda
testen. Wird das Modul geladen, erfolgt keine Ausgabe! Dafür zeigt lsmod, welche Module geladen sind. Ob lirc schon erfolgreich installiert ist, kann mit
modprobe lirc_serial
für seriell Empfänger, oder
modprobe lirc_sir
für Empfänger, die den IR-Port vom Mainboard verwenden, getestet werden. (Hier sind nur zwei mögliche Varianten exemplarisch angeführt.) Sollte modprobe melden:
modprobe: Can't locate module irda
muß der Kernel entsprechend angepasst werden.
cd /usr/src/linux make menuconfig
Es ist unwahrscheinlich, daß der Kernel keine Module unterstützt. Dies sollte aber zuerst überprüft werden. Dazu muß der Loadable module support ---> und der Kernel module loader aktiviert sein. Weiterhin muß die serielle Unterstützung deaktiviert oder zumindest als Modul kompiliert werden, damit lirc exklusiven Zugriff auf den seriellen Port hat (so man ein serielles Device verwendet). Dazu unter Device Drivers --->, Character devices --->, Serial drivers ---> < > 8250/16550 and compatible serial support deaktivieren, oder wenn man ab und zu den seriellen Port noch für andere Zwecke braucht als Modul setzen. Dann zu Networking --->, <M> IrDA (infrared) subsystem support ---> IrDA subsystem support als Modul aktivieren. Weiter bei Infrared-port device drivers ---> und die entsprechende Hardware aktivieren. Um ein einfaches serielles IR-Modul (z.B. das o. g. Homebrew, s. hierzu http://www.lirc.org/receivers.html ) muss der Serial dongle support ausgewählt werden. Wenn keine andere Einstellung verändert wurde, und der IR-Support vorher nicht fest einkompiliert war, reicht nach exit und nach dem speichern der neuen Kernelkonfiguration, ein
make modules modules_install
Jetzt sollte modprobe irda zum Erfolg führen.
Installation
Nun muß das Linux Infrared Remote Control kurz lirc installiert werden. Dieses befindet sich auch im Portage-Tree und kann mittels emerge installiert werden. Zur Zeit sind 2 Versionen von lirc vorhanden, wobei die neuere (0.6.6) noch maskiert ist. Die Installation von lirc am Beispiel dieses Empfängers geschieht folgendermaßen:
Zuerst muß lirc mitgeteilt werden, welchen Treiber es benutzen soll, in unserem Falle seriell. Man trägt dazu die Variable
LIRC_OPTS="--with-driver=serial"
mittels eines Editors in die /etc/make.conf ein. Alternativ dazu geht das auch, wenn man diese dem emerge-Befehl voranstellt.
LIRC_OPTS="--with-driver=serial" emerge lirc
Wer die neuere maskierte Version (0.6.6) installieren möchte, macht das so (es sei denn, man hat die /etc/make.conf schon angepaßt):
ACCEPT_KEYWORDS="~x86" LIRC_OPTS="--with-driver=serial" emerge lirc
Ab der Version 0.7.x kann es zu Fehlermeldungen beim kompilieren kommen. Diese resultieren aus dem fehlendem IRQ und dem fehlendem IO-Port. Abhilfe schafft wie folgt am Beispiel für den COM 1 Port:
ACCEPT_KEYWORDS="~x86" LIRC_OPTS="--with-driver=serial --with-irq=4 --with-port=0x3F8" emerge lirc
Nach erfolgreicher Installation von lirc ist noch die Datei /etc/modules.d/lirc zu überprüfen oder zu erstellen. Für einen IR-Empfänger an COM1 sollte folgendes in der Datei stehen:
alias char-major-61 lirc_serial alias /dev/lirc* lirc_serial options lirc_serial irq=4 io=0x3F8
entsprechend für COM2
alias char-major-61 lirc_serial alias /dev/lirc* lirc_serial options lirc_serial irq=3 io=0x2F8
Dies sind übliche Parameter für die seriellen Schnittstellen. Bitte im BIOS des Computers überprüfen. Jetzt ein
rmmod lirc_serial
gefolgt von einem
modprobe lirc_serial
und die serielle Unterstützung mit den neuen Parametern sollte installiert sein. Zum Test
mode2
bei version >= 0.7.X
mode2 -d /dev/lirc/0
und die Fernbedienung betätigen. Jetzt sollten die Zeile space xxxxxxx und pulse xxx nur so über die Konsole flitzen. Falls mode2 meldet, daß es /dev/lirc nicht finden kann, muß noch folgendes getan werden.
mknod -m 666 /dev/lirc c 61 0
für COM1 bzw ein
mknod -m 666 /dev/lirc c 61 1
für COM2 von nöten.
Allerdings muß man dazu sagen, das es Probleme mit dem Device /dev/lirc in Verbindung mit dem devfs (Device-Filesystem) geben kann. Falls nach einem Neustart /dev/lirc nicht mehr vorhanden sein sollte weil es von devfs gelöscht wurde, dann muß man lirc "devfs-kompatibel" machen. Dies erreicht man mit einem Eintrag in /etc/devfsd.conf, welches das Device bei jedem Rechnerstart neu erzeugt und entsprechend im Verzeichnis /dev ablegt. Diese Methode ist bei Gentoo sowie allen neueren Distributionen zu bevorzugen, eben weil sie das Device-Filesystem einsetzen. Folgendes sollte in /etc/devfsd.conf eingetragen werden
LOOKUP ^lirc EXECUTE /bin/mknod /dev/lirc c 61 0
Einrichten von /etc/conf.d/lircd
LIRCD_OPTS="-d /dev/lirc/0"
Damit nun das lirc-Modul und der lirc-daemon automatisch bei Systemstart geladen wird:
rc-update add lircd default
Konfiguration
Jetzt muß nur noch die 'Übersetzungsdatei' installiert werden. Mit etwas Glück befindet sich die passende auf http://lirc.sourceforge.net/remotes/. Sonst muß die Datei /etc/lircd.conf mittels
irrecord /etc/lircd.conf evtl. irrecord /etc/lircd.conf -d /dev/lirc/0
erzeugt werden. (Natürlich muß das Modul lirc_serial, oder welches auf Deine Hardware paßt, geladen sein. Das kann man einfach mit 'lsmod' überprüfen.)
Nun kommt eine Erklärung, die man so befolgen sollte. Es müssen verschiedene Tasten nacheinander gedrückt werden bis irrecord zum nächsten Schritt übergeht. Hier gibt man nun Schüsselwörter an, die man sich selbst aussuchen kann. Empfehlenswert ist aber diese so zu wählen, wie sie von VDR benutzt werden. Nach Eingabe des Schlüsselwortes gefolgt von Enter muß dann die jeweilige Taste auf der Fernbedienung gedrückt werden. Das sieht dann in etwa so aus:
Now start pressing buttons on your remote control. It is very important that you press many different buttons and hold them down for approximately one second. Each button should generate at least one dot but in no case more than ten dots of output. Don't stop pressing buttons until two lines of dots (2x80) have been generated. Press RETURN now to start recording. ................................................................................ Found const length: 107937 Please keep on pressing buttons like described above. ................................................................................ Space/pulse encoded remote control found. Signal length is 83. Found possible header: 9131 4365 Found trail pulse: 675 Found repeat code: 9133 4357 Signals are space encoded. Signal length is 40 Now enter the names for the buttons. Please enter the name for the next button (press <ENTER> to finish recording) POWER Now hold down button "POWER". Please enter the name for the next button (press <ENTER> to finish recording) 1 Now hold down button "1". Please enter the name for the next button (press <ENTER> to finish recording) 2 Now hold down button "2". Please enter the name for the next button (press <ENTER> to finish recording)
Wenn man alle Tasten definiert hat drückt man Enter. Jetzt kommt noch die Abfrage nach dem Toggle-Bit. Dazu drückt man eine Taste so schnell wie möglich nacheinander. Wenn alles gut gelaufen ist wird die Konfigurationsdatei geschrieben.
Checking for toggle bit. Please press an arbitrary button repeatedly as fast as possible (don't hold it down!). .............................. Successfully written config file.
Ansonsten muß die Datei wieder gelöscht werden und man macht das Ganze noch einmal.
rm /etc/lircd.conf irrecord ......
Wenn man jetzt nicht neu starten möchte (wir sind ja Linux-User :-)), kann man den Daemon auch von Hand starten und stoppen.
/etc/init.d/lircd start /etc/init.d/lircd stop
Nun steht der weiteren Konfiguration von VDR und den Plugins nichts mehr im Wege.