Kurzanleitung: Hotkeys auf Multimedia-Tastaturen benutzen

Hinweis: In dem Thema Kurzanleitung: Hotkeys auf Multimedia-Tastaturen benutzen gibt es 4 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo zusammen,


    ich habe seit kurzem einen "neuen" Gebraucht-PC (mit openSuSE 12.2) mit einer Art Multimedia-Tastatur. Diese verfügt neben den üblichen Tasten über einige Zusatzfunktionen (Browser: vor/zurück, lauter, leiser, nächster/vorheriger Titel usw.) sowie 8 Hotkey-Tasten. Letztgenannte 8 Hotkeys funktionierten nicht out-of-the-box. Im folgenden möchte ich kurz beschreiben, wie ich diese in Gang gebracht habe.





    Zunächst zur Hardware:

    Code
    hwinfo --keyboard

    sagt u.a.:
    [daten]Device Files: /dev/input/event3, /dev/input/by-id/usb-Lite-On_Technology_USB_Productivity_Option_Keyboard__has_the_hub_in_#_1__-event-kbd, /dev/input/by-path/pci-0000:00:1d.1-usb-0:2.1:1.0-event-kbd[/daten]


    Auf der Tastatur steht eigentlich "lenovo", aber was heißt das schon ;)


    Code
    hwinfo --mouse

    sagt u.a.:
    [daten]Device Files: /dev/input/mice, /dev/input/mouse0, /dev/input/event2, /dev/input/by-id/usb-Logitech_USB-PS_2_Optical_Mouse-event-mouse, /dev/input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-event-mouse, /dev/input/by-id/usb-Logitech_USB-PS_2_Optical_Mouse-mouse, /dev/input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-mouse[/daten]


    Hierbei handelt es sich um eine stinknormale optische Maus mit zwei Tasten und einem Rad ohne weiteren Schnickschnack.


    Die grundlegenden Funktionen von Tastatur (inkl. Multimediatasten) und Maus (inkl. Rad) wurden bei der Installation von openSuSE 12.2 korrekt erkannt bzw. eingerichtet. Im folgenden geht es also nur um besagte 8 Hotkeys:



    1) Mittels

    Code
    xev

    habe ich nachgeschaut, welche Ereignisse durch die jeweiligen Tastendrücke vom System generiert werden. Dabei fiel mir auf, dass die Multimedia-Tasten ordinäre Key-Events auslösen, die Hotkeys jedoch als (Maus-)Buttons interpretiert werden.


    2) Dummerweise lieferte der erste Hotkey das Signal "Button 1" und wurde damit als Drücken der linken Maustaste interpretiert. Andersherum gesagt wären somit die Hotkeys 1-5 nicht nutzbar, da die Buttons 1-5 bereits der Maus zugeordnet sind (2 Tasten + Rad drücken + Rad rauf/runter). Die Aufgabe besteht also zunächst einmal darin, die Button-Nummern der Tastatur-Hotkeys "umzumappen"


    3) Werfen wir nun einen Blick auf die für X verfügbaren Eingabegeräte:

    Code
    xinput

    liefert:
    [daten]⎡ Virtual core pointer id=2 [master pointer (3)]
    ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
    ⎜ ↳ Logitech USB-PS/2 Optical Mouse id=8 [slave pointer (2)]
    ⎣ Virtual core keyboard id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
    ↳ Power Button id=6 [slave keyboard (3)]
    ↳ Power Button id=7 [slave keyboard (3)]
    ↳ Lite-On Technology USB Productivity Option Keyboard( has the hub in # 1 ) id=9 [slave keyboard (3)]
    ↳ Lite-On Technology USB Productivity Option Keyboard( has the hub in # 1 ) id=10 [slave keyboard (3)][/daten]


    In meinem Fall war der letzte Eintrag (id=10, s.u.) für die Hotkeys zuständig, der vorletzte für die (bereits funktionierenden) "normalen" Tasten der Tastatur.


    4) der Befehl

    Code
    xinput

    ermöglicht es ferner u.a., Maustasten umzumappen. Für mich sorgt somit

    Code
    xinput set-button-map 10 6 7 8 9 10 11 12 13


    für das gewünschte Ergebnis. Der erste Wert (10) steht dabei für das Eingabegerät, welches die Button-Events generiert (also die id-Nummer des "Hotkey-Teils" der Tastatur, s.o.), die weiteren Zahlen geben die gewünschten Button-Nummern an, die beim Drücken der insgesamt 8 Hotkeys generiert werden sollen. Eine neuerliche Kontrolle mit

    Code
    xev

    zeigte nun bereits, dass das Ummappen der Hotkeys prinzipiell funktioniert: Ein Druck des ersten Hotkeys generiert "Button 6", des zweiten "Button 7" usw.


    5) Nun müssen nur noch den 8 neuen "Maus-Buttons" die jeweils gewünschten Funktionen zugewiesen werden. Dafür eignet sich

    Code
    xbindkeys

    , welches mit einer Konfigurationsdatei der folgenden Syntax diesen Job tut:
    [daten]
    "$Befehl"
    b:$Buttonnummer
    [/daten]


    In meinem Fall sieht das config-File ~/.xbindkeysrc so aus:
    [daten]"firefox"
    b:12


    "evolution"
    b:11


    "kcalc"
    b:10


    "soffice --calc"
    b:9


    "soffice --writer"
    b:13


    "dolphin ~"
    b:8


    "mplayer /usr/share/sounds/KDE-Sys-App-Negative.ogg & dbus-send --session --dest=org.freedesktop.ScreenSaver --type=method_call --print-reply /ScreenSaver org.freedesktop.ScreenSaver.Lock"
    b:7


    "konsole"
    b:6
    [/daten]


    Anmerkung: Hier werden einfach nur ein paar Programme gestartet - bis auf den Fall bei Button 7: Hier wird mittels dbus-Aufruf der Bildschirmschoner gestartet und die Arbeitsfläche gesperrt.



    6) Zuletzt den Befehl

    Code
    xbindkeys -f ~/.xbindkeysrc

    ausführen, damit die config auch angewendet wird. Dies muss - genauso wie auch der o.g. xinput-Aufruf - nach jeder Neuanmeldung neu durchgeführt werden. Daher bietet es sich an, das ganze zu skripten (vgl. Anhang xinput-lenovokeyboard.sh) und dieses Skript dann zum Autostart seiner Desktop-Umgebung hinzuzufügen.



    Ich hoffe, hiermit dem ein oder anderen weiterhelfen zu können - ich selbst wäre nie auf den Gedanken gekommen, dass eine Tastatur Maus-Button-Events erzeugt, und habe daher lange für diese relativ einfache Lösung gebraucht ;)



    Viele Grüße,


    benniD