Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
Die Einrichtung einer Fernbedienung für Kodi (vormals XBMC alias XBox Media Center) führt immer wieder zu Irritationen. Von funktioniert überhaupt nicht, obskuren Fehlern bis hin zu klappt auf Anhieb ist alles vorhanden. Viele Probleme haben ihre Ursache im mangelnden Wissen über die im Kernel eingebauten Lirc-Funktionen. Seit der Kernelversion 2.6.33 enthalten alle Mainline-Kernel ein Modul ir-core
. In diesem Artikel geht es um die Einrichtung von Fernbedienungen für Kodi ohne die Installation von Lirc (und inputlirc).
Neben den Grundfunktionen einer Fernbedienung wie Lautstärke und Pfeiltasten, die ohne Anpassung immer systemweit funktionieren, werden in dieser Anleitung alle anderen Funktionen für Kodi als Tastatur-Events erläutert. Es reicht die Modifikation oder Erstellung einer Konfigurationsdatei. Änderungen in Kodi sind bei dieser Methode nicht erforderlich.
Zuerst muss festgestellt werden, ob der eigene Receiver geeignet ist.
Wenn Lirc, Eventlirc und Inputlirc nicht installiert ist, reicht es, den Receiver anzuschließen und die Lautstärketasten der Fernbedienung (FB) zu probieren. Lässt sich die Lautstärke steuern, kennt der Kernel den Receiver und die FB. Eine passende Keymap ist im Verzeichnis /lib/udev/rc_keymaps/ vorhanden. Nach der Installation von ir-keytable geht es im Abschnitt Keymap weiter. Eventlirc ist Bestandteil von z.B. YaVDR, der Paketname kann je nach Quelle abweichen. Für einen Test muss es gestoppt werden.
Bei Nutzung der im Kernel eingebauten Lirc-Funktionen entfallen Befehle wie irw. Stattdessen ist das Programm ir-keytable zuständig [1]:
ir-keytable (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install ir-keytable
sudo aptitude install ir-keytable
Falls Lirc läuft, muss dieses gestoppt werden [2]:
sudo service lirc stop sudo service inputlirc stop sudo service eventlircd stop
Bei der Installation von Lirc werden je nach genutztem Receiver Module durch einen Eintrag in die Blacklist gesperrt. Daher ist zu prüfen, ob Module in der Lirc-Blacklist stehen:
cat /etc/modprobe.d/lirc-blklist.conf
Wenn in der Ausgabe des Befehls ein Modul erscheint, ist dieses Modul zu laden (häufiger Kandidat ist z.B. ati_remote
):
sudo modprobe -v MODUL
Testen des Receivers:
ir-keytable
Ausgabebeispiele:
LogiLink DVB-T IR Receiver:
Found /sys/class/rc/rc0/ (/dev/input/event11) with: Driver dvb_usb_rtl28xxu, table rc-empty Supported protocols: NEC RC-5 RC-6 JVC SONY SANYO LIRC Enabled protocols: NEC RC-5 RC-6 JVC SONY SANYO LIRC
X10 Medion OR24E Receivers (gilt auch für baugleiche wie die RF MCE Remote (OR22V)):
Found /sys/class/rc/rc1/ (/dev/input/event9) with: Driver ati_remote, table rc-medion-x10-or2x Supported protocols: other Enabled protocols: other
Beide Receiver werden erkannt. Die Bezeichnung hinter table
gibt an, ob eine Keymap in /lib/udev/rc_keymaps/ vorhanden ist. In den Beispielen ist das nur für die X10 OR2x der Fall. Für den LogiLink Receiver wird rc-empty
angegeben. Es ist keine Keymap vorhanden, eine neue Keymap muss erstellt werden.
Diese Schritte entfallen, wenn lirc/inputlirc/eventlirc nicht installiert sind.
Lirc und Inputlirc deinstallieren:
sudo apt-get purge lirc inputlirc
Lirc-Blacklist entfernen, falls vorhanden:
sudo rm /etc/modprobe.d/lirc-blklist.conf
ir-keytable Parameter | |
Verfügbare Optionen | Bedeutung |
-c, --clear | löscht eine evt. vorhandene Zuordnungs-Tabelle |
-p, --protokoll=Protokoll | Protokolle, die genutzt werden. Verfügbar: NEC, RC-5, RC-6, JVC, SONY, other |
-t, --test | Testen der Eingabe-Events |
-r, --read | Liest die aktive Keymap ein und gibt sie aus |
sudo ir-keytable -c -p NEC,RC-5,RC-6,JVC,SONY -t
Ausgabebeispiele:
LogiLink DVB-T Receiver mit einer X4-Tech Fernbedienung:
1408376196.465580: event type EV_MSC(0x04): scancode = 0x05 1408376196.465580: event type EV_SYN(0x00). 1408376200.473560: event type EV_MSC(0x04): scancode = 0x02 1408376200.473560: event type EV_SYN(0x00). 1408376205.681561: event type EV_MSC(0x04): scancode = 0x0a 1408376205.681561: event type EV_SYN(0x00).
LogiLink DVB-T Receiver mit einer Dayton DVD Player Fernbedienung:
1408743753.124909: event type EV_MSC(0x04): scancode = 0x201d 1408743753.124909: event type EV_SYN(0x00). 1408743757.532918: event type EV_MSC(0x04): scancode = 0x2011 1408743757.532918: event type EV_SYN(0x00). 1408743766.340913: event type EV_MSC(0x04): scancode = 0x205c 1408743766.340913: event type EV_SYN(0x00).
Wenn die Fernbedienung reagiert, sollte man die Protokolle einzeln testen und nur das funktionierende Protokoll später in die Keymap eintragen.
Mit dem nächsten Befehl kann festgestellt werden, ob es schon eine passende Keymap im System gibt:
ls /lib/udev/rc_keymaps/
listet alle vorhanden Keymaps auf. Wenn an Hand des Namen keine offensichtliche Wahl möglich ist, hilft grep und einer der Scancodes aus dem Test weiter:
grep -iH SCANCODE /lib/udev/rc_keymaps/*
Für SCANCODE
die Ausgabe einer Taste aus ir-keytable -t
einsetzen. In diesem Beispiel der LogiLink wäre das 0x05
.
$ grep -iH '0x05 KEY' /lib/udev/rc_keymaps/*
/lib/udev/rc_keymaps/apac_viewcomp:0x05 KEY_5 /lib/udev/rc_keymaps/ati_tv_wonder_hd_600:0x05 KEY_REWIND /lib/udev/rc_keymaps/ati_x10:0x05 KEY_WWW /lib/udev/rc_keymaps/avermedia_cardbus:0x05 KEY_1 /lib/udev/rc_keymaps/avermedia_rm_ks:0x0501 KEY_POWER2 /lib/udev/rc_keymaps/avermedia_rm_ks:0x0502 KEY_CHANNELUP /lib/udev/rc_keymaps/avermedia_rm_ks:0x0503 KEY_CHANNELDOWN /lib/udev/rc_keymaps/avermedia_rm_ks:0x0504 KEY_VOLUMEUP /lib/udev/rc_keymaps/avermedia_rm_ks:0x0505 KEY_VOLUMEDOWN /lib/udev/rc_keymaps/avermedia_rm_ks:0x0506 KEY_MUTE /lib/udev/rc_keymaps/avermedia_rm_ks:0x0507 KEY_RIGHT /lib/udev/rc_keymaps/avermedia_rm_ks:0x0508 KEY_RED /lib/udev/rc_keymaps/avermedia_rm_ks:0x0509 KEY_1 /lib/udev/rc_keymaps/avermedia_rm_ks:0x050a KEY_2 /lib/udev/rc_keymaps/avermedia_rm_ks:0x050b KEY_3 /lib/udev/rc_keymaps/avermedia_rm_ks:0x050c KEY_4 /lib/udev/rc_keymaps/avermedia_rm_ks:0x050d KEY_5 /lib/udev/rc_keymaps/avermedia_rm_ks:0x050e KEY_6 /lib/udev/rc_keymaps/avermedia_rm_ks:0x050f KEY_7 /lib/udev/rc_keymaps/avermedia_rm_ks:0x0510 KEY_8 /lib/udev/rc_keymaps/avermedia_rm_ks:0x0511 KEY_9 /lib/udev/rc_keymaps/avermedia_rm_ks:0x0512 KEY_0 /lib/udev/rc_keymaps/avermedia_rm_ks:0x0513 KEY_AUDIO /lib/udev/rc_keymaps/avermedia_rm_ks:0x0515 KEY_EPG /lib/udev/rc_keymaps/avermedia_rm_ks:0x0516 KEY_PLAY /lib/udev/rc_keymaps/avermedia_rm_ks:0x0517 KEY_RECORD /lib/udev/rc_keymaps/avermedia_rm_ks:0x0518 KEY_STOP /lib/udev/rc_keymaps/avermedia_rm_ks:0x051c KEY_BACK /lib/udev/rc_keymaps/avermedia_rm_ks:0x051d KEY_FORWARD /lib/udev/rc_keymaps/avermedia_rm_ks:0x054d KEY_LEFT /lib/udev/rc_keymaps/avermedia_rm_ks:0x0556 KEY_ZOOM /lib/udev/rc_keymaps/behold_columbus:0x05 KEY_5 /lib/udev/rc_keymaps/budget_ci_old:0x05 KEY_5 /lib/udev/rc_keymaps/cinergy:0x05 KEY_5 /lib/udev/rc_keymaps/cinergy_1400:0x05 KEY_4 /lib/udev/rc_keymaps/dib0700_rc5:0x057c KEY_8 /lib/udev/rc_keymaps/dm1105_nec:0x05 KEY_RECORD /lib/udev/rc_keymaps/dntv_live_dvb_t:0x05 KEY_5 /lib/udev/rc_keymaps/dntv_live_dvbt_pro:0x05 KEY_CHANNELUP /lib/udev/rc_keymaps/em_terratec:0x05 KEY_1 /lib/udev/rc_keymaps/encore_enltv:0x05 KEY_4 /lib/udev/rc_keymaps/encore_enltv_fm53:0x05 KEY_CAMERA /lib/udev/rc_keymaps/evga_indtube:0x05 KEY_CHANNELDOWN /lib/udev/rc_keymaps/eztv:0x05 KEY_1 /lib/udev/rc_keymaps/flydvb:0x05 KEY_3 /lib/udev/rc_keymaps/flyvideo:0x05 KEY_3 /lib/udev/rc_keymaps/fusionhdtv_mce:0x05 KEY_VOLUMEDOWN /lib/udev/rc_keymaps/gadmei_rm008z:0x05 KEY_6 /lib/udev/rc_keymaps/genius_tvgo_a11mce:0x05 KEY_CAMERA /lib/udev/rc_keymaps/gotview7135:0x05 KEY_ZOOM /lib/udev/rc_keymaps/kaiomy:0x05 KEY_5 /lib/udev/rc_keymaps/kworld_pc150u:0x05 KEY_6 /lib/udev/rc_keymaps/kworld_plus_tv_analog:0x05 KEY_6 /lib/udev/rc_keymaps/manli:0x05 KEY_5 /lib/udev/rc_keymaps/medion_x10:0x05 KEY_DIRECTORY /lib/udev/rc_keymaps/medion_x10_digitainer:0x05 KEY_IMAGES /lib/udev/rc_keymaps/msi_tvanywhere:0x05 KEY_5 /lib/udev/rc_keymaps/msi_tvanywhere_plus:0x05 KEY_4 /lib/udev/rc_keymaps/nebula:0x05 KEY_5 /lib/udev/rc_keymaps/opera1:0x05fa KEY_9 /lib/udev/rc_keymaps/pctv_sedna:0x05 KEY_5 /lib/udev/rc_keymaps/pinnacle310e:0x05 KEY_CHANNELUP /lib/udev/rc_keymaps/pixelview:0x05 KEY_4 /lib/udev/rc_keymaps/powercolor_real_angel:0x05 KEY_5 /lib/udev/rc_keymaps/proteus_2309:0x05 KEY_5 /lib/udev/rc_keymaps/purpletv:0x05 KEY_2 /lib/udev/rc_keymaps/pv951:0x05 KEY_5 /lib/udev/rc_keymaps/real_audio_220_32_keys:0x05 KEY_5 /lib/udev/rc_keymaps/snapstream_firefly:0x05 KEY_IMAGES /lib/udev/rc_keymaps/su3000:0x05 KEY_5 /lib/udev/rc_keymaps/terratec_cinergy_xs:0x05 KEY_4 /lib/udev/rc_keymaps/tevii_nec:0x05 KEY_TUNER /lib/udev/rc_keymaps/twinhan_vp1027_dvbs:0x05 KEY_CHANNELUP /lib/udev/rc_keymaps/videomate_k100:0x05 KEY_VOLUMEUP /lib/udev/rc_keymaps/videomate_s350:0x05 KEY_VIDEO /lib/udev/rc_keymaps/videomate_tv_pvr:0x05 KEY_VIDEO /lib/udev/rc_keymaps/winfast:0x05 KEY_1
Die mögliche Auswahl ist damit immer noch (zu) groß. Mit Merken der für den eingesetzten Scancode genutzten Taste, ist es einfach möglich, die Auswahl einzugrenzen. Im Beispiel war das Channelup. Neue Suche mit genaueren Angaben:
$ grep -iH '0x05 KEY_CHANNELUP' /lib/udev/rc_keymaps/*
/lib/udev/rc_keymaps/dntv_live_dvbt_pro:0x05 KEY_CHANNELUP /lib/udev/rc_keymaps/pinnacle310e:0x05 KEY_CHANNELUP /lib/udev/rc_keymaps/twinhan_vp1027_dvbs:0x05 KEY_CHANNELUP
Mit nebeneinander angeordneter Vorlage und Terminal mit laufendem ir-keytable -t
kann man jetzt weitere Scancodes der Fernbedienung ausgeben und mit der jeweiligen Vorlage vergleichen. Wird keine passende gefunden, muss eine neue angelegt werden.
Niemals die Originalvorlage ändern! Reine Kommentarzeilen sind in der Keymap nicht erlaubt. Die erste Zeile, als Kommantar gekennzeichnet, muss gültige Werte enthalten. Kommentare hinter den Scancodes sind erlaubt.
Einige der vom System mitgelieferten Keymaps enthalten fehlerhafte Angaben zum Protokoll in der ersten Zeile. In der genutzen Kopie entsprechend ändern.
Aktuell geladenes Mapping ansehen:
sudo ir-keytable -r
Beispielausgabe, wenn eine Keymap aktiv ist:
scancode 0x0002 = KEY_DOWN (0x6c) scancode 0x0005 = KEY_UP (0x67) scancode 0x0009 = KEY_1 (0x02) scancode 0x000a = KEY_LEFT (0x69) scancode 0x000c = KEY_M (0x32) scancode 0x000d = KEY_4 (0x05) scancode 0x0010 = KEY_PLAY (0xcf) scancode 0x0011 = KEY_7 (0x08) scancode 0x0012 = KEY_0 (0x0b) scancode 0x0014 = KEY_ENTER (0x1c) scancode 0x0015 = KEY_8 (0x09) scancode 0x0016 = KEY_MUTE (0x71) scancode 0x0017 = KEY_9 (0x0a) scancode 0x0019 = KEY_5 (0x06) scancode 0x001b = KEY_6 (0x07) scancode 0x001c = KEY_STOP (0x80) scancode 0x001d = KEY_2 (0x03) scancode 0x001e = KEY_RIGHT (0x6a) scancode 0x001f = KEY_3 (0x04) scancode 0x0040 = KEY_BACK (0x9e) scancode 0x004c = KEY_I (0x17) scancode 0x0054 = KEY_C (0x2e) Enabled protocols: NEC
Wenn ir-keytable in der Ausgabe hinter table
eine Keymap anzeigt:
sudo cp /lib/udev/rc_keymaps/KEYMAP /etc/rc_keymaps/
Eine neue Keymap muss man anlegen, wenn keine passende Keymap im System vorhanden ist. Der Name der Keymap-Datei ist beliebig. Sie kann mit einem Editor mit Root-Rechten [3][4] im Verzeichnis /etc/rc_keymaps angelegt werden.
Die Keymap fängt immer mit einer Kommentarzeile an, die den Namen der Tabelle und das zu nutzende Protokoll enthält. Danach folgen die Zeilen mit jeweils einem Scancode und dem Event der mit diesem Scancode ausgelöst werden soll. Beispiel X4-Tech TV-Karten FB an LogiLink DVB-T:
# table meine_Keymap, type: NEC 0x05 KEY_CHANNELUP 0x02 KEY_CHANNELDOWN 0x0a KEY_VOLUMEDOWN 0x1e KEY_VOLUMEUP 0x14 KEY_ENTER 0x10 KEY_STOP
Geändert für Kodi:
# table meine_Keymap, type: NEC 0x05 KEY_UP 0x02 KEY_DOWN 0x0a KEY_LEFT 0x1e KEY_RIGHT 0x14 KEY_ENTER 0x10 KEY_PLAY
Jede Taste kann beliebig belegt werden. Statt "CHANNELUP" kann auch z.B. "KEY_I" oder "KEY_KPPLUS" eingetragen werden. Die Taste würde damit den gleichen Event wie der Druck von I oder + auf der Tastatur auslösen. Da mit der hier beschriebenen Methode die Fernbedienung Tastatureingaben emuliert, ist es notwendig, einige Codes anzupassen. Beispiel: Aus KEY_INFO wird KEY_I, aus KEY_MENU wird KEY_M. Info in Kodi per Tastatur aufrufen: i, Menü per Tastatur aufrufen: m. Eine Liste möglicher KEYs liefert:
cat /usr/include/linux/input.h | grep '#define KEY'
Die von ir-keytable unterstützten Protokolle decken fast alle Fernbedienungen ab, die derzeit auf dem Markt sind. Der im LogiLink VG0002A DVB-T Stick eingebaute IR-Receiver versteht alle Protokolle. Erfolgreich getestete Fernbedienungen an diesem Stick: Haier TV FB, Terratec FB, x4-Tech FB, Samsung TV FB, Sony DVD Player FB und einige mehr. Es ändern sich jeweils die Scancodes. Was alles unterstützt wird, hängt nur von den Fähigkeiten des Receivers ab.
Ist die Keymap zumindest mit Grundfunktionen fertig, kann getestet werden. Es bietet sich für den Test an, Kodi im Fenstermodus ( Alt Gr + ß ) neben dem Editor mit der Keymap und einem Terminal zu legen. Aktivieren der Keymap:
sudo ir-keytable -c -w /etc/rc_keymaps/meine_keymap
Jetzt sollte die Fernbedienung mit allen definierten Tasten in Kodi funktionieren. Nach Ändern einer Zuordnung oder Hinzufügen neuer KEYs im Terminal den Aktivierungsbefehl erneut aufrufen. Die Änderungen können sofort in Kodi getestet werden.
Damit das Mapping einen Neustart des Rechners überlebt, den Befehl ohne sudo in /etc/rc.local vor exit 0
eintragen:
ir-keytable -c -w /etc/rc_keymaps/meine_keymap
Das System verfügt über mehr als ein Receiver oder auf Grund anderer Eingabegeräte verändert sich der Event des Recievers. In diesen Fällen ir-keytable
mit --device
oder --sysdev
aufrufen:
sudo ir-keytable --device /dev/input/eventX -c -w /etc/rc_keymaps/meine_keymap
X
ersetzen mit der entsprechenden Event-Nummer oder
sudo ir-keytable --sysdev rcX -c -w /etc/rc_keymaps/meine_keymap
X
ersetzen mit der entsprechenden rc Nummer aus /sys/class/rc
Sogenannte "ghost repeat events" in Verbindung mit einem USB-Receiver können durch Verwendung eines anderen USB-Ports an einem anderem USB-Controller behoben werden (sprich: man probiert eine andere USB-Buchse aus).
How to get a seamless remote experience - Kodi (XBMC) Forum, Grundlage für diesen Artikel
Kodi (XBMC) Wiki - Kodi-Tastenkürzel
Kodi - Hauptartikel
Diese Revision wurde am 4. Januar 2016 19:57 von unbekannt1984 erstellt.