Kurzanleitung: Hotkeys auf Multimedia-Tastaturen benutzen - Variante 2

Hinweis: In dem Thema Kurzanleitung: Hotkeys auf Multimedia-Tastaturen benutzen - Variante 2 gibt es 1 Antwort.
  • Hallo in die Runde,


    nachdem ich nun einige Jahre mit dem unter Kurzanleitung: Hotkeys auf Multimedia-Tastaturen benutzen beschriebenen Vorgehen die Programmstart-Tasten meines [daten]"USB Productivity Option Keyboard( has the hub in # 1 )"[/daten] genutzt habe, ist dieses Vorgehen anscheinend seit einem jüngst eingespielten Update auf systemd-210-40.1 und das gleich versionierte udev nicht mehr möglich. Somit musste eine neue Lösung her ;)


    Meine Aussagen beziehen sich auf die openSuSE 13.1 mit allen aktuellen Patches.


    Die 8 Sondertasten generieren nun keine Mausbutton-, sondern normale Tastatur-Keyevents. Zwei dieser Events sind standardmäßig jedoch Keycodes > 255 zugeordnet, welche somit nicht an den X-Server weitergeleitet werden. Die Aufgabe besteht nun also "nur noch" darin, die betreffenden Keycodes umzumappen. Hierzu kann man folgendes tun:


    1) Identifikation der Tastatur hinsichtlich PID und VID, z.B. mittels

    Code
    hwinfo --keyboard


    liefert u.a.:
    [daten]
    Vendor: usb 0x04b3 "IBM Corp."
    Device: usb 0x301b "USB Productivity Option Keyboard( has the hub in # 1 )"
    Device File: /dev/input/event4
    [/daten]


    2) Identifikation der (problematischen) Tastendrücke mittels

    Code
    evtest /dev/input/event5

    (warum ich hier event5 statt event4 wie oben ausgegeben nehmen muss weiß der Kuckuck)


    [daten]Event: time 1454848917.625413, type 4 (Misc), code 4 (ScanCode), value 90004
    Event: time 1454848917.625413, type 1 (Key), code 421 (?), value 1
    Event: time 1454848917.625413, -------------- Report Sync ------------
    Event: time 1454848917.753419, type 4 (Misc), code 4 (ScanCode), value 90004
    Event: time 1454848917.753419, type 1 (Key), code 421 (?), value 0
    Event: time 1454848917.753419, -------------- Report Sync ------------
    Event: time 1454848920.953422, type 4 (Misc), code 4 (ScanCode), value 90005
    Event: time 1454848920.953422, type 1 (Key), code 423 (?), value 1
    Event: time 1454848920.953422, -------------- Report Sync ------------
    Event: time 1454848921.209424, type 4 (Misc), code 4 (ScanCode), value 90005
    Event: time 1454848921.209424, type 1 (Key), code 423 (?), value 0
    [/daten]
    Meine beiden Problemtasten generieren also die Scancodes 90004 und 90005; udev macht daraus die Keycodes 421 und 423, mit welchen der X-Server nichts anfangen kann - dieser kennt nur die aus

    Code
    xmodmap -pke

    ersichtlichen Werte bis maximal 255.
    Aus dieser Liste sucht man sich nun nicht benötigte Werte heraus, z.B. "XF86Launch2" und "XF86Launch3".


    3) Anpassung von udev's Hardwaredatenbank
    Hierzu legt man eine Datei unter /etc/udev/hwdb.d an, z.B. /etc/udev/hwdb.d/90-mykeyboard.hwdb. Die Ablage der Datei unter /etc/udev/hwdb.d bewirkt, dass ggfs. abweichende Standardvorgaben aus /usr/lib/udev/hwdb.d übergangen werden. Meine *.hwdb-Datei sieht so aus:


    Code
    keyboard:usb:v04B3p301B*
     KEYBOARD_KEY_90001=prog1 
     KEYBOARD_KEY_90002=screenlock
     KEYBOARD_KEY_90003=file
     KEYBOARD_KEY_90004=prog2
     KEYBOARD_KEY_90005=prog3
     KEYBOARD_KEY_90006=calc
     KEYBOARD_KEY_90007=mail
     KEYBOARD_KEY_90008=www


    Somit ordnet man dem Scancode 90004 die Taste prog2 und 90005 die Taste prog3 - genauer: den jeweiligen keycode - zu. Wichtig ist, hierbei die Codebezeichnungen aus

    Code
    /usr/include/linux/input.h

    zu verwenden.
    In der ersten Zeile stehen außerdem die Werte aus Schritt 1), d.h. die Änderungen beziehen sich NUR auf genau dieses Tastaturmodell.



    4) Aktivierung der Änderungen
    Dies erfolgt über

    Code
    udevadm hwdb --update && udevadm trigger


    Hierdurch baut udev seine Hardwaredatenbank gemäß der zuvor vorgenommenen Einstellungen neu auf und bindet anschließend die betreffenden Geräte neu ein, sodass die neuen Einstellungen sofort wirksam sind. Ein Startscript o.Ä. ist NICHT mehr notwendig :)


    Mittels

    Code
    udevadm info /dev/input/event5 |grep KEY

    kann man sodann die Übernahme der Änderungen verifizieren:


    [daten]E: ID_INPUT_KEY=1
    E: KEYBOARD_KEY_90001=prog1
    E: KEYBOARD_KEY_90002=screenlock
    E: KEYBOARD_KEY_90003=file
    E: KEYBOARD_KEY_90004=prog2
    E: KEYBOARD_KEY_90005=prog3
    E: KEYBOARD_KEY_90006=calc
    E: KEYBOARD_KEY_90007=mail
    E: KEYBOARD_KEY_90008=www[/daten]


    5) Test unter X
    Als nächstes ist es sinnvoll, auch die Weitergabe an den X-Server noch kurz zu testen.

    Code
    xev

    liefert nun bei Druck der entsprechenden Tasten:


    [daten]
    KeyRelease event, serial 41, synthetic NO, window 0x4c00001,
    root 0x7e, subw 0x0, time 4319170, (-715,702), root:(727,725),
    state 0x10, keycode 157 (keysym 0x1008ff42, XF86Launch2), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False


    KeyRelease event, serial 41, synthetic NO, window 0x4c00001,
    root 0x7e, subw 0x0, time 4322882, (-564,83), root:(878,106),
    state 0x10, keycode 210 (keysym 0x1008ff43, XF86Launch3), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
    [/daten]


    6) Finale Einrichtung
    Nachdem das Mapping erfolgt ist und alle Tastendrücke korrekt erkannt werden, stehen die Tasten nun in beliebigen Anwendungen zur Verfügung. Die Einrichtung von Programmstarts, D-Bus-Aufrufen etc. kann nun z.B. über K->Systemeinstellungen->Kurzbefehle und Gestensteuerung erfolgen.

    2 Mal editiert, zuletzt von benniD ()

    Für den Inhalt des Beitrages 91312 haftet ausdrücklich der jeweilige Autor: benniD

  • Hallo,


    ein kurzes Update: Mit der Umstellung auf evdev muss das hwdb-file wie folgt angepasst werden:


    Code
    evdev:input:b0003v04B3p301B*
     KEYBOARD_KEY_90001=prog1 # ThinkVantage
     KEYBOARD_KEY_90002=screenlock
     KEYBOARD_KEY_90003=file
     KEYBOARD_KEY_90004=prog2
     KEYBOARD_KEY_90005=prog3
     KEYBOARD_KEY_90006=calc
     KEYBOARD_KEY_90007=mail
     KEYBOARD_KEY_90008=www


    Die hexadezimalen Buchstaben in der USB-PID bzw. VID müssen unbedingt GROSS GESCHRIEBEN werden, damit das file funktioniert.

    Für den Inhalt des Beitrages 107672 haftet ausdrücklich der jeweilige Autor: benniD