Start GNU/Linux PC-Funkfernbedienung X10 unter Ubuntu mit Lirc

PC-Funkfernbedienung X10 unter Ubuntu mit Lirc

7763
61

Ich plane meine gute alte schnurlose Tastatur in den Ruhezustand zu schicken und auf die aktuelle Tastatur von Apple aus Alu umzusteigen. Einen Haken hat die Sache jedoch, ich möchte weiterhin den PC von der Couch aus bedienen können, und das geht mit einer kabelgebundenen Tastatur nun einmal schlecht. Nachdem meine Versuche einen seriellen IR-Adapter von Tekram zum Laufen zu bewegen erfolglos blieben, habe ich mich für eine PC-Funkfernbedienung X10 von Pollin entschieden. Billiger geht’s nicht mehr 😉 Und das Gute? Sie funktioniert unter Linux… und das dank Funk sogar durch Wände hindurch. [UPDATE 01.02.2012: Von der X10 gibt es mittlerweile einen Nachfolger, dieser funktioniert ebenso gut, die hier vorgestellten Skripte lassen sich direkt übernehmen.]

Es gäbe auch noch weitere Alternativen wie die Hama MCE Remote Control, Speed-Link SL-6399 Media Remote Control oder die schweineteure Logitech Harmony, doch laut serenity’s blog braucht man für die Harmony noch Software, die stark in der Entwicklung ist und zu den anderen Fernbedienungen konnte ich keine Infos zu Linux finden. Außerdem finde ich die Preise für diese Produkte einfach zu hoch.

Die PC-Funkfernbedienung X10 von Pollin
Die PC-Funkfernbedienung X10 von Pollin

Lirc installieren

Die Fernbedienung wird eigentlich von Haus aus über das Kernel-Modul ati_remote unterstützt. Allerdings hat das Modul ein paar Nachteile. So ist es beispielsweise nicht möglich die Tasten individuell zu belegen. Daher empfehle ich auf das gute alte Lirc zurückzugreifen. Dieses kann man über

$ sudo apt-get install lirc lirc-x xmacro

aus der Paketverwaltung nachinstallieren. Das Paket lirc-x empfehle ich, um später „normale“ Tastendrücke über die Fernbedienung ausführen zu können. Die richtige Auswahl im Dialog für die Konfiguration von Lirc ist ATI/NVidia X10 RF (userspace). Im zweiten Dialog kann man None stehen lassen.

Die Auswahl der richtigen Konfiguration für Lirc
Die Auswahl der richtigen Konfiguration für Lirc

Sollte man sich hier geirrt haben, so kann man Lirc über…

$ sudo dpkg-reconfigure lirc

…neu konfigurieren lassen. Falls man die Fernbedienung bereits angesteckt hat, so wurde dabei das Kernelmodul für sie geladen. Dieses muss man nun einmal entladen und Lirc neu starten lassen. Sonst kommen sich das Kernel-Modul und Lirc in die Quere.

$ sudo rmmod ati_remote
$ sudo /etc/init.d/lirc restart

In Zukunft lässt der Kernel die Finger von der Fernbedienung, weil bei der Installation von Lirc automatisch die Datei /etc/modprobe.d/lirc-blacklist erstellt wurde, die verhindert, dass das Kernelmodul geladen wird.

Fernbedienung konfigurieren

Nun geht es an das eingemachte und den wohl aufwändigsten Teil der Aktion. Die bei der Installation mitgelieferte /etc/lirc/lircd.conf bindet die Datei /usr/share/lirc/remotes/atiusb/lircd.conf.atilibusb ein. Diese Datei beinhaltet die Verknüpfung des Codes einer Taste der Fernbedienung zu einem Namen im Klartext. Des weiteren enthält sie wichtige Konfigurationen zur Fernbedienung.

Eine eigene lircd.conf erstellen

Die automatisch installierte lircd.conf hat bei mir nur teilweise funktioniert. So funktionierten manche Tasten gar nicht, andere Tasten mussten zwei mal gedrückt werden damit die Aktion ausgeführt wird und die automatische Wiederholung (bspw. zum Ändern der Lautstärke) funktionierte überhaupt nicht.

Daher empfehle ich eine eigene lircd.conf anzulegen und auch nicht nach passenden lircd.conf im Internet zu suchen. Ich habs probiert und hätte mir viel Zeit erspart, wenn ich mir kurz die Mühe gemacht hätte selber eine lircd.conf zu erstellen. Die Suche und die Probiererei hat deutlich mehr Zeit gekostet als das Erstellen einer eigenen lircd.conf… Dieses geschieht nun über den Befehl

$ sudo /etc/init.d/lirc stop
$ irrecord -H atilibusb ~/lircd.conf

Der Verlauf dieser Aktion ist eigentlich selbsterklärend. Wichtig ist es die Anweisungen genau zu lesen und zu befolgen, dann kann nicht viel schief gehen. Bei der Wahl der Namen für die Tasten ist man frei, man kann beliebigen Namen wählen. Hat man den Assistenten beendet, so kann man über

$ sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd.conf.orig
$ sudo cp ~/lircd.conf /etc/lirc/lircd.conf
$ sudo /etc/init.d/lirc start

die Konfiguration kopieren und Lirc neu starten. Wer sich die selbe Fernbedienung von Pollin gekauft hat, der müsste auch meine lircd.conf benutzen können. Besitzer der „PC-Funkfernbedienung X10“ von Pollin führen daher einfach nur

$ wget http://linuxundich.de/static/lircd.conf.txt
$ sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd.conf.orig
$ sudo cp lircd.conf.txt /etc/lirc/lircd.conf
$ sudo /etc/init.d/lirc restart

aus und ersparen sich so den Assistenten. Nun müsste die Fernbedienung vollständig konfiguriert sein. Man kann dies über

$ irw
00000014709b0000 00 world x10
00000014709b0000 01 world x10
[...]

austesten. Jede Taste sollte nun eine Ausgabe bewirken. Ist dies der Fall, so ist die Fernbedienung korrekt konfiguriert und man kann sich dem Einrichten von Lirc widmen.

Lirc funktioniert nach Neustart nicht

Es gibt einen Bug im Lirc-Paket, wonach Lirc nach einem Neustart nicht funktioniert. Obwohl der Dienst läuft ergibt irw bspw. keine Ausgabe. Ich helfe mir hier mit einer Quick&Dirty-Lösung. Ich trage einfach

# Fix for https://bugs.launchpad.net/ubuntu/+source/lirc/+bug/334144
/etc/init.d/lirc restart

in die /etc/rc.local ein. Diese Datei wird automatisch am Ende eines jeden Boot-Vorganges ausgeführt und „löst“ somit das Problem…

Lirc einrichten

Nun empfängt Lirc die Signale der Fernbedienung, allerdings weiß Lirc noch nicht was es denn machen soll, wenn eine der Tasten gedrückt wird. Man muss also Tastendrücke mit Aktionen verknüpfen. Diese Verknüpfungen kann jeder Benutzer über die Datei ~/.lircrc vornehmen.

Die Konfigurationsdateien

Man kann jetzt keine Kochrezepte nennen, denn jeder Anwender wird wohl andere Programme benutzen und unterschiedliche Belegungen verwenden wollen. Ich gebe einfach ein nur ein paar Beispiele zur Bedienung der Medientasten, von tvtime und Totem sowie dem Herunterfahren des Rechners über die Fernbedienung an. Weitere ausführliche Erklärungen bekommt man bspw. im Wiki von ubuntuusers.de unter Lirc/Tasten mit Funktionen belegen.

Im Folgenden zeige ich die lirc-Konfigurationen, die ich für mein System benutze. Ob man diese Beispiele 1:1 übernehmen kann hängt davon ab welche Bezeichnungen man für die Knöpfe der Fernbedienung man in der lircd.conf benutzt. Eventuell muss man noch die Zeilen mit button anpassen. Letztendlich sollen die Beispiele nur als Anregung für Euch dienen…

~/.lircrc

## MediaKeys
include ~/.lirc/mediakeys

### Totem
include ~/.lirc/totem

### Tvtime
begin
        prog   = irexec
        button = livetv
        config = if [ -z $(pgrep tvtime) ]; then (tvtime --device /dev/vbi0 &); fi
        mode   = tvtime
end
include ~/.lirc/tvtime

### Tvtime
begin
        prog   = irexec
        button = music
        config = if [ -n $(pgrep -f quodlibet) ]; then (quodlibet &); fi
        mode   = quodlibet
end
include ~/.lirc/quodlibet

### Session
begin
        prog = irexec
        button = off
        config = gnome-session-save --shutdown-dialog --gui
        mode = gnome-session-save
end
include ~/.lirc/gnome-session-save

~/.lirc/totem

### Totem
begin totem
        begin
                prog   = Totem
                button = off
                config = quit
                flags = quit mode
        end
        begin
                prog   = Totem
                button = forward
                config = seek_forward
                repeat = 3
        end
        begin
                prog   = Totem
                button = rewind
                config = seek_backward
                repeat = 3
        end
        begin
                prog   = Totem
                button = right
                config = volume_up
                repeat = 1
        end
        begin
                prog   = Totem
                button = left
                config = volume_down
                repeat = 1
        end
        begin
                prog   = Totem
                button = angle
                config = fullscreen
        end
end totem

~/.lirc/mediakeys

### MediaKeys
begin
        prog = irexec
        button = volume+
        repeat = 1
        delay = 5
        config = echo KeyStrPress XF86AudioRaiseVolume KeyStrRelease XF86AudioRaiseVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = volume-
        repeat = 1
        delay = 5
        config = echo KeyStrPress XF86AudioLowerVolume KeyStrRelease XF86AudioLowerVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = mute
        repeat = 0
        config = echo KeyStrPress XF86AudioMute KeyStrRelease XF86AudioMute | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = play
        config = echo KeyStrPress XF86AudioPlay KeyStrRelease XF86AudioPlay | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = pause
        config = echo KeyStrPress XF86AudioPause KeyStrRelease XF86AudioPause | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = next
        config = echo KeyStrPress XF86AudioNext KeyStrRelease XF86AudioNext | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = previous
        config = echo KeyStrPress XF86AudioPrev KeyStrRelease XF86AudioPrev | xmacroplay $DISPLAY
end
begin

~/.lirc/tvtime

## TVTIME ##
begin tvtime
	begin
		prog = irexec
		button = off
		config = tvtime-command QUIT
		flags = quit mode
	end
	begin
		prog = irexec
		button = world
		config = tvtime-command DISPLAY_INFO
	end
	begin
		prog = irexec
		button = angle
		config = tvtime-command TOGGLE_FULLSCREEN
	end
	begin
		prog = irexec
		button = mute
		config = tvtime-command TOGGLE_MUTE
	end
	begin
		prog = irexec
		button = up
		config = tvtime-command UP
	end
	begin
		prog = irexec
		button = down
		config = tvtime-command DOWN
	end
	begin
		prog = irexec
		button = right
		config = tvtime-command RIGHT
		repeat = 1
	end
	begin
		prog = irexec
		button = left
		config = tvtime-command LEFT
		repeat = 1
	end
	begin
		prog = irexec
		button = program+
		config = tvtime-command CHANNEL_UP
	end
	begin
		prog = irexec
		button = program-
		config = tvtime-command CHANNEL_DOWN
	end
	begin
		prog = irexec
		button = back
		config = tvtime-command CHANNEL_JUMP
	end
	begin
		prog   = irexec
		button = 1
		config = tvtime-command CHANNEL_1
	end
	begin
		prog   = irexec
		button = 2
		config = tvtime-command CHANNEL_2
	end
	begin
		prog   = irexec
		button = 3
		config = tvtime-command CHANNEL_3
	end
	begin
		prog   = irexec
		button = 4
		config = tvtime-command CHANNEL_4
	end
	begin
		prog   = irexec
		button = 5
		config = tvtime-command CHANNEL_5
	end
	begin
		prog   = irexec
		button = 6
		config = tvtime-command CHANNEL_6
	end
	begin
		prog   = irexec
		button = 7
		config = tvtime-command CHANNEL_7
	end
	begin
		prog   = irexec
		button = 8
		config = tvtime-command CHANNEL_8
	end
	begin
		prog   = irexec
		button = 9
		config = tvtime-command CHANNEL_9
	end
	begin
		prog   = irexec
		button = 0
		config = tvtime-command CHANNEL_0
	end
	begin
		prog = irexec
		button = OK
		config = tvtime-command ENTER
	end
end tvtime

~/.lirc/gnome-session-save

begin gnome-session-save
        begin
                prog = irxevent
                button = up
                config = Key Up CurrentWindow
        end
        begin
                prog = irxevent
                button = down
                config = Key Down CurrentWindow
        end
        begin
                prog = irxevent
                button = ok
                config = Key Return CurrentWindow
        end
end gnome-session-save

Wer die Copy&Paste-Aktion scheut, der kann all diese Beispiel über das Archiv lirc.zip herunterladen und im Homeverzeichnis entpacken.

Totem

Totem bringt von Haus aus Support für Lirc über ein Plugin mit. Allerdings muss man dieses erst über Bearbeiten | Plugins | Infrarot-Fernbedienung aktivieren. Macht man dies nicht, so tut sich bei Totem nichts.

irexec

Fehlt nur noch irexec. Dieses Programm lauscht im Hintergrund auf lirc und führt Aktionen aus, wenn diese bei lirc eingehen. Das Programm wird automatisch zusammen mit Lirc installiert. Zusätzlich ist noch irxevent relevant. Dieses Programm kann Tasteneingaben der Tastatur emulieren. So kann man über die Fernbedienung bspw. die Tasten Hoch/Runter benutzen und so Anwendungen steuern. Ich benutze dies bspw. beim Steuern des Shutdown-Dialoges von GNOME.

Testen

Zum Testen ruft man beide Programm am besten in zwei Terminal ohne Optionen auf.

$ irexec
$ irxevent

Starten

Klappt alles zur vollsten Zufriedenheit so kann man die Programme als Daemon starten. So laufen sie im Hintergrund.

$ irexec -d
$ irxevent -d

Autostart

Damit die beiden Dienste automatisch beim Einloggen gestartet werden, sollte man sie in System | Einstellungen | Startprogramme eintragen. Dazu fügt man einfach zwei neue Einträge mit den zuletzt genannten Befehlen hinzu.

61 Kommentare

  1. Hmmm… das hat bei mir nicht so einfach funktioniert. Ubuntu 12.04 LTS. Lirc laeuft schon prima mit einem TechnoTrend IR USB-Receiver. Das ging „out of the box“, wie man so schoen sagt. Jetzt eine alte X10-FB ausgepackt und von einem Kumpel einen entsprechenden USB-X10-Receiver geliehen, um mal zu sehen, was geht. Nix geht.

    dpkg-reconfigure lirc laesst mich aus

    ATI/NVidia/X10 I & II RF Remote
    ATI/NVidia/X10 RF Remote (userspace)

    auswaehlen. Resultat bei Auswahl des userspace-Treibers:

    find: `/sys/class/rc/*/': No such file or directory
     * Stopping remote control daemon(s): LIRC
       ...fail!
    ls: cannot access /lib/modules/3.4.4/kernel/drivers/staging/lirc: No such file or directory
     * Loading LIRC modules
       ...done.
    find: `/sys/class/rc/*/': No such file or directory
     * Starting remote control daemon(s) : LIRC
       ...done.

    Irgendwie scheinen da Treiber zu fehlen? Ein modprobe ati_remote bringt beim anschliessenden lsmod

    ati_remote             18133  0
    rc_core                22276  1 ati_remote

    Das anschliessend irrecord -H atilibusb liefert:

    irrecord: couldn't find a compatible USB device
    irrecord: could not init hardware (lircd running ? --> close it, check permissions)

    Ideen?

  2. Es scheint auch, als wuerden die Treiber fehlen:

    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_parallel.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_serial.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_igorplugusb.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_sir.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_sasem.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_ttusbir.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_zilog.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_imon.ko
    /lib/modules/3.4.4/kernel/drivers/staging/media/lirc/lirc_bt829.ko
    /lib/modules/3.4.4/kernel/drivers/media/rc/ir-lirc-codec.ko
    /lib/modules/3.4.4/kernel/drivers/media/rc/keymaps/rc-lirc.ko
    /lib/modules/3.4.4/kernel/drivers/media/rc/lirc_dev.ko

    ist alles, was ich zu lirc unter lib/modules/3.4.4 finden kann.

  3. Ah, Folgendes hat’s fuer mich geloest. Mein lsusb zeigt

    Bus 002 Device 009: ID 0bc7:0006 X10 Wireless Technology, Inc. Wireless Transceiver (ACPI-compliant)

    Bei dpkg-reconfigure lirc habe ich

    ATI/NVidia/X10 I & II RF Remote

    ausgewaehlt. Damit hat das ganze bereits eine lircd.conf unter /etc/lirc installiert, die ihrerseits mit

    include „/usr/share/lirc/extras/more_remotes/atiusb/lircd.conf.atiusb“

    auf eine Kombi verschiedener Fernbedienungs-Configs verweist. Bescheuerterweise musste ich aber in /etc/lirc/hardware.conf noch

    REMOTE_DRIVER=“atilibusb“

    eintragen, dann mit

    service lirc restart

    den LIRC durchstarten. Danach hat ein irw wechselweise Keys verschiedener Fernbedienungen angezeigt, bei mir unter anderem von ATIUSB_MEDION_MD95700 und SAPPHIRE_ATIUSB_5000023600. Das habe ich erst verstanden, als ich das Include im generierten /etc/lirc/lircd.conf sah und die dort referenzierte Datei. Von dort habe ich dann den Abschnitt zu ATIUSB_MEDION_MD95700 direkt in die /etc/lirc/lircd.conf kopiert und den Include auskommentiert, dann mit

    service lirc restart

    den LIRC-Daemon durchgestartet. Jetzt funzt das einwandfrei.

    Cheers,
    — Axel

  4. Ich bin mit Linux Mint Debian unterwegs.

    LIRC hab ich installiert.

    Wenn ich nun den Befehl absetze, passiert gar nichts:

    sudo dpkg-reconfigure lirc

    Hast du vielleicht eine Idee woran das liegen könnte, und wie man das behebt?

Schreibe einen Kommentar zu Axel Antwort abbrechen

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein