Erstellt am 01.02.2011
Das Projekt
Zur Zeit gibt es eine wunderschöne Multimedia-IR-Tastatur bei Pollin namens MERLIN von RUWIDO. Sie ist super handlich und damit ideal für den Wohnzimmer- oder HTPC. Also kam sie gleich den Warenkorb in der Hoffnung, dass man sie ohne größere Probleme per LIRC auslesen kann.
Leider konnte ich genau dies mit meinem lirc_serial-Modul nicht. Einige Zeit später kam jedoch der Hinweis aus dem Thread zur VIP1710 im Mikrocontroller.net, dass die Tastatur sich ohne Probleme mit der Box auslesen lässt. Das habe ich natürlich gleich probiert und es geht tatsächlich!
Das Problem ist nur, wie bekommt man die Eingaben von der Box auf den Rechner? Hier bin ich zunächst auf Openhardware - IR-Keybord for Linux gestoßen. Dazu hatte ebenfalls ein eifriger Bastler im Mikrocontroller.net das passende uinput-Modul für die Box kompiliert. Nach ein wenig probieren, konnte ich so die ersten Tastatureingaben auf der Box sehen.
Aber eigentlich wollte ich die Eingaben ja auf dem PC und nicht auf der Box. Also entstanden die folgenden Programme mit der nun erst LIRC auf der Box die Tastatur empfängt. Weiterhin läuft dort irexec, welches nun bei jeder Taste das erste Programm "talker" aufruft. Dies Sendet den per Argument übergebenen String per Netzwerk als UDP-Paket an mein zweites Programm "net_kbd". Das läuft jetzt auf dem PC und wandelt den String in einen Keycode um, der schließlich per uinput-Device an das System geschickt wird.
Auf diese Weise kann ich nun also die Eingaben von der Tastatur mit der Box empfangen und an den PC weiterleiten. Hilfreich beim Programmieren war vorallem Beej's Guide to Network Programming, von dem ich auch das talker-Programm übernommen habe. Den listener habe ich um die uinput-Ausgabe erweitert.
Um die Funktionsweise noch einmal näher zu erläutern habe ich ein kleines Flussdiagramm erstellt.
Programme und Installation
Programme:
Im Archiv befinden sich folglich die Programme talker und net_kbd. Ich habe sie jeweils im x86_64, i386 und mipsel Format kompiliert, falls man die Programme noch anderweitig verwenden möchte. Ebenso liegt auch ein uinput.o-Kernelmodul bei, falls man beide Programme direkt auf der Box ausführen möchte, sodass die Ausgaben auch auf der Box landen. Zudem ist noch das Script lirckbd vorhanden, das dafür gedacht ist, an einer Stelle die Ziel-IP für das talker-Programm festzulegen. So muss sie nicht in jedem Aufruf von irexec stehen.
Installation:
Nachdem ihr das Archiv ausgepackt habt, kopiert die Datei talker.mipsel nach /usr/bin/talker auf der VIP1710. Dort kommt ebenso das lirckbd-Script hin.
Das net_kbd-Programm kommt auf den jeweiligen Zielrechner. Dies kann die Box selber sein oder jeder andere Linux-Rechner mit uinput-Support. Hier kann es z.B. in /usr/local/bin.
Auf der Box könnt ihr jetzt mit Hilfe von hilses Mod und dessen LIRC-Paket die Box soweit bereit machen, dass nur noch die ebenfalls im Archiv enthaltenen lircd.conf und lircrc nach /etc/ auf der Box verschoben werden müssen. Anschließend das Kernelmodul 08ir mit rmmod 08ir entladen, die beiden Kernelmodule für lirc laden. Dann lircd sowie irexec starten: lircd -d /dev/lirc/0 und irexec -d /etc/lircrc. Nicht vergessen im lirckbd-Script die Ziel-IP einzustellen.
Auf dem Zielrechner ladet ihr das uinput-Kernelmodul (modprobe uinput) und startet dort das net_kbd-Programm. Jetzt solltet ihr mit der Tastatur Buchstaben tippen können.
HINWEIS: Diese Software wurde quick'n dirty programmiert, wie es so schön heißt! D.h. es sind keine Vorkehrungen getroffen ungültige Eingaben abzufangen oder das Programm gegen Hacking-Attacken abzusichern! Bitte also nur in sicheren Netzen verwenden! Ich bin ebenso kein C-Crack von daher nehme ich sehr gerne Verbesserungen der Software entgegen.
Hier nun also das Archiv mit Quellen und binaries zum Ausprobieren (neue Version von 06.02.2011):
net_kbd.tar.bz2
Als kleine Ergänzung habe ich für die Box auch noch die wol.c aus dem Etherboot-Projekt kompiliert, sodass man damit den Zielrechner auch per Tastatur starten kann. Damit hat man dan quasi aus dem Wake-On-LAN ein Wake-On-LIRC gemacht
wol
Mehr Hard- und Software
Wie ich inzwischen herausgefunden habe, unterstützt LIRC von sich aus auch schon das Übertragen von empfangenen Codes per Netzwerk an einen anderen LIRC-Daemon. Das möchte ich euch natürlich nicht vorenthalten. Über die beiden Parameter '-l' und '-c' kann ein LIRC-Daemon jeweils als Server (Listen) und Client (Connect) gestartet werden.
Desweiteren habe ich einen interessanten Blogpost zu einem Hardware-Interface gefunden: USB Receiver for the Ruwido Merlin IR Keyboard. Hier stellt der Entwickler eine abgewandelte Version des Empfängers von Testblog vor. Dieser Empfänger lässt sich per USB an den Rechner anschließen und wird als gewönliche Tastatur erkannt:
input: testblog.arles-electrique.de RUWIDO Merlin IR-USB-HID-Receiver as /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/input/input74 hid-generic 0003:4242:E131.0038: input,hidraw3: USB HID v1.01 Keyboard [testblog.arles-electrique.de RUWIDO Merlin IR-USB-HID-Receiver] on usb-0000:00:14.0-2/input0
Leider funktionieren bei mir die Lauter/Leiser-Tasten nicht. Die CH+/- Tasten habe ich, wie schon bei meiner hier vorgestellten Methode auf Bild-Auf/Ab umgestellt (dazu einfach die keymap.h anpassen).
Das ganze lässt sich sehr easy an einem Nachmittag aufbauen und benötigt nur ein paar Widerlinge, Kondis und zwei Z-Dioden. Wie ihr sehen könnt, hatte ich nur noch einen 20-poligen IC-Sockel übrig, zum Glück braucht man die unteren Pins des µC nicht