[[Vorlage(Getestet, focal, )]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] {{{#!vorlage Hinweis Unter Ubuntu 20.04 ist die Nutzung aller Protokolle, die im System enthalten sind, nicht möglich. Daher funktioniert diese Anleitung unter 20.04 nur in Verbindung mit dem Protokoll "other" das in der Regel von Funkfernbedienungen genutzt wird. }}} In diesem Artikel geht es um die Einrichtung von Fernbedienungen mit Hilfe von ir-keytable ohne die Installation von [:Lirc:] und inputlirc. Neben den Grundfunktionen einer Fernbedienung wie Lautstärke und Pfeiltasten, die ohne Anpassung immer systemweit funktionieren, wird in dieser Anleitung erläutert wie mit Hilfe von ir-keytable und einer Konfigurationsdatei Tasten der Fernbedienung in Tastaurbefehle umgesetzt werden. Es reicht die Modifikation oder Erstellung einer Konfigurationsdatei. = Voraussetzungen = Damit alle Tasten der Fernbedienung funktionieren muss der [:Benutzer und Gruppen:Benutzer der Gruppe] `input` angehören: {{{#!vorlage Befehl sudo usermod -aG input BENUTZERNAME }}} Vor der weiteren Einrichtung das System neu starten damit die neue Gruppen Zugehörigkeit aktiv wird. 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 }}} Wer ir-keytable nur testen möchte ohne eine eventuell. vorhandene Lirc Einrichtung zu ändern, muss zum Testen lirc stoppen [2]: {{{#!vorlage Befehl sudo systemctl stop eventlircd sudo systemctl stop lircd }}} Wer ir-keytable dauerhaft nutzen möchte, deinstalliert lirc: {{{#!vorlage Befehl sudo apt purge lirc inputlirc }}} 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 diese Datei existiert und Module enthält, diese Module temporär laden wenn nur getestet werden soll: {{{#!vorlage Befehl sudo modprobe -v MODUL }}} Bei dauerhafter Nutzung wird die Blacklist entfernt: {{{#!vorlage Befehl sudo rm /etc/modprobe.d/lirc-blklist.conf }}} Testen des Receivers: {{{#!vorlage Befehl ir-keytable }}} Ausgabebeispiel: X10 Medion OR24E Receivers (gilt auch für baugleiche wie die RF MCE Remote (OR22V)): {{{#!vorlage Befehl ir-keytable }}} {{{ /sys/class/rc/rc0/ gefunden mit: Name: X10 WTI RF receiver Treiber: ati_remote Standardschlüsselcodeabbildung: rc-medion-x10-or2x Eingabegerät: /dev/input/event11 LIRC Gerät: /dev/lirc0 Angehangene BPF-Protokolle: Keine Berechtigung Unterstützte Kernel-Protokolle: other Kernelprotokolle aktivieren: other bus: 3, Anbieter/Produkt: 0bc7:0006, Version: 0x0100 Wiederholungsverzögerung = 500 ms, Wiederholungsperiode = 125 ms }}} Der Receiver wird erkannt. Die Bezeichnung hinter `Standardschlüsselcodeabbildung` gibt an, ob eine Keymap in '''/lib/udev/rc_keymaps/''' vorhanden ist. Ist die Ausgabe `rc-empty`, ist keine Keymap vorhanden, eine neue Keymap muss erstellt werden. = Fernbedienung testen = {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" 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ügbare Protokolle des Kernels: nec, rc-5, rc-6, jvc, sony, sanyo, rc-5-sz, sharp, mce-kbd, xmp, imon, rc-mm, other, all. Wird die FB durch keins der Protokolle unterstützt, werden danach BPF Protokolle aus dem System geladen: grundig, imon_rsc, manchester, pulse_distance, pulse_length, raw, xbox-dvd +++ `-t, --test` Testen der Eingabe-Events +++ `-r, --read` Liest die aktive Keymap ein und gibt sie aus }}} Start des Ausgabe Test. Als Protokoll die Angabe hinter ''Unterstützte Kernel-Protokolle:'' angeben. Im Fall der X10: other {{{#!vorlage Befehl sudo ir-keytable -c -p other -t }}} {{{#!vorlage Hinweis Startet man den Test mit `-p` all, testet ir-keytable alle vorhandenen Protokolle und listet alle Protokolle die eventuell im System nicht vorhanden sind. }}} Ausgabebeispiel X10: RF MCE Remote Controll X10: {{{ Ereignisse werden getestet. Bitte drücken Sie STRG-C, um abzubrechen. 20495.413718: Lirc Protokoll(other): scancode = 0x25 umschalten=1 20495.413750: Ereignistyp EV_MSC(0x04): Scancode = 0x25 20495.413750: Ereignistyp EV_SYN(0x00). 20496.141707: Lirc Protokoll(other): scancode = 0x24 umschalten=1 20496.141736: Ereignistyp EV_MSC(0x04): Scancode = 0x24 20496.141736: Ereignistyp EV_SYN(0x00). 20496.877700: Lirc Protokoll(other): scancode = 0x26 umschalten=1 20496.877725: Ereignistyp EV_MSC(0x04): Scancode = 0x26 20496.877725: Ereignistyp EV_SYN(0x00). 20503.989638: Lirc Protokoll(other): scancode = 0xf umschalten=1 20503.989675: Ereignistyp EV_MSC(0x04): Scancode = 0x0f 20503.989675: Ereignistyp EV_SYN(0x00). }}} Wenn die Ausgabe aus ir-keytable hinter ''Standardschlüsselcodeabbildung:'' keine Keymap angegeben hat, kann man in den vorhandenen Keymaps eine möglichst passende suchen und anpassen. {{{#!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/*.toml }}} Für `SCANCODE` die Ausgabe einer Taste aus `ir-keytable -t` einsetzen. Aus dem Beispiel der X10 z.B.: `0x25`. {{{#!vorlage Befehl grep -iH '0x25 =' /lib/udev/rc_keymaps/*.toml }}} {{{ /lib/udev/rc_keymaps/ati_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/budget_ci_old.toml:0x25 = "KEY_OK" /lib/udev/rc_keymaps/cec.toml:0x25 = "KEY_NUMERIC_5" /lib/udev/rc_keymaps/medion_x10_digitainer.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10_or2x.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/norwood.toml:0x25 = "KEY_NUMERIC_5" /lib/udev/rc_keymaps/pinnacle_grey.toml:0x25 = "KEY_INFO" /lib/udev/rc_keymaps/powercolor_real_angel.toml:0x25 = "KEY_POWER" /lib/udev/rc_keymaps/snapstream_firefly.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/su3000.toml:0x25 = "KEY_POWER" /lib/udev/rc_keymaps/terratec_cinergy_c_pci.toml:0x25 = "KEY_BLUE" /lib/udev/rc_keymaps/terratec_cinergy_s2_hd.toml:0x25 = "KEY_BLUE" /lib/udev/rc_keymaps/twinhan_dtv_cab_ci.toml:0x25 = "KEY_STOP" /lib/udev/rc_keymaps/videomate_k100.toml:0x25 = "KEY_NUMERIC_8" /lib/udev/rc_keymaps/videomate_s350.toml:0x25 = "KEY_LAST" /lib/udev/rc_keymaps/winfast.toml:0x25 = "KEY_TIME" }}} Falls die Auswahl zu unübersichtlich ist, lässt sich die Suche weiter eingrenzen. Im Beispiel der X10 wurde für den Scancode 0x25 die Taste PLAY gedrückt. Neue Suche mit genaueren Angaben: {{{#!vorlage Befehl grep -iH '0x25 = "KEY_PLAY"' /lib/udev/rc_keymaps/*.toml }}} {{{ /lib/udev/rc_keymaps/ati_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10_digitainer.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10_or2x.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/medion_x10.toml:0x25 = "KEY_PLAY" /lib/udev/rc_keymaps/snapstream_firefly.toml:0x25 = "KEY_PLAY" }}} 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. Die Keymap, die den geforderten Scancodes am nächsten kommt wird für die weitere Anpassung genommen. =Keymap= {{{#!vorlage Hinweis Niemals die Originalvorlage ändern! Reine Kommentarzeilen sind in der Keymap nicht erlaubt. Kommentare hinter den Scancodes sind erlaubt. }}} Aktuell geladenes Mapping ansehen: {{{#!vorlage Befehl sudo ir-keytable -r }}} Beispielausgabe, wenn eine Keymap aktiv ist: {{{#!vorlage Befehl ir-keytable -r }}} {{{ Scancode 0x0000 = KEY_MUTE (0x71) Scancode 0x0002 = KEY_POWER (0x74) Scancode 0x0004 = KEY_DVD (0x185) Scancode 0x0008 = KEY_VOLUMEDOWN (0x72) Scancode 0x0009 = KEY_VOLUMEUP (0x73) Scancode 0x000b = KEY_CHANNELUP (0x192) Scancode 0x000c = KEY_CHANNELDOWN (0x193) Scancode 0x000d = KEY_1 (0x02) Scancode 0x000e = KEY_2 (0x03) Scancode 0x000f = KEY_3 (0x04) Scancode 0x0010 = KEY_4 (0x05) Scancode 0x0011 = KEY_5 (0x06) Scancode 0x0012 = KEY_6 (0x07) Scancode 0x0013 = KEY_7 (0x08) Scancode 0x0014 = KEY_8 (0x09) Scancode 0x0015 = KEY_9 (0x0a) Scancode 0x0016 = KEY_TEXT (0x184) Scancode 0x0017 = KEY_0 (0x0b) Scancode 0x0018 = KEY_PVR (0x16e) Scancode 0x001a = KEY_UP (0x67) Scancode 0x001b = KEY_MEDIA (0xe2) Scancode 0x001c = KEY_TV (0x179) Scancode 0x001d = KEY_LEFT (0x69) Scancode 0x001e = KEY_ENTER (0x1c) Scancode 0x001f = KEY_RIGHT (0x6a) Scancode 0x0020 = KEY_BACK (0x9e) Scancode 0x0021 = KEY_P (0x19) Scancode 0x0022 = KEY_DOWN (0x6c) Scancode 0x0023 = KEY_N (0x31) Scancode 0x0024 = KEY_REWIND (0xa8) Scancode 0x0025 = KEY_SPACE (0x39) Scancode 0x0026 = KEY_FORWARD (0x9f) Scancode 0x0027 = KEY_RECORD (0xa7) Scancode 0x0028 = KEY_S (0x1f) Scancode 0x0029 = KEY_SPACE (0x39) Scancode 0x002f = KEY_INFO (0x166) Scancode 0x0030 = KEY_CLEAR (0x163) Scancode 0x0031 = KEY_EPG (0x16d) Scancode 0x0032 = KEY_RED (0x18e) Scancode 0x0033 = KEY_GREEN (0x18f) Scancode 0x0034 = KEY_YELLOW (0x190) Scancode 0x0035 = KEY_BLUE (0x191) Scancode 0x0036 = KEY_ENTER (0x1c) Scancode 0x0037 = KEY_NUMERIC_STAR (0x20a) Scancode 0x0038 = KEY_NUMERIC_POUND (0x20b) Kernelprotokolle aktivieren: other }}} Wenn ir-keytable in der Ausgabe hinter `Standardschlüsselcodeabbildung` eine Keymap anzeigt: {{{#!vorlage Befehl sudo cp /lib/udev/rc_keymaps/KEYMAP /etc/rc_keymaps/ }}} Wenn keine passende Keymap gefunden wurde, wird eine beliebige Keymap kopiert die dann angepasst werden muss. Aufbau einer Keymap: {{{ [[protocols]] name = "medion_x10_or2x" protocol = "other" [protocols.scancodes] 0x02 = "KEY_POWER" 0x16 = "KEY_TEXT" 0x09 = "KEY_VOLUMEUP" 0x08 = "KEY_VOLUMEDOWN" 0x00 = "KEY_MUTE" 0x0b = "KEY_CHANNELUP" 0x0c = "KEY_CHANNELDOWN" 0x32 = "KEY_RED" 0x33 = "KEY_GREEN" 0x34 = "KEY_YELLOW" 0x35 = "KEY_BLUE" 0x18 = "KEY_PVR" 0x04 = "KEY_DVD" 0x31 = "KEY_EPG" 0x1c = "KEY_TV" 0x20 = "KEY_BACK" 0x2f = "KEY_INFO" 0x1a = "KEY_UP" 0x22 = "KEY_DOWN" 0x1d = "KEY_LEFT" 0x1f = "KEY_RIGHT" 0x1e = "KEY_OK" 0x1b = "KEY_MEDIA" 0x21 = "KEY_PREVIOUS" 0x23 = "KEY_NEXT" 0x24 = "KEY_REWIND" 0x26 = "KEY_FORWARD" 0x25 = "KEY_PLAY" 0x28 = "KEY_STOP" 0x29 = "KEY_PAUSE" 0x27 = "KEY_RECORD" }}} 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 für VLC: Aus KEY_PREVIOUS wird KEY_P (Playlist vorheriger), aus KEY_NEXT wird KEY_N (Playlist nächster). KBeispiel Kodi: Aus KEY_INFO wird KEY_I (Information). aus KEY_MENU wird KEY_M (Menü) u.s.w. Jedes Programm das per Tastatur bedienbar ist, lässt sich so per Fernbedienung steuern. Eine Liste möglicher KEYs liefert für 20.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. Erfolgreich getestete Fernbedienungen an einem alten DVB-T 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 das zu steuernde Programm, die Keymap in einem Editor mit root Rechten und ein Terminal nebeneinander zu öffnen. Aktivieren der Keymap: {{{#!vorlage Befehl sudo ir-keytable -c -w /etc/rc_keymaps/meine_keymap }}} Jetzt sollte die Fernbedienung mit allen definierten Tasten funktionieren. Nach Ändern einer Zuordnung oder Hinzufügen neuer KEYs im Terminal den Aktivierungsbefehl erneut aufrufen. Die Änderungen können sofort getestet werden. Die zuletzt per ir-keytable ausgewählte Keymap wird automatisch beim nächsten Neustart aktiviert. = Links = * [http://manpages.ubuntu.com/manpages/focal/man1/ir-keytable.1.html Manpage ir-keytable] #tag: Hardware, Multimedia, Kodi, VLC, Player, Remote