Funktionstasten unter X nutzen

Worum es geht

Moderne Tastaturen verfügen oft über programmierbare Funktionstasten. Auf meinem Logitech Cordless iTouch Keyboard gibt es gleich 12 davon (zuzüglich der drei Windowstasten). Grund genug sich mit dem Thema Tastatur und XFree etwas zu beschäftigen.

Die meisten Distributionen binden die Windowstasten inzwischen in die Konfiguration als ModX und Menue ein, die restlichen Tasten werden aber leider ignoriert. Unter Micro$oft Windoze kann man die Funktionen der Tasten recht komfortable mit der Software des Herstellers programmieren. Da aber bisher kein Hersteller für GNU/Linux ein ähnliches Tool geschrieben hat, muß man zur Selbsthilfe greifen.

Voraussetzungen

Die folgende Lösung geht davon aus, daß XFree in der Version 4 vorliegt und geht nicht auf KDE ein. Bei XFree in der Version 3 muß X (meines Wissens nach) leider neu kompiliert werden und KDE überschreibt per default die X Einstellungen.

keycodes und Xmodmap

Zuerst muß man den keycode der Funktionstasten ermitteln. Dazu öffnet man das Programm xev und betätigt die gewünschte Funktionstasten. Das Programm gibt nun zusammen mit einigen anderen Informationen den keycode der gedrückten Taste aus. Diesem Code ordnet man dann in ~/.Xmodmap (für ein User) oder /etc/X11/Xmodmap (für alle User) eine freie Taste zu (keycode XXX = Taste). Es hat sich hierbei bewährt die neuen Tasten einfach als F13, F14 usw. zu bezeichnen.

# /etc/X11/Xmodmap bzw. ~/.Xmodmap 
# für Logitech Cordless iTouch Tastatur 
keycode 178 = F13
keycode 230 = F14
keycode 229 = F15
keycode 223 = F15
keycode 162 = F16
keycode 164 = F17
keycode 144 = F18
keycode 153 = F19
keycode 236 = F20
keycode 174 = F21
keycode 176 = F22
keycode 229 = F23

Besonderheiten bei Debian

Für Debian (ab woody) ist noch etwas zusätzliche Arbeit erforderlich, da die -> Entwickler beschlossen haben die Dateien /etc/X11/Xmodmap und ~/.Xmodmap nicht mehr beim Start von XFree auszuwerten. Um diesen Mechanismus wieder zu aktivieren, muß man (wie in der Manualseite man xmodmap erläutert) im Verzeichnis /etc/X11/Xsession.d/ ein Script 40xcustom_load-xmodmap anlegen.

# /etc/X11/Xsession.d/40xcustom_load-xmodmap
# (nur für Debian ab woody notwendig)
SYSMODMAP=/etc/X11/Xmodmap
USRMODMAP=$HOME/.Xmodmap

if [ -x /usr/bin/X11/xmodmap ]; then
  if [ -f $SYSMODMAP ]; then
    xmodmap $SYSMODMAP
  fi
fi

if [ -x /usr/bin/X11/xmodmap ]; then
  if [ -f $USRMODMAP ]; then
    xmodmap $USRMODMAP
   fi
fi

Es sei aber darauf hingewiesen, daß der Xmodmap Mechanismus nicht ohne Grund entfernt wurde. Deshalb sollte man die korrekte Reaktion des Systems auf Tastaturereignise nach anlegen des Scripts testen.

Tasten effektiv nutzen

Das weitere Vorgehen ist leicht: Man ordnet den neuen Funktionstasten mit Hilfe seines Lieblings Windowmanagers einige häufig genutzte Kommandos zu.

In bevorzuge als Windowmanager Window Maker und habe Shortcuts auf mutt, mozilla, xterm und logout gelegt. Die Tasten play, next usw. nutze ich zur Steuerung von xmms. Window Maker erlaubt leider nur Shortcuts auf Menüeinträge. Man legt also für alle Programme für die nicht schon Menüeinträge existieren mit WPrefs eine neues Untermenü an und ordnet die Shortcuts zu.

Bild: Window Maker Untermenü mit xmms Shortcuts

// Ausschnit aus ~/GNUstep/Defaults/WMRootMenu

[...]
media,
    (
      "xmms-shortcuts",
      (play, SHORTCUT, F16, EXEC, "/usr/bin/xmms-shell -e play"),
      (stop, SHORTCUT, F17, EXEC, "/usr/bin/xmms-shell -e stop"),
      (backward, SHORTCUT, F18, EXEC, "/usr/bin/xmms-shell -e backward"),
      (forward, SHORTCUT, F19, EXEC, "/usr/bin/xmms-shell -e forward"),
      ("volume -", SHORTCUT, F21, EXEC, "/usr/bin/xmms-shell -e -"),
      ("volume +", SHORTCUT, F22, EXEC, "/usr/bin/xmms-shell -e +")
    ),
[...]

xmms fernsteuern

Für die Fernsteuerung von xmms nutze ich das Programm xmms-shell (als deb verfügbar), welches es ermöglicht xmms aus einer Console heraus zu bedienen. xmms-shell erlaubt über die Kommandozeilen Option - e Kommando auch die nicht interaktive Nutzung. z.B. xmms-shell -e stop. Eine Liste aller möglichen Kommandos gibt xmms-shell -e help. Verwendet man zusätzlich noch das xmms Plugin xmms-osd-plugin (als deb verfügbar) erhält man eine Art On-Screen Display für xmms. Insgesamt läßt sich xmms so sehr komfortabel und vor allem schnell fernsteuern.

Bild: Screenshot mit xmms-shell