Gentoo LIRC
Aus VDR Wiki
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
Networking ---> <M> IrDA (infrared) subsystem support ---> 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.
Wenn die Unerstützung für den seriellen Port im Kernel integriert ist, kann man auch folgenden Befehl ausführen, um den seriellen Port freizugeben, damit der lirc Treiber ihn benutzen kann:
setserial /dev/ttySx uart none
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.
Zuerst muß lirc mitgeteilt werden, welchen Treiber es benutzen soll, in unserem Falle seriell. Man trägt dazu die Variable
LIRC_DEVICES="serial"
mittels eines Editors in die /etc/make.conf ein. Alternativ dazu geht das auch, wenn man diese dem emerge-Befehl voranstellt.
LIRC_DEVICES="serial" emerge lirc
Anmerkung: Versionen älter als app-misc/lirc-0.8.0-r1 produzieren Fehlermeldungen bei modprobe lirc_serial (Stand 2006-09-17).
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.
Sollte an dieser Stelle die Meldung "Device or resource busy" erscheinen, so muss vermutlich erst die serielle Schnittstelle initialisiert werden. Dazu holt man setserial mittels
emerge setserial
und fügt der Datei /etc/serial.conf die Zeile
/dev/ttyS0 uart none
für COM1 hinzu. (für COM2 ttyS1, für COM3 ttyS2, ...) Danach kann das Init-Script gestartet (/etc/init.d/serial start) und nochmals ein modprobe lirc_serial versucht werden. Hat dies das Problem behoben, sollte das Init-Script beim Booten gestartet werden:
rc-update add serial default
Leider wartet weder das Init-Script von LIRC noch das Kernel-Modul auf serial. Darum muss /etc/init.d/lircd umgeschrieben werden:
depend() { need serial } start() { ebegin "Starting lircd" einfo "modprobe lirc_serial" /sbin/modprobe lirc_serial einfo "lircd" start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- ${LIRCD_OPTS} eend $? } stop() { ebegin "Stopping lircd" einfo "lircd" start-stop-daemon --stop --quiet --exec /usr/sbin/lircd einfo "rmmod lirc_serial" /sbin/rmmod lirc_serial eend $? }
Zum Test
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.
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
Mit dem Programm irw kann man - wenn der lircd-Dienst läuft - die Zuordnung der Fernbedienungstasten überprüfen. Einfach irw starten und Tasten auf der Fernbedienung drücken. Das Programm irw gibt dann für jedes Ereignis (drücken, loslassen, wiederholen) eine Zeile mit Informationen aus.
Nun steht der weiteren Konfiguration von VDR und den Plugins nichts mehr im Wege.