ubuntuusers.de

Xmodmap

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/keyboard.png 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.

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 

Öffnet man nun die Datei ~/.Xmodmap, so sieht man etwa Folgendes:

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' 

Diese Revision wurde am 30. Januar 2019 09:16 von Harkan10000 erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Hardware