Siehe auch...

  • HowTo - Die Gentoo-Doku zum Thema

Multimedia-Tasten unter Linux nutzen

Die Multimedia-Tasten
Die Multimedia-Tasten

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

kdcop in Aktion
kdcop in Aktion

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.