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.
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
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
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
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://christoph-langner.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.