Xmodmap

Aus wiki.archlinux.de

Jeder Taste auf einer Tastatur ist Tastatur-Intern ein Code zugeordnet, dieser Code wird dem Betriebssystem beim Tastendruck übergeben, dass dann – je nach Einstellung – das entsprechende Zeichen ausgibt. Der Keycode wird unter Linux vom Kernel verarbeitet, und das entsprechende Zeichen ausgegeben. Es ist also nicht so, dass die Tastatur ein bestimmtes Zeichen erzeugt, sondern sie übergibt lediglich einen Code an das System, das daraus dann mittels einer Tabelle das dazugehörige Zeichen ermittelt.

Unter X funktioniert das ähnlich. Hier wird auf Grundlage der im Kernel verfügbaren Keycode-Tabelle eine eigene Tabelle generiert. In dieser Tabelle wird jedem Keycode ein Keysym zugeordnet, über den definiert wird, was ein Tastendruck auslösen soll. Das Programm, das für diese Zuordnung zuständig ist, heißt Xmodmap, die Ersetzungstabelle wird ebenfalls Xmodmap genannt, und wird üblicher Weise unter „.Xmodmap“ abgelegt.

Bei der Wahl des Tastaturtreibers über Evdev oder direkt in der xorg.conf wird jedem Keycode ein Keysym zugeordnet und von X benutzt. Diese Zuordnung geschieht automatisch und im Normalfall auch zuverlässig. Falls nicht, oder falls man die Zuordnungen anpassen oder um weitere Zuordnungen ergänzen möchte, benutzt man ebenfalls Xmodmap, inklusive einer eigenen Xmodmap-Datei.

Voraussetzungen und Zielsetzung

Es wird in diesem Artikel davon ausgegangen, dass X konfiguriert ist, und funktioniert, und dass die Tastatur ein deutsches Layout hat, sowie ordnungsgemäß erkannt wird. Es ist nicht relevant, ob die Tastatur über Evdev oder xorg.conf konfiguriert wurde. Es ist zu beachten, dass einige Desktop- oder Fenstermanager eventuell eigene Einstellungen mitbringen, die die Einstellungen von Xmodmap überschreiben könnten.

Nach erfolgreicher Konfiguration gemäß diesem Artikel werden mittels AltGR einige typographische „Sonderzeichen“ wie die Ellipse, ein Gedankenstrich, sowie deutsche einfache und doppelte Anführungszeichen zum einfachen Verwenden verfügbar sein. Zudem können die erzeugte Datei sowie das erworbene Wissen als Grundlage für weitere Anpassungen verwendet werden.

Aufbau der Xmodmap

Vom Konzept her können in der Xmodmap je Taste bis zu acht Keysyms definiert werden, wobei vom Kernel nur die ersten sechs Definitionen unsterstützt werden. In der Praxis gliedert sich die Xmodmap also in sieben Teile.

! Dies ist ein Kommentar.
keycode NN = keysym1 keysym2 keysym3 keysym4 keysym5 keysym6

Der Teil vor dem Gleichheitszeichen bestimmt, welcher Keycode – hier durch „NN“ repräsentiert – konfiguriert werden soll. Nach dem Gleichheitszeichen folgen dann die sechs (von acht, s.o) Keysyms. Die Reihenfolge besteht wie folgt.

  1. die Taste wird alleine gedrückt
  2. die Taste wird mit Shift gedrückt
  3. die Taste wird mit Mode_switch gedrückt
  4. die Taste wird mit Mode_switch und Shift gedrückt
  5. die Taste wird mit AltGr gedrückt
  6. die Taste wird mit AltGr und Shift gedrückt

Es müssen nicht immer alle Angaben gesetzt werden, es dürfen aber keine Lücken entstehen. Will man zum Beispiel nur den vierten Keysym setzen, müssen die ersten drei Keysyms ebenfalls gesetzt werden, man kann diese aber mittels „NoSymbol“ praktisch funktionslos machen, so dass ein Tastendruck, der diesem Keysym zugeordnet wird, keine Reaktion verursacht.

Kommentare werden durch ein Ausrufezeichen eingeleitet. Mehrzeilige Kommentare sind nicht möglich. Weitere Funktionen, auf die in diesem Artikel allerdings nicht eingegangen wird, sind zum Beispiel „clear“ für das Entfernen von Tastensignalen wie Shift, Lock, etc., oder das Anpassen und Hinzufügen von Modifikations-Tasten („add <mod>“).

Es müssen beim Erstellen einer eigenen Xmodmap nicht alle verfügbaren Keycodes definiert werden, da Xmodmap substituierend arbeitet, das heißt: Vorhandene Definitionen für Keycodes werden durch jene aus der eigenen Xmodmap ersetzt. Es ist sogar nicht ratsam, alle Definitionen zu ändern, da eventuell beim Anschluss einer neuen Tastatur einige Codes anders sind, und sprichwörtlich „alles im Eimer“ ist.

Keycodes ermitteln

Das Hauptfenster von xev

Da die Keycodes der Tastatur üblicherweise nicht auf der Tastatur oder in dessen Handbuch stehen, dem System aber bekannt sind – bzw. abgefragt werden können – ist es nicht zielführend, zu versuchen, durch Recherche herauszufinden zu versuchen, welche Keycodes benutzt werden. Es gibt drei weitverbreitete Möglichkeiten, um an die Keycodes zu kommen.

xev

Das Tool „xev“ zweigt alle Events des X-Servers ab, und gibt die Informationen zu diesen Events in Rohform an der Shell aus, aus der es gestartet wurde. Das Tool gehört zum Standard-Umfang einer X-Installation. Nach dem Start erscheint ein Fenster. Wenn das Fenster den Fokus hat, und man eine Taste drückt, erscheint – hier am Beispiel der Taste „e“, ohne weitere Tasten gedrückt – folgende Ausgabe.

KeyPress event, serial 35, synthetic NO, window 0x1e00001,
    root 0x8b, subw 0x0, time 14288542, (264,404), root:(1279,503),
    state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XmbLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x1e00001,
    root 0x8b, subw 0x0, time 14288614, (264,404), root:(1279,503),
    state 0x10, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False

Es werden also zwei Events vom X-Server erkannt. Das erste Event „KeyPress“ bezieht sich dabei auf den Vorgang „Taste drücken“, das zweite Event „KeyRelease“ bezieht sich dabei auf den Vorgang „Taste loslassen“. Neben diverser, hier in diesem Artikel unwichtigen, Informationen werden – in der jeweils dritten Zeile – der Keycode, sowie der Keysym ausgegeben. Anhand dieser Informationen kann man also ermitteln, dass ein einfacher Druck auf die „E“-Taste der Tastatur dem Keysym „e“ zugeordnet ist, und dass die Taste den Keycode 26 hat.

So kann man nun mit allen Tasten verfahren, die man anpassen möchte.

xkeycaps

XKeyCaps ist ein grafisches Programm, das ein Onscreen-Keyboard darstellt. XKeyCaps ist im „extra“-Repository verfügbar, und kann aus diesem ganz normal mittels Pacman installiert werden, danach ist es über „xkeycaps“ aufrufbar.

Beim Starten muss man zuerst die Tastatur auswählen, in der „Vendors“-Spalte, wählt man seinen Hardware-Typen aus, generell ist man mit „PC“ genau richtig. In der „Keyboards“-Spalte muss man seinen Tastaturtypen auswählen. Die deutsche Standard-Tastatur ist „105 key, wide Delete, tall Enter“. Bei „Layouts“ wählt man dann sein Tastaturlayout, im Falle einer deutschen Tastatur „XFree86; German“. Nach einem Klick auf „Ok“ bekommt man eine Tastaturansicht.

Ansicht einer deutschen Tastatur in XKeyCaps, die „E“-Taste wird gedrückt

Wenn man nun auf seiner Tastatur eine Taste drückt, leuchtet die entsprechende Taste auf der Bildschirmtastatur auf. Zudem werden im oberen Bereich informationen wie der Keycode, die vergebenen Keysyms, sowie eventuell gedrückte Modifier-Keys und der ASCII-Code ausgegeben. Über das Menü links kann man das Programm verlassen, oder ein anderes Tastaturlayout wählen. Über „Type at window“ kann man den Tastaturfokus einem anderen Programm zuweisen.

Über Rechtsklick (Maustaste gedrückt halten) auf eine Taste bekommt man ein Menü, über das man die betreffende Taste manipulieren kann (siehe Todo). Wenn man alle Tasten nach seinen Wünschen konfiguriert hat, klickt man auf „Write Output“, hier hat man die Wahl, entweder alle Tasten, oder nur die geänderten zu speichern, es ist empfohlen, nurdie geänderten Tasten zu speichern.

Es wird nun eine Datei „.xmodmap-hostname“ angelegt. Um diese Xmodmap zu benutzen, ist der Aufruf bei X-Start (siehe Aktivieren der Xmodmap) entsprechend anzupassen.

xmodmap

Die Systemeigene Xmodmap kann ebenfalls ausgelesen, und als Grundlage für die eigene Xmodmap verwendet werden. Dazu bedient man sich des Programms Xmodmap.

xmodmap -pke > zieldatei

Es wird nun die komplette Xmodmap des Systems in „zieldatei“ geschrieben. Wie oben beschrieben heißt diese Datei traditionell „.Xmodmap“, es kann aber jeder beliebige Name verwendet werden. Es ist zu beachten, dass eventuell bereits vorhandene Änderungen an dieser Datei durch eine eigene Xmodmop ebenfalls so zurückgegeben werden.

In der Zieldatei befinden sich nun also alle Keycodes nebst definierter Keysyms. Die Datei ist daher manuell auf das gewünschte zurechtzukürzen.

keycode 26 = e E e E EuroSign EuroSign EuroSign

… zum Beispiel verweist ja wie bereits mit xev ermittelt auf die Taste „E“. Anhand der Keysyms (vor allem der ersten beiden) sollte es recht einfach sein, auf die jeweilige Taste schließen zu können.

Der Mode_switch

Wie bereits erwähnt, werden mit dem Mode_switch der dritte und vierte Keysyms angesprochen. Da der Mode_switch standardmäßig nirgends auf der Tastatur belegt ist, bzw. auf Tasten liegt, die es nicht gibt, muss er erst definiert werden.

Wenn man den Mode_switch jetzt z.B. auf die linke Windows-Taste (Super_L) legen möchte muss man 2 Dinge beachten:

  1. Super_L ist schon als solches gekennzeichnet
  2. der keycode muss geändert werden
xmodmap -pke | grep Super

Die ausgegebenen Keycodeskeycodes muss man sich Notieren. Im Beispiel wird 133 verwendet. Dieser Keycode wird in der Xmodmap nun dem Mode_switch zugewiesen.

keycode 133 = Mode_switch NoSymbol Mode_switch NoSymbol Mode_switch
clear mod3
add mod3 = Mode_switch
clear mod5
add mod5 = ISO_Level3_Shift

Jetzt kann – etwas anders als weiter unten beschrieben – . mit 6 verschiedenen Zeichen belegt werden.

keycode 60 = period colon U2026 U2026 periodcentered division

Dadurch ergibt sich folgende Belegung:

  • . = .
  • ⇧ Shift + . = :
  • ⊞ Super + . =
  • ⊞ Super + ⇧ Shift + . =
  • AltGr + . = ·
  • AltGr. + ⇧ Shift + . = ÷

Anpassen der Keysyms

Wenn man nun auf die Tasten „Y“ und „X“ beim gleichzeitigen Drücken von AltGR das deutsche linke, bzw. rechte Anführungszeichen legen möchte, benötigt man erstmal deren Keycodes. Es wird davon ausgegangen, dass die beiden Tasten als Keycode 52 (Y) bzw. 53 (X) haben. Mit den Informationen aus diesem Artikel und den Keycodes kann man nun folgende Definition erstellen.

keycode 52 = y Y NoSymbol NoSymbol doublelowquotemark singlelowquotemark
keycode 53 = x X NoSymbol NoSymbol leftdoublequotemark leftsinglequotemark

Zuerst wird das jeweilige Zeichen definiert. Also bei der „Y“-Taste zuerst das kleine Y („y“) und dann das große Y („Y“), nochmals gefolgt von dem kleinen Y („y“) und dem großen Y („Y“) - oder dem Zeichen, das beim drücken von Mode_switch erscheinen soll - dann kommt die Definition für das linke deutsche Anführungszeichen („), zusätzlich ist auf AltGr+Shift+Y auch noch das deutsche einfache linke Anführungszeichen (‚) verfügbar.

Auf der „X“-Taste ist das ebenfalls so: Dort sind zuerst die Buchstaben verfügbar, und über AltGr+X, bzw. AltGr+Shift+X das deutsche schließende Anführungszeichen (“) bzw. das deutsche einfache schließende Anführungszeichen (‘). Die Bezeichnungen „left…“ resultieren daher, dass alle Keysyms aus dem englischsprachigen Raum stammen, und das englische linke Anführungszeichen eben dem deutschen rechten Anführungszeichen entspricht.

Aktivieren der Xmodmap

Die soeben erstellte Datei aktiviert man mittels des Xmodmap-Tools. Dazu ist folgender Aufruf zu verwenden.

xmodmap DATEI

DATEI ersetzt man natürlich durch den Namen der Xmodmap-Datei, die man dem System hinzufügen möchte. Zum automatischen Aktivieren der eigenen Xmodmap-Datei beim Einloggen, bzw. dem Start von X gibt es drei Möglichkeiten.

  1. Man führt den Befehl aus, bevor man die angepassten Tastenfunktionen nutzen möchte
  2. Man fügt den Xmodmap-Aufruf der Datei „.xinitrc“ oder der Autostart-Datei des verwendeten Fenstermanagers hinzu
  3. Man braucht gar nichts zu machen, da die Desktopumgebung die Datei „.Xmodmap“ automatisch erkennt und den Befehl selbständig ausführt.

Komplette Xmodmap nach Zielsetzung

Ziel des Artikels ist ja, dass am Ende eine funktionsfähige Xmodmap-Datei vorhanden ist, über die innerhalb von X typographisch „richtige“ Zeichen verwendet werden können. Mit nachfolgender Datei ist das möglich.

!! ------------------------------------------------------------------------------------------- !!
!!            normal     shift       M_s      M_s+shift altgr              Altgr+shift         !!
!! ------------------------------------------------------------------------------------------- !!
keycode 51 = numbersign  apostrophe  NoSymbol NoSymbol  rightsinglequotemark  NoSymbol
keycode 52 = y           Y           NoSymbol NoSymbol  doublelowquotemark    singlelowquotemark
keycode 53 = x           X           NoSymbol NoSymbol  leftdoublequotemark   leftsinglequotemark
keycode 60 = period      colon       NoSymbol NoSymbol  ellipsis              division
keycode 61 = minus       underscore  NoSymbol NoSymbol  endash                abovedot
keycode 65 = space       NoSymbol    NoSymbol NoSymbol  nobreakspace          NoSymbol

!! M_s = Mode_Switch

Wie schon durch den Kommentar zu erkennen, sind nun – neben der Standard-Belegungen der Tasten gemäß der auf der Tastatur aufgedruckten Zeichen – folgende Zusatzfunktionen möglich:

  • AltGr + # → Richtiger Apostroph (’)
  • AltGr + Y → Linkes deutsches Anführungszeichen („)
  • AltGr + ⇧ Shift + Y → Linkes einfaches deutsches Anführungszeichen (‚)
  • AltGr + X → Rechtes deutsches Anführungszeichen (“)
  • AltGr + ⇧ Shift + X → Rechtes einfaches deutsches Anführungszeichen (‘)
  • AltGr + . → Auslassungspunkte („Ellipse“: …)
  • AltGr + - → Gedankenstrich (–)
  • AltGr +    Leertaste    → Geschütztes Leerzeichen ( )

Damit ist es nun möglich, typographisch korrekte Schreibweisen zu verwenden:

Er dachte: „Oh, die Sache mit der ‚Xmodmap‘ ist aber toll … Was es nicht
alles gibt! Ich bin – und das sag’ ich einfach so – total begeistert!“

… anstelle von …

Er dachte: "Oh, die Sache mit der 'Xmodmap' ist aber toll ... Was es nicht
alles gibt! Ich bin - und das sag' ich einfach so - total begeistert!"

Der Lesbarkeit tut es gut, und zudem werden nicht Zoll- und Minutenzeichen oder das Minus für Dinge verwendet, für die sie ursprünglich gar nicht vorgesehen waren. – Außerdem lernt man dabei noch was …

Weblinks

Todo

  • XKeyCaps das Bearbeiten der Tasten über das Rechtsklick-Menü hat bei mir nicht funktioniert.
  • Wie handhaben Gnome und KDE das? Gibt es dort eine automatische Funktion, um die .Xmodmap einzulesen, oder überschreiben die beiden die Einstellungen einfach mit eigenen Konfigurationen?: Laut dieser URL ist xmodmap veraltet und wurde durch XKB ersetzt. Das dortige Mapping kann dann aber wiederum von KDE/Gnome via setxkbmap überschrieben werden.