Als Ausgangspunkt dient ein Notebook Dell Inspiron 9400 ("portables Kino"), auf dem Opensuse 10.1 läuft, und das sehr gut. Eines der wenigen Ärgernisse waren die sieben Multimedia-Tasten des Geräts, die sich an der Vorderseite befinden (siehe Bild).
Als Desktop kommt KDE in der Version 3.5 zum Einsatz, mein bevorzugter mp3-Player ist amarok, Dieses Programm soll über die Tasten bedient werden.
Um jetzt diese Tasten dazu zu bringen, den mp3-Player anzusteuern, müssen folgende Schritte geschehen:
|
Das Programm der Wahl heißt
|
Nach dem Aufruf des abgebildeten Scripts drückt man alle Tasten, deren keycode man ermitteln will. Eventuell muss man den Mauscursor am Ende in das schwarz umrandete Quadrat bewegen, um xev zur Ausgabe zu bewegen.
Der Output sollte in etwa so aussehen:
162 None
164 None
...
Jetzt können diesen Tasten symbolische Namen zugeordnet werden.
Für die 7 Tasten des Inspiron 9400 stellt X11 passende Konstanten zur Verfügung, etwa XF86AudioPlay für die Taste "Play".
Zusammen mit den ermittelten keycodes kann man eine Datei ~/.Xmodmap
erstellen, in der die Zuordnungen zwischen den Multimediatasten und den symbolischen Namen festgeschrieben wird.
Für den Inspiron 9400 sieht die so aus:
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
keycode 176 = XF86AudioRaiseVolume
keycode 174 = XF86AudioLowerVolume
keycode 160 = XF86AudioMute
Zum Testen kann man einfach
aufrufen.
Ein neuerlicher Lauf von xev sollte nun anstatt "None" den symbolischen Namen liefern.
xmodmap ~/.Xmodmap
Wenn X11 gestartet wird, werden von xmodmap diese 7 Tasten nun eingebunden. Funktion haben sie aber noch keine, das ist die Aufgabe von KDE.
Der Mechanismus, mit dem KDE einem Programm Kommandos übergibt, ist DCOP: Das Desktop COmmunication Protocol. Damit werden Nachrichten zwische KDE, der aktuellen Session und den laufenden Applikationen ausgetauscht. In unserem Fall hätten wir gerne, dass KDE z.B. das Tastenereignis XF86AudioPlay in einen Befehl an das (KDE-)Programm amarok übersetzt.
KDE stellt ein Werkzeug zur Konfiguration bereit: kcontrol, das Kontrollzentrum. Damit kann man KDE überreden, Tastenereignisse als DCOP-Kommandos an Programme weiter zu reichen. Auf einer (deutschen) Suse 10.1 befindet es sich unter dem nichtssagenden Menu-Punkt Persönliche Einstellungen. In älteren Versionen heißt es schlicht Kontrollcenter.
Unter Regionaleinstellungen & Zugangshilfen/Tastenkombinationen können mit dem Menu-Punkt Neue Aktion Zuordnungen zwischen Tastenereignissen und DCOP-Aktionen getroffen werden (siehe Bild).
Wenn man mittels Versuchen die eingetragenen Aktionen auslöst, sollte sich amarok melden. Wenn nicht, ist einer der Einträge falsch. Sollte der Test funktionieren, die Taste aber nicht den gewünschten Effekt zeitigen, fehlt wahrscheinlich die Tastenzuordnung.
In der Praxis ergeben sich dann noch ein paar Unzulänglichkeiten:
Aus unerfindlichen Gründen schafft es KDE bei mir nicht, beim Start xmodmap aufzurufen. Die einfache Abhilfe ist ein Startscript im Verzeichnis ~/.kde/Autostart, das diese Aufgabe übernimmt. Null Punkte für Eleganz, aber es funktioniert.
Die Ansteuerung der Lautstärke über amarok hat Nachteile:
Wenn amarok nicht läft, gehen die DCOP-Befehle ins Leere, damit funktionieren die Tasten nicht.
Ausserdem müsste man die Lautstärke am System auf mindestens 80% stellen, das beschert aber unverhältnismäßig laute akustische Events.
Besser ist es daher, die Lautstärke mit kmix oder über amixer zu steuern.
Ersteres Programm registriert sich ebenso wie amarok am DCOP und kann daher mit Events wie
kmix Mixer0 increaseVolume 1
gefüttert werden.
Für die Ansteuerung von amixer muss man ein kleines Wrapper-Script schreiben:
#!/bin/bash
if [ $# = 0 ] ; then
ADD="+1"
else
ADD="$1";
fi
NEWVAL=$(amixer -c 0 get Master | \
awk '$1=="Front"&&$2~/Left|Right/ {
val[c++]=$4; next}
END { printf "%d,%d\n",
val[0]'$ADD',val[1]'$ADD'}')
amixer -c 0 sset Master 0 $NEWVAL
Wenn dieses Script verwendet werden soll, muss man im kcontrol den Aktionstyp auf Tastenkürzel -> Befehl/Adresse (einfach)
umstellen.
Unter dem Tabreiter Befehl/Adresse-Einstellungen
muss dann der Name dieses Script stehen, versehen mit dem Parameter +1 für Lautstärke erhöhen oder -1 fürs Reduzieren.
Programme, die alle X-Events abfischen, wie z.B. der Bildschirmschoner, verhindern das Durchreichen der Tastenereignisse. In der Defaulteinstellung funktionieren die Multimediatasten daher nicht bei zugeklappten Deckel des Laptops.