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.
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.
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.
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:
Irgendwie scheinen da Treiber zu fehlen? Ein
modprobe ati_remote
bringt beim anschliessenden lsmodDas anschliessend
irrecord -H atilibusb
liefert:Ideen?
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.
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
Ich bin mit Linux Mint Debian unterwegs.
LIRC hab ich installiert.
Wenn ich nun den Befehl absetze, passiert gar nichts:
Hast du vielleicht eine Idee woran das liegen könnte, und wie man das behebt?