Einleitung: Warum ist diese Anpassung nötig?
Viele moderne Set-Top-Boxen (STB) unterstützen Bluetooth und ermöglichen die Nutzung von Fremd-Fernbedienungen oder externen Tastaturen, wie z. B. die Rii Mini i8 oder eine normale USB-Tastatur. Das Problem ist, dass diese Geräte oft Tasten-Codes senden, die von Enigma2 (E2) nicht standardmäßig erkannt oder verwendet werden.
Früher musste man direkt in Enigma2 Anpassungen vornehmen, um bestimmte Tasten zu remappen – was mühsam war und nach jedem Update erneut angepasst werden musste. Dank eudev ist es jetzt möglich, Key Codes direkt auf Systemebene zu ändern, ohne dass Anpassungen an Enigma2 notwendig sind.
Diese Anleitung zeigt, wie man mit eudev die Key Events von Eingabegeräten anpassen kann.
1. Wie funktioniert eudev?
eudev ist ein Fork von udev und dient als dynamischer Geräte-Manager für das Linux-System. Es überwacht den Systembus und verwaltet alle Hardware-Geräte, indem es Regelwerke (udev-Rules) ausführt. Dabei kann es:
- Geräte automatisch erkennen und konfigurieren
- Bestimmte Aktionen basierend auf Hardware-Ereignissen ausführen
- Key Codes für Eingabegeräte remappen, indem es die hwdb (Hardware-Datenbank) nutzt
Durch das Erstellen einer hwdb-Datei können Tastencodes für beliebige Geräte geändert werden, bevor sie vom System an Anwendungen wie Enigma2 weitergegeben werden.
---
Anpassung von Key Events mit eudev
0. Installation von evtest
opkg update && opkg install evtest
1. Ermitteln der Event Codes mit evtest
Zuerst muss der Event Code der Fernbedienung oder Tastatur ermittelt werden. Dazu wird das Tool evtest genutzt.
1.1. Verfügbare Geräte anzeigen
Code: Alles auswählen
root@device:~# evtest
Code: Alles auswählen
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: dreambox advanced remote control
/dev/input/event1: Hisi Front Panel Button Controls
/dev/input/event2: DefineRCU
Code: Alles auswählen
event2
Nach der Auswahl des Geräts werden die unterstützten Events angezeigt:
Code: Alles auswählen
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
Event code 8 (KEY_7)
Event code 9 (KEY_8)
Event code 10 (KEY_9)
Event code 11 (KEY_0)
Event code 59 (KEY_F1)
Event code 60 (KEY_F2)
Event code 61 (KEY_F3)
Event code 62 (KEY_F4)
Event code 68 (KEY_F10)
Event code 103 (KEY_UP)
Event code 105 (KEY_LEFT)
Event code 106 (KEY_RIGHT)
Event code 107 (KEY_END)
Event code 108 (KEY_DOWN)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 116 (KEY_POWER)
Event code 119 (KEY_PAUSE)
Event code 128 (KEY_STOP)
Event code 138 (KEY_HELP)
Event code 139 (KEY_MENU)
Event code 142 (KEY_SLEEP)
Event code 158 (KEY_BACK)
Event code 164 (KEY_PLAYPAUSE)
Event code 167 (KEY_RECORD)
Event code 168 (KEY_REWIND)
Event code 174 (KEY_EXIT)
Event code 207 (KEY_PLAY)
Event code 208 (KEY_FASTFORWARD)
Event code 227 (KEY_SWITCHVIDEOMODE)
Event code 352 (KEY_OK)
Event code 357 (KEY_OPTION)
Event code 358 (KEY_INFO)
Event code 364 (KEY_FAVORITES)
Event code 365 (KEY_EPG)
Event code 370 (KEY_SUBTITLE)
Event code 373 (KEY_MODE)
Event code 377 (KEY_TV)
Event code 381 (KEY_SAT)
Event code 387 (KEY_PLAYER)
Event code 388 (KEY_TEXT)
Event code 391 (KEY_MP3)
Event code 392 (KEY_AUDIO)
Event code 393 (KEY_VIDEO)
Event code 398 (KEY_RED)
Event code 399 (KEY_GREEN)
Event code 400 (KEY_YELLOW)
Event code 401 (KEY_BLUE)
Event code 402 (KEY_CHANNELUP)
Event code 403 (KEY_CHANNELDOWN)
Event code 407 (KEY_NEXT)
Event code 412 (KEY_PREVIOUS)
Event code 627 (KEY_VOD)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 500
Repeat code 1 (REP_PERIOD)
Value 100
Das Modalias gibt an, um welches Eingabegerät es sich handelt. Es wird mit folgendem Befehl ermittelt:
Code: Alles auswählen
cat /sys/class/input/event2/device/modalias
Code: Alles auswählen
input:b0005v0508p0110e0000-e0,1,2,3,4,11,14,k71,72,73,74,...
3. Erstellen einer hwdb Konfigurationsdatei
3.1. Verzeichnis für hwdb-Dateien erstellen
Code: Alles auswählen
mkdir -p /etc/udev/hwdb.d
Erstelle eine neue Datei mit folgendem Befehl:
Code: Alles auswählen
nano /etc/udev/hwdb.d/70-keyboard.hwdb
Der erste Teil ist das Modalias-Präfix des Geräts, gefolgt von der gewünschten Anpassung.
Beispielinhalt:
Code: Alles auswählen
evdev:input:b0005v0508p0110*
KEYBOARD_KEY_c000f=2
4. Udev-Datenbank aktualisieren
Nach der Anpassung muss die udev-Datenbank aktualisiert werden:
Code: Alles auswählen
udevadm hwdb --update && udevadm control --reload && udevadm trigger
Nun kann mit evtest überprüft werden, ob die Taste korrekt umgemappt wurde. Erneut `evtest` starten, das Gerät auswählen und die Taste drücken.
Beispielausgabe:
Code: Alles auswählen
Event: time ..., type 1 (EV_KEY), code 2 (KEY_1), value 1
Info der E2 Key und ID
Code: Alles auswählen
KEYIDS = {
"KEY_RESERVED": 0,
"KEY_ESC": 1,
"KEY_1": 2,
"KEY_2": 3,
"KEY_3": 4,
"KEY_4": 5,
"KEY_5": 6,
"KEY_6": 7,
"KEY_7": 8,
"KEY_8": 9,
"KEY_9": 10,
"KEY_0": 11,
"KEY_MINUS": 12,
"KEY_EQUAL": 13,
"KEY_BACKSPACE": 14,
"KEY_TAB": 15,
"KEY_Q": 16,
"KEY_W": 17,
"KEY_E": 18,
"KEY_R": 19,
"KEY_T": 20,
"KEY_Y": 21,
"KEY_U": 22,
"KEY_I": 23,
"KEY_O": 24,
"KEY_P": 25,
"KEY_LEFTBRACE": 26,
"KEY_RIGHTBRACE": 27,
"KEY_ENTER": 28,
"KEY_LEFTCTRL": 29,
"KEY_A": 30,
"KEY_S": 31,
"KEY_D": 32,
"KEY_F": 33,
"KEY_G": 34,
"KEY_H": 35,
"KEY_J": 36,
"KEY_K": 37,
"KEY_L": 38,
"KEY_SEMICOLON": 39,
"KEY_APOSTROPHE": 40,
"KEY_GRAVE": 41,
"KEY_LEFTSHIFT": 42,
"KEY_BACKSLASH": 43,
"KEY_Z": 44,
"KEY_X": 45,
"KEY_C": 46,
"KEY_V": 47,
"KEY_B": 48,
"KEY_N": 49,
"KEY_M": 50,
"KEY_COMMA": 51,
"KEY_DOT": 52,
"KEY_SLASH": 53,
"KEY_RIGHTSHIFT": 54,
"KEY_KPASTERISK": 55,
"KEY_LEFTALT": 56,
"KEY_SPACE": 57,
"KEY_CAPSLOCK": 58,
"KEY_F1": 59,
"KEY_F2": 60,
"KEY_F3": 61,
"KEY_F4": 62,
"KEY_F5": 63,
"KEY_F6": 64,
"KEY_F7": 65,
"KEY_F8": 66,
"KEY_F9": 67,
"KEY_F10": 68,
"KEY_NUMLOCK": 69,
"KEY_SCROLLLOCK": 70,
"KEY_KP7": 71,
"KEY_KP8": 72,
"KEY_KP9": 73,
"KEY_KPMINUS": 74,
"KEY_KP4": 75,
"KEY_KP5": 76,
"KEY_KP6": 77,
"KEY_KPPLUS": 78,
"KEY_KP1": 79,
"KEY_KP2": 80,
"KEY_KP3": 81,
"KEY_KP0": 82,
"KEY_KPDOT": 83,
"KEY_103RD": 84,
"KEY_F13": 85,
"KEY_102ND": 86,
"KEY_F11": 87,
"KEY_F12": 88,
"KEY_F14": 89,
"KEY_F15": 90,
"KEY_F16": 91,
"KEY_F17": 92,
"KEY_F18": 93,
"KEY_F19": 94,
"KEY_F20": 95,
"KEY_KPENTER": 96,
"KEY_RIGHTCTRL": 97,
"KEY_KPSLASH": 98,
"KEY_SYSRQ": 99,
"KEY_RIGHTALT": 100,
"KEY_LINEFEED": 101,
"KEY_HOME": 102,
"KEY_UP": 103,
"KEY_PAGEUP": 104,
"KEY_LEFT": 105,
"KEY_RIGHT": 106,
"KEY_END": 107,
"KEY_DOWN": 108,
"KEY_PAGEDOWN": 109,
"KEY_INSERT": 110,
"KEY_DELETE": 111,
"KEY_MACRO": 112,
"KEY_MUTE": 113,
"KEY_VOLUMEDOWN": 114,
"KEY_VOLUMEUP": 115,
"KEY_POWER": 116,
"KEY_KPEQUAL": 117,
"KEY_KPPLUSMINUS": 118,
"KEY_PAUSE": 119,
"KEY_F21": 120,
"KEY_F22": 121,
"KEY_F23": 122,
"KEY_F24": 123,
"KEY_KPCOMMA": 124,
"KEY_LEFTMETA": 125,
"KEY_RIGHTMETA": 126,
"KEY_COMPOSE": 127,
"KEY_STOP": 128,
"KEY_AGAIN": 129,
"KEY_PROPS": 130,
"KEY_UNDO": 131,
"KEY_FRONT": 132,
"KEY_COPY": 133,
"KEY_OPEN": 134,
"KEY_PASTE": 135,
"KEY_FIND": 136,
"KEY_CUT": 137,
"KEY_HELP": 138,
"KEY_MENU": 139,
"KEY_CALC": 140,
"KEY_SETUP": 141,
"KEY_SLEEP": 142,
"KEY_WAKEUP": 143,
"KEY_FILE": 144,
"KEY_SENDFILE": 145,
"KEY_DELETEFILE": 146,
"KEY_XFER": 147,
"KEY_PROG1": 148,
"KEY_PROG2": 149,
"KEY_WWW": 150,
"KEY_MSDOS": 151,
"KEY_COFFEE": 152,
"KEY_DIRECTION": 153,
"KEY_CYCLEWINDOWS": 154,
"KEY_MAIL": 155,
"KEY_BOOKMARKS": 156,
"KEY_COMPUTER": 157,
"KEY_BACK": 158,
"KEY_FORWARD": 159,
"KEY_CLOSECD": 160,
"KEY_EJECTCD": 161,
"KEY_EJECTCLOSECD": 162,
"KEY_NEXTSONG": 163,
"KEY_PLAYPAUSE": 164,
"KEY_PREVIOUSSONG": 165,
"KEY_STOPCD": 166,
"KEY_RECORD": 167,
"KEY_REWIND": 168,
"KEY_PHONE": 169,
"KEY_ISO": 170,
"KEY_CONFIG": 171,
"KEY_HOMEPAGE": 172,
"KEY_REFRESH": 173,
"KEY_EXIT": 174,
"KEY_MOVE": 175,
"KEY_EDIT": 176,
"KEY_SCROLLUP": 177,
"KEY_SCROLLDOWN": 178,
"KEY_KPLEFTPAREN": 179,
"KEY_KPRIGHTPAREN": 180,
"KEY_INTL1": 181,
"KEY_INTL2": 182,
"KEY_INTL3": 183,
"KEY_INTL4": 184,
"KEY_INTL5": 185,
"KEY_INTL6": 186,
"KEY_INTL7": 187,
"KEY_INTL8": 188,
"KEY_INTL9": 189,
"KEY_LANG1": 190,
"KEY_LANG2": 191,
"KEY_LANG3": 192,
"KEY_LANG4": 193,
"KEY_LANG5": 194,
"KEY_LANG6": 195,
"KEY_LANG7": 196,
"KEY_LANG8": 197,
"KEY_LANG9": 198,
"KEY_PLAYCD": 200,
"KEY_PAUSECD": 201,
"KEY_PROG3": 202,
"KEY_PROG4": 203,
"KEY_SUSPEND": 205,
"KEY_CLOSE": 206,
"KEY_PLAY": 207,
"KEY_FASTFORWARD": 208,
"KEY_BASSBOOST": 209,
"KEY_PRINT": 210,
"KEY_HP": 211,
"KEY_CAMERA": 212,
"KEY_SOUND": 213,
"KEY_QUESTION": 214,
"KEY_EMAIL": 215,
"KEY_CHAT": 216,
"KEY_SEARCH": 217,
"KEY_CONNECT": 218,
"KEY_FINANCE": 219,
"KEY_SPORT": 220,
"KEY_SHOP": 221,
"KEY_ALTERASE": 222,
"KEY_CANCEL": 223,
"KEY_BRIGHTNESSDOWN": 224,
"KEY_BRIGHTNESSUP": 225,
"KEY_MEDIA": 226,
"KEY_VMODE": 227, # Deprecated, retained for backwards compatibility.
"KEY_SWITCHVIDEOMODE": 227,
"KEY_LAN": 238,
"KEY_UNKNOWN": 240,
"BTN_0": 256,
"BTN_1": 257,
"BtnA": 304,
"BtnB": 305,
"BtnC": 306,
"BtnX": 307,
"BtnY": 308,
"BtnZ": 309,
"BtnTL": 310,
"BtnTR": 311,
"BtnTL2": 312,
"BtnTR2": 313,
"BtnSelect": 314,
"BtnStart": 315,
"KEY_SHIFT": 351, # This is not a transmitted key but rather a place holder for remote controls that have a SHIFT function.
"KEY_OK": 352,
"KEY_SELECT": 353,
"KEY_GOTO": 354,
"KEY_CLEAR": 355,
"KEY_POWER2": 356,
"KEY_OPTION": 357,
"KEY_INFO": 358,
"KEY_TIME": 359,
"KEY_VENDOR": 360,
"KEY_ARCHIVE": 361,
"KEY_PROGRAM": 362,
"KEY_CHANNEL": 363,
"KEY_FAVORITES": 364,
"KEY_EPG": 365,
"KEY_PVR": 366,
"KEY_MHP": 367,
"KEY_LANGUAGE": 368,
"KEY_TITLE": 369,
"KEY_SUBTITLE": 370,
"KEY_ANGLE": 371,
"KEY_ZOOM": 372,
"KEY_MODE": 373,
"KEY_KEYBOARD": 374,
"KEY_SCREEN": 375,
"KEY_PC": 376,
"KEY_TV": 377,
"KEY_TV2": 378,
"KEY_VCR": 379,
"KEY_VCR2": 380,
"KEY_SAT": 381,
"KEY_SAT2": 382,
"KEY_CD": 383,
"KEY_TAPE": 384,
"KEY_RADIO": 385,
"KEY_TUNER": 386,
"KEY_PLAYER": 387,
"KEY_TEXT": 388,
"KEY_DVD": 389,
"KEY_AUX": 390,
"KEY_MP3": 391,
"KEY_AUDIO": 392,
"KEY_VIDEO": 393,
"KEY_DIRECTORY": 394,
"KEY_LIST": 395,
"KEY_MEMO": 396,
"KEY_CALENDAR": 397,
"KEY_RED": 398,
"KEY_GREEN": 399,
"KEY_YELLOW": 400,
"KEY_BLUE": 401,
"KEY_CHANNELUP": 402,
"KEY_CHANNELDOWN": 403,
"KEY_FIRST": 404,
"KEY_LAST": 405,
"KEY_AB": 406,
"KEY_NEXT": 407,
"KEY_RESTART": 408,
"KEY_SLOW": 409,
"KEY_SHUFFLE": 410,
"KEY_BREAK": 411,
"KEY_PREVIOUS": 412,
"KEY_DIGITS": 413,
"KEY_TEEN": 414,
"KEY_TWEN": 415,
"KEY_CONTEXT_MENU": 438,
"KEY_DEL_EOL": 448,
"KEY_DEL_EOS": 449,
"KEY_INS_LINE": 450,
"KEY_DEL_LINE": 451,
"KEY_ASCII": 510,
"KEY_MAX": 511,
"KEY_TOUCHPAD_TOGGLE": 530,
"KEY_MOUSE": 530,
"KEY_VOD": 627
}