Tastaturlayouts für eigene Zwecke anpassen unter Linux


Einer der Gründe, warum ich inzwischen seit mehreren Jahren nur noch Linux verwende, ist die gute Anpassbarkeit in jedem Detail. Nichts, was jeder braucht oder auch nur jeder nützlich finden würde, aber mir gefällt es. Vielleicht eine typische Eigenart von Programmierern - alles, was durch Anpassungen effizienter oder nützlicher werden könnte, soll es auch werden.

tastatur_kyrillisch.jpgZurzeit schreibe ich zum Beispiel oft Leadsheets für meine Band, dafür brauche ich immer wieder die Vorzeichen-Symbole ♭ und ♯. Natürlich kann man auch einfach b und # schreiben, das sieht dann aber doof aus: A♭ oder A♯ vs Ab oder A#. Vor allem wenn es As-Moll ist: Abm. Und man kann die Spezialsymbole zwar einfügen, obwohl sie auf der Tastatur fehlen, aber nur per Unicode-Spezialbefehl, in meinem Fall Strg + Shift + U, dann die Unicode-Folge (U266D bzw. U266F) und dann Leerzeichen. Dann hat man zwar A♭m, aber auf Dauer auch eine Arbeitsbeschaffungsmaßnahme.

Aber genug des Vorgeplänkels. Unter Linux kann man, sofern die verwendete Linux-Variante den X-Server verwendet (und das tun zumindest die gängigen alle), sein Tastaturlayout einfach anpassen. Ich habe das bereits früher mal gemacht, um die Belegung der internen Funktionstasten meines Notebooks zu ändern, aber dazu später. Ich wollte also gerne das ♭ erzeugen, indem ich die B-Taste mit Alt Gr zusammen verwende, und das ♯ entsprechend bei Alt Gr und #. Die Standard-Tastaturlayouts von Linux Mint haben auf der Alt Gr-Ebene schon irgendwelche anderen Sonderzeichen, auf die ich aber gut verzichten kann.

Die Tastaturlayouts sind unter /usr/share/X11/xkb/symbols gespeichert. Nicht jede mögliche Variante hat eine eigene Datei, nur die grundlegenden Layouts. Ich verwende zum Beispiel das Layout de in der Variante deadgraveacute - also die deutsche Belegung, bei der nur die Akzente Grave und Acute standardmäßig einen Buchstaben erwarten é è, das Circumflex ^ bekomme ich direkt. Die dafür zuständige Datei ist de.

In dieser Datei gibt es drei wesentliche Bestandteile:

xkb_symbols "deadgraveacute"
Dadurch wird die Variante gekennzeichnet. Es gibt immer eine Variante "basic" und dann abgewandelte Varianten. Tastenbelegungen können in mehreren Varianten vorkommen, es gilt, die richtige(n) zu ändern.
include "latin(type4)"
Damit nicht so viele Dopplungen auftauchen, können Layouts und Varianten eingebunden werden. Diese Zeile bindet das Layout latin ein, das sich in einer anderen Datei befindet, und zwar in der dort notierten Variante type4. Die Variante ist beim Einbinden optional. In meinem Fall befand sich die Tastenbelegung, die ich ändern wollte, gar nicht in der Datei de, sondern bereits in der Datei latin.
key { [ b, B, U266D, leftsinglequotemark ] };
In diesen Zeilen wird die tatsächliche Belegung der Tasten definiert. Der Name der Taste steht am Anfang in spitzen Klammern, die Namen richten sich dabei typischerweise nach der Standardbelegung im US-Layout. Hier bezeichnet AB05 die fünfte Taste1 auf der zweiten alphanumerischen Tastenreihe von unten. Es folgt dann wie oben zu sehen die Angabe der Belegung in der Reihenfolge Taste, Taste mit Umschalt, Taste mit Alt Gr und Taste mit Modifikatortaste für Ebene 4. Letztere kann unter Linux frei gewählt werden, bei mir ist es die Feststelltaste, die ich sonst nicht benutzen würde, bei manchen muss man dafür sowohl Umschalt als auch Alt Gr drücken. U266D steht für das Unicode-Zeichen 266D - das ist ♭.

Wenn alle beteiligten Layouts und Varianten nach Belieben angepasst wurden, muss das geänderte Layout noch übernommen werden. Dazu löscht man die Caches:
sudo rm /var/lib/xkb/*.xkm

Anschließend entweder einmal das Layout wechseln und zurückwechseln oder neu anmelden. Die neue Tastenbelegung sollte nun funktionieren. Per Skript aktiviert man mein Beispiel dann so:
setxkbmap de -variant deadgraveacute

Nun noch zu dem eingangs erwähnten Sonderfall mit der Notebooktastatur und der externen Tastatur. Bei meiner Notebooktastatur sind die Tasten Pos1 und Ende nur in Kombination mit der typischen Fn-Taste erreichbar. Das hat mich genervt. Praktischerweise ist das aber eine Hardware-Funktion, die Tastatur sendet in Kombination mit der Fn-Taste einen anderen Tastencode, so dass ich die Belegung mit der gleichen Methode wie oben einfach tauschen konnte.

Dadurch habe ich allerdings auch die normalen Tasten meiner externen Tastatur umbelegt. setxkbmap akzeptiert zwar die Angabe eines Gerätes, auf dass sich die Belegung beziehen soll (mit ID von xinput):
setxkbmap -device 3 de

aber in meinem Fall werden die Tastaturen zu merkwürdigen Virtual Keyboards zusammengefasst, da habe ich noch nicht raus, wie ich es schaffe, beide Tastaturen gleichzeitig mit dem korrekten Layout zu belegen. Bis ich das herausfinde, begnüge ich mich damit, die Belegung zusammen mit dem Monitor zu wechseln, dafür habe ich eh ein Skript auf eine Tastenkombination gelegt.
xrandr --output HDMI-0 --auto && xrandr --output LVDS-0 --off && xrandr --output VGA-0 --off setxkbmap -device 3 de -variant deadgraveacute

Damit habe ich immerhin an der Tastatur, die ich typischerweise zusammen mit dem entsprechenden Monitor verwende, die dafür passende Belegung. Und nun auch mit den Sonderzeichen, die ich gerne einfach eingeben können möchte.

--

Foto von Kecko auf Flickr, lizensiert unter CC-BY-ND 2.0

  1. Auf der amerikanischen Tastatur gibt es die Taste mit den größer- und kleiner-Zeichen nicht.