Xmodmap
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Fast jede aktuell im Handel erhältliche Tastatur hat diverse Sondertasten für Multimediafunktionen, Surfen usw. Leider sind diese Tasten nicht einheitlich belegt. Die beigelegte Software ist meist nur für Windows bestimmt. Für Linux gibt es diverse Programme, die mit den Sondertasten umgehen können. Alle diese Programme nutzen die Key-Codes, die die einzelnen Tasten erzeugen.
Immer wenn unter Linux eine Taste gedrückt wird, generiert der Kernel eine Art Scancode, welcher mit Hilfe einer keycode-Tabelle einer Taste (z.B. dem Buchstaben z) zugewiesen wird. Unter X funktioniert das Ganze ein wenig komplizierter - es lädt beim Starten eine eigene Keycode-Tabelle ein und bildet Tastatureingaben mit Hilfe der Kernel-Keycode-Tabelle darauf ab. Jeder Keycode kann dabei einem keysym entsprechen; ein keysym ist eine einfache Zeichenkette, die einer Funktion entspricht, die beim Drücken der Taste ausgeführt wird. In Linux kann man diese Zuordnungen mit Hilfe des Programms xmodmap ändern.
Ändern der Zuweisungen¶
Ermittlung des Tastensignals (keycode)¶
Zunächst muss man wissen, welches Signal ("keycode" genannt) eine Taste beim Drücken sendet. Dies kann man auf der Kommandozeile erledigen mit xev[4] oder grafisch mit xkeycaps 🇬🇧.
Die keycode-Tabelle¶
Bei der Wahl des Tastaturtreibers wurde nun jeder Taste (also jedem "keycode") ein gewisses Zeichen bzw. Funktion in Form von keysyms zugewiesen. Mit dem Programm xmodmap kann man diese Einstellungen individuell anpassen. Das Programm modifiziert die jeweils aktuelle Keymap (also die Zuweisungen des Signals, das die Taste sendet (= keycode) und der Aktion, die durch dieses Signal ausgelöst werden soll (= Zeichen, Funktion)). Dies ist unabhängig vom gewählten Tastaturlayout.
Zuweisungen ändern¶
Um nun Zuweisungen zu ändern, schafft man sich eine eigene Datei ~/.Xmodmap und ändert diese [2]. Dabei wechselt der erste Befehl in das Homeverzeichnis.
cd xmodmap -pke > .Xmodmap
Anzeigen¶
Mit less wird die Ausgabe der ~/.Xmodmap „Bildschirmweise“ und im Lesemodus angezeigt. Die Benutzung von less kann auf der Wiki-Seite gefunden werden.
less ~/.Xmodmap
Bearbeiten¶
Eine Bearbeitung kann zum Beispiel auch in der Shell mit nano erfolgen.
nano ~/.Xmodmap
Inhalt¶
Der Inhalt der Datei ~/.Xmodmap sieht in etwa folgend aus:
keycode 8 = keycode 9 = Escape keycode 10 = 1 plus plusminus infinity keycode 11 = 2 quotedbl leftdoublequotemark rightdoublequotemark keycode 12 = 3 asterisk numbersign leftcaret keycode 13 = 4 ccedilla Ccedilla slash keycode 14 = 5 percent bracketleft keycode 15 = 6 ampersand bracketright keycode 16 = 7 slash bar backslash keycode 17 = 8 parenleft braceleft Ograve keycode 18 = 9 parenright braceright Ocircumflex keycode 19 = 0 equal notequal Uacute …
Dies sind nur die ersten paar Zeilen. Wie man sieht, stehen nach dem =-Zeichen teilweise mehrere Wörter bzw. Zeichenketten (genannt keysym), jeweils getrennt von einem Leerzeichen.
Die Aktion der ersten Zeichenkette ist der Text/die Funktion, welche die Taste bei einfachem Drücken erzeugt.
Die zweite Zeichenkette wird erzeugt, wenn zusätzlich das Shift-Signal gesendet wird, was normalerweise durch die ⇧ -Taste erfolgt.
Die dritte Zeichenkette beschreibt die Aktion, die beim gleichzeitigen Senden des Mode_switch-Signals ausgeführt wird, normalerweise also durch gleichzeitiges Drücken der Alt -Taste.
Die vierte Zeichenkette beschreibt die Aktion beim Drücken der Taste und gleichzeitigem Senden von ⇧ und Mode_switch.
Die fünfte Zeichenkette beschreibt (zumindestens unter Unity) die Aktion, die bei gleichzeitigigem Drücken der Alt Gr ausgeführt wird.
Die sechste Zeichenkette beschreibt (wieder unter Unity) die Aktion, die bei aufeinanderfolgendendem Gedrückthalten von Alt Gr , dann ⇧ und schliesslich der gewünschten Taste ausgeführt wird.
Anmerkung: die "Mode switch"-Taste muss eventuell erst unter "System → Einstellungen → Tastatur → Belegungseinstellungen → third level choosers" festgelegt werden. Falls dies nicht funktionieren sollte, kann man alternativ dazu die ModeSwitch-Taste auch in der .Xmodmap-Datei festlegen. Um diese beispielsweise auf die rechte Strg-Taste (Keycode 105) zu legen ändert man die Zeile folgendermaßen: keycode 105 = Mode_switch NoSymbol Mode_switch
Wie man in dem Beispiel sieht, sind nicht alle Tasten mit vier verschiedenen Aktionen belegt, die Esc -Taste (keycode = 9) kann nur die Aktion Escape ausführen. Es ist allerdings freigestellt, hinter das Wort "Escape" noch ein "a" zu schreiben und somit jedesmal, wenn man gleichzeitig die ⇧ -Taste und die Esc -Taste drückt, ein "a" auf dem Bildschirm zu erzeugen. Der Fantasie sind hierbei keine Grenzen gesetzt, nur die keysym-Anweisungen müssen richtig geschrieben werden, entsprechende Listen sind aber im Internet vorhanden (z.B. hier). Als keysym kann auch der Unicode des gewünschten Zeichens verwendet werden (im Falle von α z.B. U03B1, für ♡ U2661). Eine kleine Auswahl:
keycode 144 | XF86AudioPrev | Springt zum vorherigen Titel |
keycode 160 | XF86AudioMute | Stellt den Ton ab |
keycode 162 | XF86AudioPlay | Startet die Wiedergabe |
keycode 164 | XF86AudioStop | Stoppt die Wiedergabe |
keycode 174 | XF86AudioLowerVolume | Lautstärkeregler herunterdrehen |
keycode 176 | XF86AudioRaiseVolume | Lautstärkeregler aufdrehen |
keycode 236 | XF86Mail | Startet ein E-Mail-Programm |
keycode 237 | XF86AudioMedia | Startet einen Medienplayer |
keycode 37 | XF86Start | Menü für die "Windows-Taste" |
Für die Sondertasten einer Cherry Master Solar-Tastatur würde der Abschnitt der ~/.Xmodmap so aussehen:
!! Cherry Master Solar keycode 144 = XF86AudioPrev keycode 160 = XF86AudioMute keycode 161 = XF86Calculator keycode 162 = XF86AudioPlay keycode 164 = XF86AudioStop keycode 173 = XF86Eject keycode 174 = XF86AudioLowerVolume keycode 176 = XF86AudioRaiseVolume keycode 178 = XF86HomePage keycode 227 = XF86Standby keycode 229 = XF86Search keycode 231 = XF86Reload keycode 232 = XF86Stop keycode 233 = XF86Forward keycode 234 = XF86Back keycode 236 = XF86Mail keycode 237 = XF86AudioMedia
Die Multimediatasten funktionieren jetzt wie normale Tasten - man kann also nun dem Fenstermanager oder der Desktop-Umgebung angeben, dass für den Start von XMMS nicht mehr Strg + Alt + F5 zu drücken ist, sondern einfach die Taste "XF86AudioMedia".
Spezielle Signale¶
Spezielle Signale, die oft in Zusammenhang mit anderen Tasten gesendet werden, sind:
Alt-L und Alt-R
Meta_L und Meta_R
Control_L und Control_R
Super_L und Super_R
Shift_L und Shift_R
Um die aktuelle Zuordnung dieser Signale auf die entsprechenden Keycodes zu erfahren, gibt man
xmodmap
im Terminal ein. Die Keycodes sind nun allerdings in sedezimaler Schreibweise notiert. Um diese Signale zu ändern, müssen die bisherigen Zuordnungen allerdings erst aufgehoben werden (das gilt nur für diese Signale!) Dies geschieht am Anfang der Datei mit dem Befehl clear
. Die gleiche Datei wie oben sieht dann so aus:
!clear Shift !clear Lock clear Control clear Mod1 !clear Mod2 !clear Mod3 !clear Mod4 !clear Mod5 keycode 8 = keycode 9 = Escape ...
Man sieht, dass zusätzlich zu den Standard-Signalen Shift, Lock und Control noch fünf freie Modifier zur Verfügung stehen, von denen aber meistens schon zwei oder drei belegt sind. In diesem Beispiel wurde das Signal Control und der erste Modifier für neue Zuordnungen freigegeben. Die neue Zuordnung geschieht dann am Dateiende mit dem Befehl add
:
... keycode 253 = keycode 254 = keycode 255 = !add Shift = Shift_L Shift_R !add Lock = Caps_Lock add Control = Control_L Control_R add Mod1 = Alt_L Alt_R !add Mod2 = Mode_switch !add Mod3 = Num_Lock !add Mod4 = !add Mod5 =
In diesem Beispiel wurden also die alten Zuordnungen der Signale Control
und Alt
aufgehoben und neuen Tasten zugeordnet.
Umlaute per Compose-Taste auch auf Englischen Tastaturen¶
Wenn man ein englisches Tastaturlayout hat, kann man mit xmodmap eine Compose-Taste einrichten. Eine
⎄ Compose-Taste wird nach folgendem Muster definiert: <ComposeKey> <"> <a> = ä
Also die ⎄ Compose-Taste drücken und dann z.b. Anführungszeichen für Pünktchen oder einzelnes Anführungszeichen für z.B. á oder ú (es gibt noch viele weitere Kombinationen)
Beispielsweise könnte man die Taste ganz links unten auf der Tastatur mit | < und > als Compose-Taste verwenden.
Man trägt in dem xmodmap-Eintrag der Taste Multi_key
ein:
keycode 94 = Multi_key
Die wichtigsten Kombinationen:
" a = ä " o = ö " u = ü " A = Ä " O = Ö " U = Ü s s = ß ' e = é ` e = è ^ e = ê
Tipps¶
Caps-Lock Taste¶
Sofern man immer wieder versehentlich die Caps-Lock Taste berührt und dann DER tEXT SO ERSCHEINT, kann man in der ~/.Xmodmap folgende Zeilen eintragen [2]:
! Kommentar: change Caps-Lock -> Shift remove Lock = Caps_Lock keysym Caps_Lock = Shift_L add Shift = Shift_L
Nach Aktivierung durch ab- und wieder anmelden bzw. ausführen von
xmodmap ~/.Xmodmap
funktioniert die Caps-Lock-Taste genau wie Shift und die lästigen Überraschungen sind Vergangenheit.
Konfiguration der Maustasten¶
Auch die Maustasten lassen sich über eine Zeile in der Datei ~/.Xmodmap konfigurieren bzw. vertauschen.
! Maustasten pointer = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
So gibt z.B. die Zahl an der fünften Stelle an, welche Maustaste der Taste 5 zugewiesen wird. Dabei entsprechen 1 = linke Maustaste, 2 = rechte Maustaste, 3 = mittlere Maustaste, 4 & 5 = Mausrad, alle höheren Tasten sind modellabhängig.
Auf diese Weise lässt sich relativ einfach das Natural Scrolling (wie man es von Max OS X Lion kennt) aktivieren: Dazu müssen die 4 und 5 vertauscht werden, was das Mausrad invertiert.
! Natural Scrolling pointer = 1 2 3 5 4 6 7 8 9 10 11 12 13 14 15 16
Problembehebung¶
Sollte die gewünschte Datei von xmodmap beim Hochfahren nicht eingelesen werden, kann ein verzögerter Autostart-Eintrag Abhilfe schaffen [5]:
sh -c 'sleep 30 && xmodmap ~/.Xmodmap'
Links¶
Eingabegeräte Übersichtsartikel