| « goosh - Google in einer Shell | Sondertasten spezieller Tastaturen und Laptops konfigurieren - Teil 1: Hotkey Setup » |
Sondertasten spezieller Tastaturen und Laptops konfigurieren - Teil 2: X
Ich hatte mir ein Notebook mit vorgefertigter Linux-Konfiguration (Ubuntu7.10) gekauft, weil ich dann sicher sein kann, dass alle Komponenten Linuxunterstützung bieten. Natürlich hat die installierte Version meinen Ansprüchen nicht genügt und ich habe eine aktuellere Version (Ubuntu8.04) aufgespielt. Dummerweise funktionieren jetzt meine Fn-Tasten nicht mehr. Im folgenden werde ich meine Lösung für dieses Problem vorstellen.
Follow up:
Exemplarisch betrachte ich die Tastenkombinationen Fn+Pfeil_hoch (Helligkeit erhöhen) und Fn+Pfeil_runter (Helligkeit reduzieren). Die benötigten Kernel Module sind im Standard Kernel der Distribution enthalten. Ich habe mir zwar einen eigenen Kernel gebaut, aber das soll heute nicht das Thema sein.
Für einen bestimmten X-Server gibt es jeweils eine feste Zuordnung von physikalischer Taste zu einem sogenannten Keycode. Auch wenn die Beschriftung bei verschiedenen Tastaturmodellen eine andere sein kann, so ist die Zuordnung der physikalischen Taste zum Keycode gleich. Um Portabilität und eine Unabhängigkeit vom eingesetzten Tastaturmodell zu erreichen, greift man nicht direkt auf die Keycodes zu. Anstatt dessen verwendet man Keysyms. Das ist die jeweilige Bedeutung, die einem Keycode (plus Umschalttasten, wie z.B. Shift oder Stuereung) zugeordnet wurde.
Um sich unserem Problem zu nähern, gilt es zuerst die Keycodes der beiden oben genannten Tastenkombinationen herauszufinden. Hierzu gibt es unter X, der grafischen Oberfläche, das Programm xev. Einmal über ein Terminalprogramm gestartet, gibt es bei jedem Drücken und bei jedem Loslassen einer Taste umfangreiche Informationen zu den entsprechenden Ereignissen (KeyPress event und KeyRelease event) aus. Wir notieren uns die beiden Keycodes 212 (Fn+Pfeil_hoch) und 101 (Fn+Pfeil_runter).
In Klammern hinter dem Keycode kann man die Keysyms ablesen, hexadezimal und als Zeichenkette. Letztere sind definiert in /usr/include/X11/keysymdef.h (ohne das Präfix XK_) und in /usr/share/X11/XKeysymDB.
Für die beiden notiertierten Keycodes wählen wir uns nun "passende" Keysyms aus. Ich habe SunVideoRaiseBrightness und SunVideoLowerBrightness aus der Datei XKKeysymBD auserkoren. Nun gilt es noch die Zuordnung zu definieren. Dies lässt sich mittels xmodmap realisieren. Um einzelne Tasten auszuprobieren kann man beispielsweise
xmodmap -e "keycode 212 = SunVideoRaiseBrightness"
eingeben und mit Hilfe von xev nachschauen, ob es funktioniert hat. Um nicht immer alles von Hand setzen zu müssen, kann man auch die Konfigurationsdatei ~/.Xmodmap verwenden. In unserem Beispiel sind tragen wir folgendes ein:
keycode 212 = SunVideoRaiseBrightness keycode 101 = SunVideoLowerBrightness
Man kann auch eine globale Zuordnung, die für alle Nutzer gilt, erstellen. Unter Ubuntu findet man eine vordefinierte Version in /usr/share/apps/kxkb/ubuntu.xmodmap.
Um die Helligkeit zu regulieren verwenden wir xbacklight aus dem gleichnamigen Paket. Interssant sind die Optionen -inc (erhöhen der Helligkeit um eine angegebene Prozentzahl) und -dec (herabsetzen der Helligkeit um eine angegebene Prozentzahl). Gibt man keine Option an, so gibt xbacklight die aktuelle Helligkeit in Prozent aus.
Mit Hilfe von xbindkeys aus dem gleichnamigen Paket wird es uns möglich Keysyms Befehlszeilen zuzuordnen. Wir legen die Datei ~/.xbindkeysrc mit folgendem Inhalt an:
"aosd_cat -t heller -y -60 -x -100 " SunVideoRaiseBrightness "xbacklight -inc 20" SunVideoRaiseBrightness+release "aosd_cat -t dunkler -y -60 -x -100" SunVideoLowerBrightness "xbacklight -dec 10" SunVideoLowerBrightness+release
Es wird jeweils einer Befehlszeile (in Anführungszeichen) ein Keysym zugeordnet. Die Ergänzung "+release" bedeutet, dass die vorangegangene Befehlszeile nicht bei dem Drücken, sondern beim Loslassen der Taste ausgeführt werden soll. Jeweils beim Loslassen wird die Helligkeit der Hintergrundbeleuchtung erhöht oder herabgesetzt. Beim Drücken der Tasten verwenden wir aosd_cat aus dem Paket aosd-cat, um einen Text per On-Screen-Display (ähnlich wie bei vielen Fernsehern) auszugeben. Dieser Text wird kurz an der angegebenen Position eingeblendet und verschwindet dann wieder.
Damit der xbindkeys-Dämon bei jedem Start aktiv ist, fügen wir der Datei ~/.xsessionrc die Befehlszeile xbindkeys an. Die Tastenbelegung ist nur für den Benutzer verfügbar, der die oben beschriebenen Änderungen in seiner .xbinkeysrc und in seiner .xsessionrc durchgeführt hat.