Gentoo LIRC

Aus VDR Wiki

Wechseln zu: Navigation, Suche

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.