ubuntuusers.de » Wiki » Xmodmap

Xmodmap

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

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 sogenannten 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 Pakets 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 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 sogenannten 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. Die aktuelle Zuweisung kann man in /usr/share/xmodmap/xmodmap.xy nachsehen, wobei xy für den jeweiligen Ländercode steht.

Um nun Zuweisungen zu ändern, gibt es zwei Möglichkeiten:

  1. Man ändert direkt die Standarddatei /usr/share/xmodmap/xmodmap.xy [2] (Dies ist aber nicht empfohlen, da man die Defaulteinstellungen so verliert!).

  2. Man schafft sich eine eigene Datei /home/Benutzername/.Xmodmap und ändert diese [2].

Um eine eigene Datei zu erzeugen, wechselt man in sein Benutzerverzeichnis /home/Benutzername und gibt folgenden Befehl ein:

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 letzte Zeichenkette beschreibt die Aktion beim Drücken der Taste und gleichzeitigem Senden von Shift und Mode_switch.

Anmerkung: die "Mode switch"-Taste muss eventuell erst unter "System -> Einstellungen -> Tastatur -> Belegungseinstellungen -> third level choosers" festgelegt werden.

In einigen Zeilen stehen bis zu 8 keysmys, es werden vom Xserver aber nur 4 benutzt.

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 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). Eine Auswahlliste ist außerdem in der Datei /usr/share/X11/XKeysymDB zu finden. Ein 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 Email-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 einfach

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 ganz einfach eine Compose-Taste einrichten. Eine Compose-Taste funktioniert folgendermaßen: <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 einfach 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 = ê

Automatisches Einlesen der neuen Konfiguration am Sitzungsbeginn

Bislang hat man jede Veränderung, vom Benutzerverzeichnis aus, mit dem Befehl

xmodmap .Xmodmap 

überprüft und Änderungen geladen. Will man nun, dass die Änderungen automatisch bei jeder neuen Sitzung geladen werden, meldet man sich einfach einmal ab und wieder an. Ubuntu erkennt nun die Datei .Xmodmap automatisch. Beim Beginn der Sitzung erscheint ein Dialog, der einen fragt, ob die neue Datei jedesmal eingelesen werden soll, wenn man sich anmeldet.

Der Vorteil gegenüber anderen Programmen wie LinEAK oder Hotkeys ist, dass das Programm xmodmap nicht während der ganzen Sitzung als Dämon laufen muss, sondern lediglich einmal kurz startet und die Tabelle setzt.


Diese Revision wurde am 24. Juni 2010 um 13:53 Uhr von konstantin.ribel erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet: Hardware, System

Passwort vergessen?