LINUXMAKER, OpenSource, Tutorials

Multimediatasten und Sondertasten

Moderne Tastaturen und vor allem Laptop-Tastaturen verfügen über zusätzliche Tasten, die unter Windows mit Funktionen zu Multimediasteuerung belegt sind.
Um das unter Linux hinzubekommen, ist ein bisschen Handarbeit notwendig.

Keycode scannen

Zunächst muss der Keycode unbelegter Tasten ermittelt werden. Das kann man mit xev durchführen. Dazu startet man xev in einem Terminalfenster. In das sich öffenende Fenster setzt man den Mauscurser und drückt jetzt die zu analysierenden Tasten. Wenn die Taste nicht tot ist, dann sie man im Terminalfenster folgende Meldungen

KeyPress event, serial 31, synthetic NO, window 0x2200001,
    root 0x85, subw 0x2200002, time 3254282586, (53,28), root:(1151,600),
    state 0x0, keycode 231 (keysym 0x20ac, EuroSign), same_screen YES,
    XLookupString gives 3 bytes: (e2 82 ac) "€"
    XmbLookupString gives 3 bytes: (e2 82 ac) "€"
    XFilterEvent returns: False

KeyRelease event, serial 31, synthetic NO, window 0x2200001,
    root 0x85, subw 0x2200002, time 3254282709, (53,28), root:(1151,600),
    state 0x0, keycode 231 (keysym 0x20ac, EuroSign), same_screen YES,
    XLookupString gives 3 bytes: (e2 82 ac) "€"
    XFilterEvent returns: False

KeyPress event, serial 31, synthetic NO, window 0x2200001,
    root 0x85, subw 0x2200002, time 3254286925, (53,28), root:(1151,600),
    state 0x0, keycode 151 (keysym 0x1008ff5b, XF86Documents), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

Wie man sieht, gibt es bei den zwei Tasten mit den Keycodes 231 und 151 unterschiedliche Zuordnungen. Bei der ersten Taste ist das €-Zeichen mit EuroSign definiert und die zweite Taste ist mit der Funktion XF86Documents belegt.

Diese Funktionen für Xorg findet man in den beiden Dateien

/usr/share/X11/XKeysymDB
/usr/include/X11/keysymdef.h

Wenn jetzt aber die Taste nicht unter xev reagiert, also keinen Output generiert, dann hilft uns der Kernel mit seinen Informationen weiter. Dazu gibt man im Terminalfenster folgenden Befehl ein

multitail /var/log/messages
oder
less /var/log/messages

Bei dem Betätigen der toten Tasten wird man folgende Kernelmeldungen sehen, die alle "atkbd.c" enthalten.

kernel: atkbd.c: Unknown key pressed (translated set 2, code 0xd5 on isa0060/serio0).
kernel: atkbd.c: Use 'setkeycodes e055 <keycode>' to  it known.
kernel: atkbd.c: Unknown key released (translated set 2, code 0xd5 on isa0060/serio0).
kernel: atkbd.c: Use 'setkeycodes e055 <keycode>' to  it known.

Hier sieht man auch bereits wie die jeweilige Taste aktiviert werden kann, nämlich mit

setkeycodes e055 <keycode>

Setzen der Keycodes beim Booten

Damit die Keycodes automatisch mit dem Bootvorgang bekanntgemacht werden können, verwendet man hierfür bei Debian die Datei /etc/rc.local und trägt hier den setkeycodes-Befehl mit den passenden Keycodes ein.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

setkeycodes    e033    231      # '€' character
setkeycodes    e034    253      # '@' character instead of '$'
setkeycodes    e055    $KEY_    # Orange        Wireless On (hardware, led, informational only)
setkeycodes    e056    $KEY_    # Orange        Wireless Off (hardware, led, informational only)

exit 0

Download der Datei

xmodmap und der Keycode

Die einfachste Methode, herauszufinden welche Keycodes noch frei sind, erreicht man mit

xmodmap -pke

Der Befehl liefert alle belegten und unbelegten Keycodes, von denen man Letztere für setkeycodes verwenden kann. Nur muss man die Keycodes auch mit Zeichen oder Funktionen belegen. Dazu generiert man sich ein Abbild der momentanen Tastaturbelegung, indem den obigen Befehl in die Datei ~/.Xmodmap im HOME-Verzeichnis umleitet

xmodmap -pke > .Xmodmap

Diese Datei kann jetzt mit dem Lieblings-Editor ergänzt werden, z.B.

keycode 223 = XF86Sleep
keycode 224 =
keycode 225 =
keycode 226 =
keycode 227 =
keycode 228 =
keycode 229 =
keycode 230 =
keycode 231 = EuroSign
keycode 232 =
keycode 233 =
keycode 234 =
keycode 235 =
keycode 236 = XF86Mail
keycode 237 =

Anschliessend lädt man die neue Xmodmap mit

xmodmap .Xmodmap

Laden beim Start des KDE

Soll die Datei mit dem Starten des KDE geladen werden, so hilft ein kleines Script in ~/.kde/Autostart/

xmodmap.sh:

#! /bin/sh

/usr/bin/xmodmap $HOME/.Xmodmap
 

Ausführbar gemacht, wird das Script bei der KDE-Anmeldung die Xmodmap laden

chmod a+x .kde/Autostart/xmodmap.sh

Download der Datei