Kurzanleitung: Hotkeys auf Multimedia-Tastaturen benutzen - Variante 2

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

    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

    Quellcode

    1. 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

    Quellcode

    1. 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

    Quellcode

    1. 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:

    Quellcode

    1. keyboard:usb:v04B3p301B*
    2. KEYBOARD_KEY_90001=prog1
    3. KEYBOARD_KEY_90002=screenlock
    4. KEYBOARD_KEY_90003=file
    5. KEYBOARD_KEY_90004=prog2
    6. KEYBOARD_KEY_90005=prog3
    7. KEYBOARD_KEY_90006=calc
    8. KEYBOARD_KEY_90007=mail
    9. 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

    Quellcode

    1. /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

    Quellcode

    1. 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

    Quellcode

    1. 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.

    Quellcode

    1. 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.

    Dieser Beitrag wurde bereits 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:

    Quellcode

    1. evdev:input:b0003v04B3p301B*
    2. KEYBOARD_KEY_90001=prog1 # ThinkVantage
    3. KEYBOARD_KEY_90002=screenlock
    4. KEYBOARD_KEY_90003=file
    5. KEYBOARD_KEY_90004=prog2
    6. KEYBOARD_KEY_90005=prog3
    7. KEYBOARD_KEY_90006=calc
    8. KEYBOARD_KEY_90007=mail
    9. 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

www.cyberport.de