X.org, CapsLock und die Hyper-Taste in Emacs
Einspeisung der Änderung
Die Datei ~/.Xmodmap ist nunmehr mithilfe von xmodmap(1) in die Konfiguration des laufenden X-Servers einzuspeisen:
$ xmodmap ~/.Xmodmap
Im Erfolgsfalle gibt es keine Ausgabe. Durch erneutes Ausführen von xmodmap(1) lässt sich das Ergebnis prüfen, welches so aussehen sollte:
$ xmodmap xmodmap: up to 3 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 Hyper_L (0x42), Hyper_L (0xcf) mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Hyper_L löst damit ausschließlich den Modifikator mod3 aus und es gibt kein Keysym mehr, welches die bisherige Feststelltastenfunktion bewirkt. Hyper_L wird zweimal für mod3 aufgeführt, weil es zwei unterschiedliche Keycodes sind, die zu Hyper_L führen können: die umgeänderte Feststelltaste (0x42) und die auf modernen Tastaturen nicht vorhandene »echte« Hyper-Taste.
Die von xmodmap(1) durchgeführten Änderungen sind nicht dauerhaft, d.h. die Datei ~/.Xmodmap muss bei jedem Start des X-Servers erneut eingespeist werden. Wie das geschieht, hängt von der genutzten Desktop-Umgebung ab. Wer auf eine Desktop-Umgebung verzichtet und X.org manuell per startx(1) startet, fügt den Befehl in die Datei ~/.xinitrc ein. Hat man diese Datei aus der mit X.org mitgelieferten Beispieldatei erzeugt, so findet man darin die folgenden für diese Zwecke ausreichenden Befehle:
usermodmap=$HOME/.Xmodmap # ... if [ -f "$usermodmap" ]; then xmodmap "$usermodmap" fi
Es gibt allerdings noch ein bisher unterschlagenes Problem. Das Programm setxkbmap(1) überschreibt bei seiner Ausführung jegliche Änderungen am Tastatur-Layout vollständig mit den Standardwerten aus dem gewählten Tastatur-Layout. Das ist deshalb relevant, weil es in europäischen Ländern nötig ist, ein anderes als das von X.org standardmäßig genutzte U.S.-amerikanische Tastatur-Layout einzustellen. Dies erreicht man aber mithilfe von setxkbmap(1):
$ setxkbmap -layout de
oder durch einen Eintrag in /etc/X11/xorg.conf.d/10-evdev.conf:
Section "InputClass" Identifier "keyboard-all" Driver "evdev" Option "XkbLayout" "de" MatchIsKeyboard "On" EndSection
Letztere Methode steht in unbehebbaren Konflikt mit der hier vorgeschlagenen Verwendung von xmodmap(1) in der ~/.xinitrc, weil die Optionen aus dem Verzeichnis /etc/X11/xorg.conf.d nach Ausführung der ~/.xinitrc ausgewertet werden und deshalb die in der ~/.xinitrc vorgenommenen Änderungen am Tastatur-Layout überschreiben. Das Ergebnis ist ein Reset aller mit xmodmap(1) vorgenommenen Änderungen und vermeintliche Wirkungslosigkeit des Befehls in der ~/.xinitrc (Xfce-Nutzer sollten beachten, dass es einen Bug im xfce4-xkb-plugin gibt, der bei Verwendung dieses Plugins zur Überschreibung des Tastatur-Layouts führt). Daher muss bei Anwendung der hier vorgeschlagenen Konfiguration zwingend das deutsche Tastatur-Layout mit setxkbmap(1) nach der ersten Methode eingestellt werden. Es ist außerdem darauf zu achten, dass setxkbmap(1) vor xmodmap(1) ausgeführt wird, indem man in der ~/.xinitrc die Befehle in folgender Reihenfolge unterbringt:
setxkbmap -layout de xmodmap ~/.Xmodmap
Setzt man die Beispielkonfiguration von X.org ein, ist setxkbmap(1) entsprechend vor dem oben gezeigten if-Ausdruck einzufügen.