Multimedia-Tasten unter Linux nutzen
Nachdem ich seit mehreren Jahren einen Logitech Wireless Desktop Optical mein eigen nenne, möchte ich jetzt auch die sogenannten Multimedia-Tasten nutzen. Das ganze findet unter Gentoo-Linux statt, Ziel des Spiels ist es unter dem Windowmanager FVWM2 den Audio-Player Amarok mit den Sondertasten zu steuern.
Tasten am Kernel anmelden
Die reinen Multimedia-Tasten, also die Tasten für die Steuerung der Audio-Medien, sind dem Kernel bereits bekannt. Wenn nur diese Funktionen genutzt werden sollen kann dieser Schritt übersprungen werden.
Wer jedoch auch die anderen Tasten nutzen möchte muß diese zunächst dem Kernel bekannt machen.
Um herauszufinden für welche Tasten dieser Prozeß nötig ist benutzen wir das Programm xev. Wir starten es aus einer Konsole unter X. Zunächst öffnet sich nur ein weißes Fenster. Wenn wir die Maus in dieses Fenster bewegen, sehen wir in der Konsole Rückmeldungen für alle Eingaben, also auch für die Mausbewegungen.
Jetzt drücken wir der Reihe nach alle Multimedia-Tasten durch. Bei einigen wird in der Konsole der Tastendruck angezeigt, bei anderen nicht. Genau diese Tasten müssen wir also dem Kernel melden.
Das geschieht, indem wir eine der eben ermittelten Tasten drücken und daraufhin in einer Konsole dmesg ausführen. Die letzte Zeile wird in etwa wie folgt aussehen:
ronald@thor ~ $ dmesg [...] atkbd.c: Unknown key released (translated set 2, code 0x91 on isa0060/serio0). atkbd.c: Use 'setkeycodes e011' to make it known.
Der Kernel sagt also von sich aus, mit welchem Kommando die Taste anzumelden ist. Der Keycode ist frei wählbar, man sollte allerdings einen Code benutzen der noch nicht in Gebrauch ist. Im Netz findet sich der Rat, daß die letzten beiden Ziffern der ermittelten Zahl von hexadezimal zu dezimal umgerechnet und zu 128 addiert werden soll. Von der hexadezimalen e011 im Beispiel wird also die 11 behalten, nach dezimal umgerechnet (17) und zu 128 addiert. Als Keycode ergibt sich also 145.
Macht man das mit allen bislang unbekannten Tasten, ergibt sich folgender Block der ideal in der Datei /etc/conf.d/local.start untergebracht ist.
setkeycodes e011 145 # Einkaufen setkeycodes e012 146 # iTouch setkeycodes e013 147 # Finanzen setkeycodes e014 148 # Private Sites setkeycodes e015 149 # Soziales
So stehen die Codes nach dem nächsten Reboot zur Verfügung, um sie jetzt schon zu benutzen können führen wir das Skript als Root aus. Danach sollte xev auf alle Tasten reagieren.
Tasten an X anmelden
In der Ausgabe von xev sehen wir immer noch den Teil 'keysym 0x0, NoSymbol'. Das bedeutet, daß die Tasten unter X noch keinem Symbol zugeordnet sind.
Um das zu ändern legen wir im Homeverzeichnis eine Datei namens .Xmodmap an. Hier ordnen wir wie folgt zu:
! Go keycode 233 = XF86Go ! <= keycode 234 = XF86Back ! Sleep keycode 223 = XF86Standby ! Finanzen keycode 147 = XF86Finance ! Private Sites keycode 159 = XF86MySites ! Soziales keycode 151 = XF86Messenger ! Favoriten keycode 230 = XF86Favorites ! Audio-Tasten keycode 144 = XF86AudioPrev keycode 153 = XF86AudioNext keycode 237 = XF86AudioMedia keycode 174 = XF86AudioLowerVolume keycode 176 = XF86AudioRaiseVolume keycode 160 = XF86AudioMute keycode 162 = XF86AudioPlay keycode 164 = XF86AudioStop ! iTouch keycode 200 = XF86iTouch ! E-Mail keycode 236 = XF86Mail ! Einkaufen keycode 199 = XF86Shop ! Startseite keycode 178 = XF86HomePage ! Suchen keycode 229 = XF86Search
Die verwendeten Symbole finden sich in der Datei /usr/lib/X11/XKeysymDB, die Zeilen mit einem Rufzeichen am Anfang sind Kommentare.
Exkurs: Amarok fernsteuern
Eine geniale -- wenn auch weithin unbekannte -- Eigenart der KDE-Umgebung ist die Fernsteuerbarkeit aller Programme mittels DCOP. Der Anwender kann mit dem Kommandozeilentool dcop entsprechend vorbereiteten Programmen Nachrichten zukommen lassen auf die diese dann reagieren.
Welche Nachrichten von den Programmen akzeptiert werden läßt sich am einfachsten mit dem Programm kdcop herausfinden.
Das Programm zeigt alle laufenden Applikationen an, die mittels DCOP gesteuert werden können. Innerhalb der Applikationen sind die Funktionen in Bereiche aufgeteilt, beim Amarok findet man da zum Beispiel 'collection' oder 'player'.
Die ansprechbaren Funktionen sind in einer für Programmierer verständlichen Form aufgelistet, das hier zu erklären würde zu weit führen. Aber ich denke anhand einiger Beispiele wird die Funktionsweise deutlich. Die Kommandos werden einfach in der Shell ausgeführt:
dcop amarok player next
Springt zum nächsten Lied.dcop amarok player seekRelative 20
Springt im laufenden Lied 20 Sekunden weiter.dcop amarok playlist togglePlaylist
Schaltet die Anzeige der Playliste an oder aus.dcop amarok collection query "SELECT COUNT(1) FROM tags;"
Führt das angegebene SQL-Statement aus und gibt so die Anzahl der Tracks in der Sammlung zurück.
Weitere Erklärungen zu dem Thema finden sich in der Amarok-Dokumentation.
Tasten am Windowmanager anmelden
Ich setze als Windowmanager im Moment FVWM2 ein, in Verbindung mit dem exzellenten Theme fvwm-crystal. Die hier beschriebene Konfiguration läßt sich auch leicht in andere FVWM-Setups einbauen, ich denke mal wer den WM einsetzt weiß wie es geht... ;-)
Nutzer anderer Desktop-Umgebungen finden in der Gentoo-HowTo zum Thema entsprechende Hinweise.
Die Bindungen für Crystal werden in der Datei ~/.fvwm/user-preferences/Bindings definiert. Die benötigten Zeilen können einfach ans Ende der Datei angehängt werden. Für den Anfang wollen wir lediglich einige der Tasten belegen. Mein erster Entwurf sieht so aus:
# Go Key XF86Go A $[Mod0] Menu /RootMenu # <= #Key XF86Back # Sleep Key XF86Standby A $[Mod0] X xscreensaver-command -activate Key XF86Standby A $[Mod1] X xscreensaver-command -lock # Finanzen #Key XF86Finance # Private Sites #Key XF86MySites # Soziales #Key XF86Messenger # Favoriten #Key XF86Favorites # Audio-Tasten Key XF86AudioPrev A $[Mod0] X dcop amarok player prev Key XF86AudioNext A $[Mod0] X dcop amarok player next Key XF86AudioMedia A $[Mod0] X dcop amarok playlist togglePlaylist Key XF86AudioMedia A $[Mod1] X amarok Key XF86AudioLowerVolume A $[Mod0] X dcop amarok player volumeDown Key XF86AudioLowerVolume A $[Mod1] X dcop amarok player seekRelative -3 Key XF86AudioRaiseVolume A $[Mod0] X dcop amarok player volumeUp Key XF86AudioRaiseVolume A $[Mod1] X dcop amarok player seekRelative 3 Key XF86AudioMute A $[Mod0] X dcop amarok player mute Key XF86AudioPlay A $[Mod0] X dcop amarok player playPause Key XF86AudioPlay A $[Mod1] X dcop amarok player showOSD Key XF86AudioStop A $[Mod0] X dcop amarok player stop # iTouch Key XF86iTouch A $[Mod0] AA # E-Mail #Key XF86Mail # Einkaufen #Key XF86Shop # Startseite Key XF86HomePage A $[Mod0] X firefox # Suchen #Key XF86Search
Wie man sieht, sind noch nicht alle Tasten belegt. Für Standard-FVWM-Benutzer ist zu beachten, daß in Crystal $[Mod0] mit N und $[Mod1] mit M belegt sind, das heißt daß die Kombinationen mit $[Mod0] keine zusätzlichen Tasten erfordern, während die Verknüpfungen mit $[Mod1] mit Meta-Taste (Alt) kombiniert werden müssen.

