Wie bekomme ich unter X ein deutsches Tastaturlayout

Man merkt LinuxPPC & Co. deutlich an, das sie vor allem im mden USA entwickelt werden (was auch am geringer Marktanteil des Macs hierzulande im Vergleich zu den USA liegt). Daher sind keine deutschen Tastaturlayouts vorgesehen und auch der Mechanismus von KDE scheint nicht zu funktionieren. Zum Glück kann man sich aber eigene Layouts basteln. :-)

xmodmap nutzen

Dazu nutzt man das Kommando xmodmap. Mit diesem Kommando kann jeder User für sich (und auf eigene Verantwortung) ein eigenes Tastaturlayout laden. Dazu müssen aber einige Voraussetzungen zu gegeben sein. Wenn man sich mit kdm oder xdm[1] (ob der gdm auch geht weiss ich nicht) einloggt, sollte es aber alles stimmen (siehe mehr dazu weiter unten). Für die ungeduldigen hier eine Schnellanleitung:

  1. Ein Layout unten aussuchen und downloaden
  2. Die downgeloadete Datei in .Xmodmap umbennen und im Homeverzeichnis ablegen
  3. Neu einloggen oder die Datei mit dem Shell-Kommando
    xmodmap ~/.Xmodmap oder cd ; xmodmap .Xmodmap
    aktivieren. Der letztere Variante geht auch, wenn man sein X mit startx startet

Voraussetzugen

Zunächst muss man sicherstellen, dass Kommando beim einloggen auch ausgeführt wird. Je nach login-Prozdure , sollte dies entweder in /etc/X11/xinit/xinitrc oder in /etc/X11/xdm/Xsession geschehen. In diesen Dateien sollte sich etwa folgendes relativ weit am Anfang finden:

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
    xrdb -merge $sysresources
fi

if [ -f $sysmodmap ]; then
    xmodmap $sysmodmap
fi

if [ -f $userresources ]; then
    xrdb -merge $userresources
fi

if [ -f $usermodmap ]; then
    xmodmap $usermodmap
fi
    

Wenn nicht sollte dies unter root ergänzt werden. Bei Einloggen mit dem kdm oder mit xdm reicht es i.d.R. aus /etc/X11/xdm/Xsession zu überpr&uum;fen.

Nun kann man entweder sich eine eigenes Layout basteln oder man nimmt eine vorgefertigtes, wie z.B. eines der unten angegebenen.

Keycodes herausfinden

Als nächstes muss man die keycodes der einzelenen Tasten bestimmen. Man kann sich dabei auf dies Tasten beschräncken, die man ändern möchte.

Zunächst startet man das Programm xev in einem Terminalfenster. Dieses Programm öffent ein kleines Fenster, ind as nun die Maus rein bewegt wird. Wenn man nun eine Taste drückt, erscheint im Terminalfenster eine Mdelung, wie die folgende (es erscheinen massig verschiedene Meldungen, uns interessieren aber nur die nach einem Tastendruck):

      KeyPress event, serial 27, synthetic NO, window 0x6400001,
          root 0x25, subw 0x0, time 3212830677, (176,175), root:(606,648),
          state 0x0, keycode 8 (keysym 0x61, a), same_screen YES,
          XLookupString gives 1 characters:  "a"

      KeyRelease event, serial 30, synthetic NO, window 0x6400001,
          root 0x25, subw 0x0, time 3212830797, (176,175), root:(606,648),
          state 0x0, keycode 8 (keysym 0x61, a), same_screen YES,
          XLookupString gives 1 characters:  "a"
    

In der jeweils 3. Zeile steht der Keycode. In der 4. Zeile wird das Zeichen angezeigt, dass ausgegeben würde. Diese Keycodes notiert man sich nun.

Für die Apple USB-Tastatur, wie sie in Deutschland ausgeliefert wird (z.B. beim iMac, Yosimite oder PowerMac G4) habe ich die Keycodes in einer Tabelle abgelegt, die ihre euch hier herunterladen könnt.

Wir basteln eine Xmodmap-Datei

Zur Sicherheit sollte man nicht gleich die Date ~/.Xmodmap editieren, sondern erst mal eine anders beannte Datei (z.B. .Xmodmap.test).

Die Xmodmap-Datei muss nicht fuer alle Tasten eine Übersetzung enthalten. Da ja schon vorher eine Layout esxistiert, reicht es nur seine Änderungen reinzuschreiben. Also Vorlage kann man aber auch die aktuelle Xmodmap (allerdings ohne die modifier-bindings) abfragen und das ganze in eine Datei packen (z.B. Xmodmap.vorlage):

> xmodmap -pke > Xmodmap.vorlage
      
Guckt man nun in Xmodmap.vorlage rein, so sieht man, dass eine Xmodmap-Datei vor allem aus Zeilen wie der folgenden besteht:
  keycode   8 = a A
      
Hier wird das 'a' auf die Taste mit dem Keycode 8 gebunden und das 'A" aufg dieselbe Taste bei gedrückter Shift-Tatste. Man kann bis zu vier "Symbole" auf eine Taste legen:
  keycode  34 = 7 slash       bar          backslash
      
Damit aber die zweiten beiden Symbole auch wirklich erzeugt werden, muss einer der modifizierenden Tasten (also Ctrl,Shift,Alt oder Apfel) die Funktion Mode_Switch zugeordnet werden:
  keycode  63 = Mode_switch
      
Nun ist diese Taste (genauer der Keycode der Taste) schon an eine Modifiziererfunktion gebunden. Diese muss daher am Ende gelölscht und neu eingerichtet werden. Bei Alt und Apfel ist dies mod1:
  clear mod1
  add Mod1 = Alt_L Meta_L
      
Hier werden die Tasten mit dem Symbol 'Alt_L' oder 'Meta_L' als erster Modifizierer (nach Shift und Control). Das Linux keine getrennte Funktionalität von Alt und Apfel (=Command) kennt, sollte man eine der beiden als Alt/Command-Taste (also als mod1) und die andere als Mode_switch nutzen.

Um nun das frisch editierte Layout zu testen, aktibiert man es mit:
> xmodmap .Xmodmap.test
Der Name der Xmodmap-Estdatei muss ggfs. angepasst werden. Nun kann man das neue Layout testen. Allerdings verstehen nicht alle X-Programme deutsche Umlaute. die Terminals unter KDE tun sich z.B. schwer. Gut funktionieren tun sie aber z.B. im Xemacs. Mit dem bereits oben erwähnten Program xev kann man testen, ob das X selbst das neue Layout akzeptiert hat. Wenn hier nicht die richtigen keysrmbols erscheinen. Ist etwas schief gegangen.

Wie soll man aber deutsche Umlaute in der Xmodmap-datei eingeben, ohne dass man sie bereits auf der Tastatur hat?
Nun es würde auch nichts nützen sie auf der Tastatur zuhaben. Im Gegensatz zu den 26 Buchstaben, des Standardalphabetes haben, längere Namen. Die meisten findet man heraus, wenn man - wie oben beschrieben - die aktuelle Xmodmap abfragt. Die wichtigsten die nun noch für ein deutsches Layout fehlen sind:

  "Buchstabe"   Name in der Xmodmap 
ä   adiaeresis
ö   odiaeresis
ï   udiaeresis
Ä   Adiaeresis
Ö   Odiaeresis
Ü   Udiaeresis
ß   ssharp
§   section

Da immer das zuletzt erzeugte Layout modifiziert kann es passieren, dass sich Änderungen angehäft haben, die sich aber nicht mehr in der letzten Version der Xmodmap-Datei finden. Deshalb sollte man sich bevor amn seine Test-Datei umbenennt neu einloggen und die die Datei mit einem letzten > xmodmap .Xmodmap.test testen.
Wenn jetzt alles gutgegangen ist, kann man die datei in .Xmodmap umbenennen und beim nächsten einloggen, hat amn automatsiche sein eignes Layout.

Meine Tastaturlayouts

Für alle die zu faul sind ( ;-) ) sich dieser Totur zu unterziehen, habe ich drei Xmodmap-Dateien für die Apple-USB-Tastatur vorbereitet, die an sich hier herunterladen kann (Layouts für die Apple-ADB-Design-Tastatur sind in Arbeit):

  1. ein minimale Xmodmap.
    Diese korrigiert lediglich eine bug im amerikanischen Layout beim Verwendung einer deutschen USB-Tastatur (die '\|'-Taste hat offenbar in den USA einen anderen keycode) und fügt auf Shift-Home die Funktion End ein.
  2. ein Xmodmap mit deutschem Layout:
    Bei diesem Layout sind alle Zeichen, die auch auch auf der amerikanischen Tastatur finden, umgelegt. Zusätzlich wurden noch die Umlaute, das ß und das § hinzugefügt.
  3. mein deutsch/amerikanisches Layout:
    Diese Layout entspricht dem amerikanischen bis auf zwei Ausnahmen. Zum einen wurden die oben erwähnten Korrekturen vorgenommen. Zum anderen wurden die die Umlaute, das ß und das § auf einer zweiten Tastaturebe hinzugefügt. Diese Zeichen liegen damit auf denselben Tasten, wie auf der deutschen Tastatur, aber eben in der zweiten Ebene.
    Diese Layout stellt einen Kompromiss zwischen dem für Linux praktischeren amerikanischen Layout und dem bedarf anch Umlauten dar.
  4. Und das ganze zusammen in einem tar.gz-Archiv für alle die, die alles auf einmal wollen.

Eine Übersicht der Layouts zusammen mit einer Auflistung der keycode gibt es hier.

Nachdem man diese Dateien heruntergeladen hat, sollte man sie mit
> xmodmap Xmodmap.xyz testen. Wenn dann alles O.K. ist kann man sie mit
> mv Xmodmap.xyz .Xmodmap aktivieren. Für die Korrektheit dieser Dateien übernehme ich keine Garantie!

Demnächst will ich das ganze auch auf das Tastaurlayout auf den Textconsolen übertragen.


Anmerkungen

  1. xdm ist der Displaymanager des ursprünglichen X. Der Displaymanager (Loginmanager wäre wohl passeder) ist der Dialog (und das drumherum) bei dem man sich bei laufendem X am Rechner amdeldet. KDE und GNOME haben modenere Varianten davon geschaffen (die oben erwähnten kdm und gdm).

Rüdiger Goetz
Last modified: Thu Dec 7 20:59:00 CET 2000