iMON Fernbedienung unter Linux ab Kernel 2.6.35

Seit dem Kernel 2.6.35 haben sich einiges im Bezug auf den Umgang des Linux Kernels mit Fernbedienungen geändert. Im besonderen betrifft das die iMON-Geräte von SoundGraph. Um diese kümmert sich jetzt der Treiber 'imon', der sie als Eingabegeräte zur Verfügung stellt (/dev/input/eventX). Das führt dazu, dass eine klassische LIRC-Installation die Geräte nicht mehr erkennt. Einen ausführlichen Artikel findet man bei Jarod Wilson: http://wilsonet.com/?page_id=95 http://wilsonet.com/?page_id=99 (Eine alternative, detailierte Anleitung findet man auch unter http://www.vdr-portal.de/board18-vdr-hardware/board13-fernbedienungen/p9...)

LIRC Installation

Im Prinzip ist es aber einfach, die Fernbedienung wieder an LIRC anzubinden, um so seine gewohnte übliche Konfiguration weiterhin zu verwenden. Man muss lediglich Lirc mit dem devinputDriver konfigurieren. Ich empfehle dafür, LIRC aus den Sourcen selbst zu übersetzen, da man dadurch flexibler bei der Wahl der Treibers ist, das Programm schon beim kompilieren entschlacken kann und es keine Hexerei ist.

  • Installieren der notwendigen Pakete (als root oder mittels sudo):
    ~# apt-get install make build-essentials linux-source dialog
    
  • Herunterladen des Quellcodes von http://sourceforge.net/projects/lirc/files/LIRC oder über http://www.lirc.org und entpacken.
  • Konfigurieren und Installation von LIRC (als root oder mittels sudo in dem entpackten Ordner):
    ~# ./setup.sh
         # hier den gewünschten Treiber (devinput) auswählen
    ~# make
    ~# make install

Konfigurieren von LIRC

Jetzt muss man LIRC noch für die iMON Fernbedienung über die Input Devices konfiguriert werden (siehe hierfür auch http://lirc.org/html/devinput.html). Dazu editiert man die Datei hardware.conf, die abhängig von der verwendeten Distribution meist unter /etc/lirc. Essentiell sind hierbei vor allem die folgenden Zeilen:

LOAD_MODULES=true
DRIVER="devinput"
DEVICE="/dev/input/by-id/usb-15c2_ffdc-event-if00"

Den Pfad zum Device sollte man unbedingt über die ID festlegen, da die nummerierten Devices unter /dev/input/event[X] in ihrer Reihenfolge variieren können. Die gesuchte ID stellt sich zusammen aus der Hersteller und Geräte ID. Die iMON Geräte liefern hier aber mehrere Geräte, da die Fernbedienung einen Maus und einen Keyboard Modus unterstützt. Der Keyboard-Modus ist hier üblicherweise mit der Endung -if00 verknüpft. Abschließend kann man LIRC (neu)starten (/etc/init.d/lircd restart) und die Konfiguration mittels irw testen. Dabei sollten die einzelnen Codes der Fernbedienung ausgegeben werden, bis man das Programm mit Ctrl-Cabbricht.

Patchen von iMON

Für die iMON Geräte kann es hilfreich sein, den Moduswechsel zwischen Keyboard und Maus zu deaktivieren, um so den dafür vorgesehenen Knopf auf der Fernbedienung als "Hinauf"-Taste zu verwenden (und die übrigen Knöpfe entsprechend für die anderen Cursor-Tasten zu konfigurieren). Dafür setzt man im Kernel Modul für den iMON Driver den paramter nomouse auf 1, indem man die Datei /etc/modprobe.d/imon.conferstellt oder bearbeitet und die Zeile

options imon nomouse=1

einfügt. Bei manchen Versionen des Drivers ist diese Option aber leider fehlerhaft und zeigt daher keine Wirkung. Abhilfe schafft ein Patch, den man nach dieser Anleitung einspielt: (Von http://www.vdr-portal.de/board18-vdr-hardware/board13-fernbedienungen/p9...)

  • Herunterladen des Patches von http://sourceforge.net/mailarchive/forum.php?thread_name=AANLkTiks4uM3an... (ganz am unteren Ende der Seite)
  • Kernel Sourcen installieren
    ~# apt-get install linux-source
  • Vorbereiten
    ~# cd /usr/src/linux-source-2.6.35/linux-source-2.6.35
    /usr/src/linux-source-2.6.35/linux-source-2.6.35# make oldconfig && sudo make prepare
    /usr/src/linux-source-2.6.35/linux-source-2.6.35# sudo make modules_prepare
  • Einspielen des Patches (Achtung, der Sub-Pfad zur Datei imon.ckann je nach Distribution abweichen!)
    ~# cd /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR
    /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# patch < imon.c.patch
  • Altes Modul sichern
    ~# cd /lib/modules/2.6.35-23-generic/kernel/drivers/media/IR
    /lib/modules/2.6.35-23-generic/kernel/drivers/media/IR# ll
    insgesamt 212
    drwxr-xr-x 3 root root  4096 2010-11-08 15:06 ./
    drwxr-xr-x 7 root root  4096 2010-11-08 15:06 ../
    [...]
    -rw-r--r-- 1 root root 37884 2010-11-06 01:44 imon.ko
    [...]
    
    /lib/modules/2.6.35-23-generic/kernel/drivers/media/IR# mv imon.ko ~/imon.ko.orig
    
  • Alte Module entladen
    ~# /etc/init.d/lircd stop
    lirc stop/waiting
    ~# lsmod | grep imon
    rc_imon_pad             1437  0
    imon                   21769  0
    ir_core                14654  9 ir_lirc_codec,ir_sony_decoder,ir_jvc_decoder,ir_rc6_decoder,rc_imon_pad,ir_rc5_decoder,ir_nec_decoder,imon
    ~# rmmod imon
  • gepatchtes Modul kompilieren
    ~#cd /usr/src/linux-source-2.6.35/linux-source-2.6.35
    /usr/src/linux-source-2.6.35/linux-source-2.6.35# sudo make clean
      CLEAN   /usr/src/linux-source-2.6.35/linux-source-2.6.35
      CLEAN   .tmp_versions
    
    ## Sollte eine Datei "Modules.symvers" oder ähnlich vorhanden sein, dann weg damit.
    /usr/src/linux-source-2.6.35/linux-source-2.6.35# find -name *symvers* ./drivers/media/IR/Module.symvers
    /usr/src/linux-source-2.6.35/linux-source-2.6.35# rm ./drivers/media/IR/Module.symvers
    
    ## compilieren
    /usr/src/linux-source-2.6.35/linux-source-2.6.35# cd drivers/media/IR/
    /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
     
    ## Modul händisch laden (zu Testzwecken)
    /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# insmod imon.ko
     /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# lsmod | grep imon
    rc_imon_pad             1437  0
    imon                   20985  0
    ir_core                14654  9 rc_imon_pad,imon,ir_lirc_codec,ir_sony_decoder,ir_jvc_decoder,ir_rc6_decoder,ir_rc5_decoder,ir_nec_decoder
    
    /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# tail -f /var/log/syslog
    kernel: [ 1400.240517] Registered IR keymap rc-imon-pad
    kernel: [ 1400.240659] input: iMON Remote (15c2:ffdc) as /devices/pci0000:00/0000:00:1d.2/usb4/4-2/4-2:1.0/rc/rc0/input4
    kernel: [ 1400.240758] rc0: iMON Remote (15c2:ffdc) as /devices/pci0000:00/0000:00:1d.2/usb4/4-2/4-2:1.0/rc/rc0
    kernel: [ 1400.268015] imon 4-2:1.0: Unknown 0xffdc device, defaulting to VFD and iMON IR (id 0x23)
    kernel: [ 1400.284014] imon 4-2:1.0: iMON device (15c2:ffdc, intf0) on usb<4:3> initialized
    kernel: [ 1400.284046] usbcore: registered new interface driver imon
    kernel: [ 1400.756122] input: iMON Remote (15c2:ffdc) (lircd bypass) as /devices/virtual/input/input5
    
    ## Installieren 
    /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# sudo cp imon.ko /lib/modules/2.6.35-23-generic/kernel/drivers/media/IR
    /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# depmod -ae
    WARNING: -e needs -E or -F
    /usr/src/linux-source-2.6.35/linux-source-2.6.35/drivers/media/IR# modprobe imon
    kernel: [ 2009.092892] Registered IR keymap rc-imon-pad
    kernel: [ 2009.093281] input: iMON Remote (15c2:ffdc) as /devices/pci0000:00/0000:00:1d.2/usb4/4-2/4-2:1.0/rc/rc0/input6
    kernel: [ 2009.093458] rc0: iMON Remote (15c2:ffdc) as /devices/pci0000:00/0000:00:1d.2/usb4/4-2/4-2:1.0/rc/rc0
    kernel: [ 2009.124022] imon 4-2:1.0: Unknown 0xffdc device, defaulting to VFD and iMON IR (id 0x23)
    kernel: [ 2009.124028] imon 4-2:1.0: imon_set_display_type: overriding display type to 1 via modparam
    kernel: [ 2009.136515] imon 4-2:1.0: iMON device (15c2:ffdc, intf0) on usb<4:3> initialized
    kernel: [ 2009.136545] usbcore: registered new interface driver imon
    kernel: [ 2009.876613] input: iMON Remote (15c2:ffdc) (lircd bypass) as /devices/virtual/input/input7
    
  • LIRC neu starten
    ~# /etc/init.d/lircd start

Dannach funktioniert der oben erwähnte nomouse Modus auch und man kann die Buttons der Fernbedienung als Steuerkreuz nutzen, ohne Gefahr zu laufen, den Eingabemodus zu wechseln. Testen kann man das, indem man mit irw die Inputsignale der Fernbedienung beobachtet und auf den Keyboad/Mouse Button drückt. Vor dem Patch kam hier kein Signal an, da die Taste nicht an LIRC weitergereicht wurde, sondern im Treiber den Mode-Switch signalisiert hat. Jetzt wird die Taste wie jede andere an LIRC zur Verarbeitung weitergereicht.

Tags: