[[Vorlage(Getestet, bionic, )]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] [[Bild(./kodi.png, x64, align=left)]] 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. = Voraussetzungen = Zuerst muss festgestellt werden, ob der eigene Receiver geeignet ist. {{{#!vorlage Hinweis 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 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 [:Lirc:irw]. Stattdessen ist das Programm ir-keytable zuständig [1]: {{{#!vorlage Paketinstallation ir-keytable, universe }}} Falls Lirc läuft, muss dieses gestoppt werden [2]: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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`): {{{#!vorlage Befehl sudo modprobe -v MODUL }}} Testen des Receivers: {{{#!vorlage Befehl 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. = Vorbereitung = Diese Schritte entfallen, wenn lirc/inputlirc/eventlirc nicht installiert sind. * Lirc und Inputlirc deinstallieren: {{{#!vorlage Befehl sudo apt-get purge lirc inputlirc }}} * Lirc-Blacklist entfernen, falls vorhanden: {{{#!vorlage Befehl sudo rm /etc/modprobe.d/lirc-blklist.conf }}} = Fernbedienung testen = {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> 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 }}} {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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`. {{{#!vorlage Befehl $ 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: {{{#!vorlage Befehl $ 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. =Keymap= {{{#!vorlage Hinweis 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 [[Vorlage(Tasten,i)]] oder [[Vorlage(Tasten,plus)]] 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 für 14.04: {{{#!vorlage Befehl cat /usr/include/linux/input.h | grep '#define KEY' }}} Für 16.04: {{{#!vorlage Befehl cat /usr/include/linux/input-event-codes.h | grep '#define KEY' }}} {{{#!vorlage Hinweis 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 ([[Vorlage(Tasten,altgr)]] + [[Vorlage(Tasten,ß)]]) neben dem Editor mit der Keymap und einem Terminal zu legen. Aktivieren der Keymap: {{{#!vorlage Befehl 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 [:Archiv/rc.local:/etc/rc.local] vor `exit 0` eintragen: {{{#!vorlage Befehl ir-keytable -c -w /etc/rc_keymaps/meine_keymap }}} =Problembehebung= 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: * {{{#!vorlage Befehl sudo ir-keytable --device /dev/input/eventX -c -w /etc/rc_keymaps/meine_keymap }}} `X` ersetzen mit der entsprechenden Event-Nummer oder * {{{#!vorlage Befehl 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). = Links = * [https://forum.kodi.tv/showthread.php?tid=104541 How to get a seamless remote experience] {en} - Kodi (XBMC) Forum, Grundlage für diesen Artikel * [https://kodi.wiki/view/Keyboard_controls Kodi (XBMC) Wiki] {en} - Kodi-Tastenkürzel * [:Kodi:] - Hauptartikel #tag: Hardware, Multimedia, Kodi, XBMC, Remote