Umlaute und Akzente auf ASCII-Tastaturen unter X11
Die Definition zusätzlicher Zeichen, insbesondere deutscher Umlaute, auf Tastaturen unter X11 wird beschrieben.
Einführung
Bei der Benutzung von Tastaturen amerikanischer Herkunft macht sich das Fehlen vieler Schriftzeichen, die nicht in der amerikanischen Sprache vorkommen, sehr störend bemerkbar. Im Deutschen sind das vor allem die Umlaute und das scharfe ß. Unter X11, d.h. an einem X-Terminal oder einem Arbeitsplatzrechner, auf dem ein X-Server läuft, läßt sich nun die Tastatur so umdefinieren, daß die deutschen Zeichen trotzdem eingegeben werden können. Hier wird ein Rezept gegeben, wie man da vorzugehen hat.
Von dieser Schrift gibt es übrigens eine stark gekürzte englische Version.
Warum einfach, wenns auch kompliziert geht?
(Wenn Sie nur ein paar Zeichen zusätzlich auf Ihrer Tastatur haben wollen, können Sie sich diesen Abschnitt mit Hintergrundinformation und alternativen Vorgehensweisen auch sparen.)
Mit dem Zeichensatz Latin1 (Norm ISO 8859-1) ist eine Teilmenge der lateinischen Schriftzeichen definiert worden, die einerseits mit 256 Zeichen auskommt, andererseits aber für viele, vor allem west- und mitteleuropäische Sprachen ausreicht, nämlich für alle germanischen, fast alle romanischen und einige keltische Sprachen sowie für das Albanische, Baskische und Finnische. Im folgenden wird beschrieben, wie die Tastatur eines X-Terminals oder eines Arbeitsplatzrechners, auf dem ein X-Server läuft, um die fehlenden Zeichen des Latin1-Zeichensatzes oder um eine Teilmenge davon ergänzt werden kann.
Das Hauptaugenmerk liegt dabei also auf der Erweiterung von ASCII-Tastaturen um Latin1-Zeichen. Mit denselben Möglichkeiten kann man natürlich auch eine deutsche Tastatur um nichtdeutsche Schriftzeichen erweitern. Außerdem ist die Erweiterung nicht auf den Latin1-Zeichensatz beschränkt, sondern ebenso für andere lateinische und nichtlateinische Schriften möglich - nur wird dann die Darstellung dieser Schriftzeichen auf Bildschirm oder Papier den Einsatz von spezieller Software erfordern. Darauf soll hier nicht weiter eingegangen werden. Mehr findet man in der gedruckten X11-Dokumentation oder im WWW unter den Stichworten ISO 8859, Unicode und Internationalization.
Die X11-Software läßt eine Veränderung der Bedeutung von Tasten an zwei voneinander unabhängigen Stellen zu:
- Die Zuordung einer physisch vorhandenen Taste (die in der Software durch einen numerischen Wert, den Keycode dargestellt wird) zu einem damit gemeinten Schrift- oder Steuerzeichen (dem Keysymbol) läßt sich mit dem Kommando xmodmap frei definieren. Da ein Gerät nur eine Tastatur hat, wirkt diese Zuordnung sofort auf alle Fenster eines X-Servers unabhängig davon, welche Applikation dort läuft.
- Gänzlich unabhängig davon kann für eine Applikation eine bestimmte Interpretation eines Symbols in dieser Applikation vereinbart werden. Das geschieht über die X-Ressourcen dieser Applikation und hat damit denselben Gültigkeitsbereich wie andere X-Ressourcen (also zunächst nur für einen Aufruf dieser Applikation, jedoch mit zahlreichen Möglichkeiten globaler Voreinstellungen).
Für den angestrebten Zweck haben beide Möglichkeiten Vor- und Nachteile. Hier wird nur die erste beschrieben.
Und der Weg zurück?
Sie brauchen keine Sorge zu haben, mit den hier beschriebenen Methoden Ihren X-Server unbrauchbar zu machen. Es ist beschrieben, wie Sie die meisten Einstellungen auch rückgängig machen können, und wenn selbst das nicht mehr hilft: spätestens beim Booten des Terminals oder X-Servers ist alles wieder wie früher. Natürlich sollten Sie nur Dinge in Ihre Konfigurationsdatei einbauen, die vorher schon funktioniert haben; aber selbst da gibt es Rettungsmöglichkeiten.
Zwei Entscheidungen
Wahl der Umschalttaste
Legt man weitere Schriftzeichen auf die Tastatur, so gehen auf jeden Fall andere Schriftzeichen verloren, wenn man nicht den Gesamtvorrat an Schriftzeichen auf der Tastatur erhöhen will. Um dies zu tun, muß man eine Taste für den Zweck reservieren, daß beim gleichzeitigen Drücken dieser Taste mit einer anderen ein anderer Satz von Schriftzeichen gewählt wird. Diese Taste läßt sich auch noch mit der Shift-Taste kombinieren. Wählt man beispielsweise für diesen Zweck die Alt-Taste und legt den Buchstaben ä an dieselbe Stelle wie das a, so könnte man ä als Alt-a und Ä als Shift-Alt-a schreiben. Hier ein paar Vorschläge für die Umschalttaste:
- jede der beiden Alt-Tasten
- nur die linke oder nur die rechte Alt-Taste
- die rechte Ctrl-Taste, die vielleicht auch "Option" heißt
- die CapsLock-Taste
Die Funktion, die die gewählte Taste vorher hatte, büßt sie dabei ein. Das ist das Hauptkriterium für die Auswahl, z.B. wird wird mindestens eine Alt-Taste als Meta-Taste für den Editor emacs gebraucht.
Wahl der Tastatur
Völlig unabhängig von der Wahl der Umschalttaste ist die Wahl der Tastenbelegung. Dabei kann jede Taste mit maximal vier verschiedenen Schriftzeichen belegt werden. Im folgenden wird an drei Beispielen gezeigt, wie man die weiteren Zeichen auf die Tastatur legen kann. Für diese drei Beispiele sind auch die notwendigen Konfigurationsdateien fertig vorbereitet. In den Diagrammen ist links unten auf jeder Taste dargestellt, welches Schriftzeichen beim Drücken der Taste allein erzeugt wird, darüber das bei der Kombination mit der Shift-Taste erzeugte und rechts von beidem das, was bei der zusätzlichen Kombination mit der gewählten Umschalttaste entsteht.
Beispiel 1: Mnemotechnische Tastaturbelegung auf ASCII-Grundlage
Die Idee ist, daß alle Tasten ihre bisherige Bedeutung behalten, wie sie auch der Beschriftung entspricht. Möglichst viele zusätzliche Zeichen werden über die Umschalttaste angesprochen. Die Verteilung dieser zusätzlichen Zeichen über die Tastatur geschieht so, daß man sich die Lage merken kann, dafür werden nationale Gepflogenheiten völlig außer acht gelassen.
Die Verteilung der (meisten) Zeichen des Zeichensatzes ISO 8859-1, der überwiegend aus Vokalen mit Akzenten besteht, auf eine Tastatur, die überwiegend Konsonanten enthält, ist hier wie folgt vorgenommen worden:
- Die Umlaute kommen auf die Basisvokale und das scharfe ß auf das s. Aus Konsistenzgründen kommen auch die mit Trema versehenen anderen Vokale auf die entsprechenden Basisvokale.
- Vokale mit Akut-Akzent oder mit Gravis-Akzent kommen auf die Taste rechts oberhalb (bzw. rechts unterhalb) des Basisvokals.
- Vokale mit Zirkumflex-Akzent kommen auf eine noch freie Taste in der Nähe des Basisvokals; das geht leider nicht mehr ganz systematisch.
- Die übigen Zeichen werden sinnreich verteilt.
Das Ergebnis sieht dann so aus:
~ ° ` ° |
! ¼ 1 ¹ |
@ ½ 2 ² |
# ¾ 3 ³ |
$ É 4 é |
% % 5 5 |
^ ® 6 © |
& Ý 7 ý |
* Ú 8 ú |
( Í 9 í |
) Ó 0 ó |
_ ¬ - ÷ |
+ ± = ± |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Q Â q â |
W Á w á |
E Ë e ë |
R Ê r ê |
T Î t î |
Y ÿ y ÿ |
U Ü u ü |
I Ï i ï |
O Ö o ö |
P Ô p ô |
{ Æ [ æ |
} Ø ] ø |
| Å \ å |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A Ä a ä |
S § s ß |
D È d è |
F Ð f ð |
G Þ g þ |
H Û h û |
J Ù j ù |
K Ì k ì |
L Ò l ò |
: : ; ; |
" " ' ' |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Z À z à |
X × x × |
C Ç c ç |
V Ã v ã |
B Õ b õ |
N Ñ n ñ |
M µ m µ |
< « , ¸ |
> » . · |
? ¿ / ¡ |
Beispiel 2: Deutsche Tastaturbelegung
Eine deutsche Tastatur soll möglichst genau approximiert werden. Ganz geht es nicht, weil manche Tastaturen eine Taste mehr oder weniger in einer Reihe haben. Diese Belegung ist nur für Benutzer brauchbar, die blind schreiben; andernfalls verwirrt die Beschriftung der Tasten. Das Ergebnis sieht dann so aus:
° ° ^ ^ |
! ¹ 1 ¹ |
" ² 2 ² |
§ ³ 3 ³ |
$ $ 4 4 |
% % 5 5 |
& & 6 6 |
/ { 7 { |
( [ 8 [ |
) ] 9 ] |
= } 0 } |
? \ ß \ |
` ´ ´ ´ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Q @ q @ |
W W w w |
E E e e |
R R r r |
T T t t |
Z Z z z |
U U u u |
I I i i |
O O o o |
P P p p |
Ü Ü ü ü |
* ~ + ~ |
' ' # # |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A A a a |
S S s s |
D D d d |
F F f f |
G G g g |
H H h h |
J J j j |
K K k k |
L L l l |
Ö Ö ö ö |
Ä Ä ä ä |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Y Y y y |
X X x x |
C C c c |
V V v v |
B B b b |
N N n n |
M µ m µ |
; <<BR>, <</TT> | : > . > |
_ | - | |
Beispiel 3: Deutsch-amerikanische Hybridtastatur
Hier ist versucht worden, zwar die Buchstaben und die wichtigsten Satzzeichen (nämlich die rechts unten liegenden sowie das Fragezeichen) wie in der deutschen Tastatur liegen zu haben, diejenigen Sonderzeichen aber, bei denen man doch gerne auf die Tastenbeschriftung schaut, an ihrer amerikanischen Stelle zu belassen. Diese Belegung ist für Benutzer brauchbar, die im Prinzip blind schreiben, sich aber über die Lage seltener Sonderzeichen nicht immer klar sind. Das Ergebnis sieht dann so aus:
~ ~ ` ` |
! ! 1 1 |
@ @ 2 2 |
# # 3 3 |
$ $ 4 4 |
% % 5 5 |
^ ^ 6 6 |
& { 7 { |
* } 8 } |
( [ 9 [ |
) ] 0 ] |
? ? ß ß |
+ + = = |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Q Q q q |
W W w w |
E E e e |
R R r r |
T T t t |
Z Z z z |
U U u u |
I I i i |
O O o o |
P P p p |
Ü Ü ü ü |
" " ' ' |
| \ / \ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A A a a |
S S s s |
D D d d |
F F f f |
G G g g |
H H h h |
J J j j |
K K k k |
L L l l |
Ö Ö ö ö |
Ä Ä ä ä |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Y Y y y |
X X x x |
C C c c |
V V v v |
B B b b |
N N n n |
M µ m µ |
; <<BR>, <</TT> | : > . > |
_ _ - - |
Sieben Schritte
Retten Sie Ihre jetzige funktionierende Tastatur
Bevor Sie irgendetwas verstellen, geben Sie das Kommando
xmodmap -pke > datei
und heben Sie die Datei datei auf. Mit dem Kommando
xmodmap datei
bekommen sie dann Ihre jetzige Tastaturbelegung zurück, wenn etwas schiefgegangen ist. Voraussetzung ist natürlich, daß Sie wenigstens dieses Kommando noch eintippen können. Wichtig: Geben Sie dieses Kommando auch jeweils zwischen mehrerenVersuchen, die Tastatur umzustellen, um die Situation zu normieren.
Leider können Sie die Modifier-Tabelle (also die Tabelle derjenigen Tasten, die als Shift-, Control- oder eben Zeichensatz-Umschalt-Taste wirken) nicht so leicht wiederherstellen. Sie können sie zwar vor der Umstellung mit dem Kommando
xmodmap -pm > datei
in lesbarer, jedoch auf keine Weise in als Direktiven verwendbarer Form in eine Datei ausgeben.
Besorgen Sie sich die xmodmap-Direktiven für die Wahl der Umschalttaste
Die bequeme Methode
Die Direktiven, mit denen Sie die Umschalttaste festlegen, finden Sie fertig in einer Datei, die Sie erhalten, wenn Sie oben unter der Überschrift "Wahl der Umschalttaste" eine der Auswahlmöglichkeiten anklicken. Die Anweisungen, die gleich im Anschluß als "wissenschaftliche Methode" angepriesen werden, brauchen Sie dann nicht zu befolgen.
Die wissenschaftliche Methode
Geben Sie das Kommando
xmodmap -pm
Das Ergebnis könnte beispielweise so aussehen (die Bezeichnungen in der linken Spalte heißen Modifier):
shift Shift_L (0x12), Shift_R (0x59) lock Caps_Lock (0x11) control Control_L (0x14), Control_R (0x58) mod1 Alt_L (0x19), Alt_R (0x39) mod2 Super_L (0x8b), Super_R (0x8c) mod3 mod4 Num_Lock (0x76) mod5
Jetzt suchen Sie sich die Taste aus, die die Umschalttaste werden soll. Wahrscheinlich kennen Sie die Tasten am Namen; falls nicht, können Sie mit dem Kommando xev ausprobieren, welche Taste welchen Keycode erzeugt. Im Beispiel wählen wir die rechte Ctrl-Taste (die mit dem Namen Control_R) aus. Der entsprechende Modifier wird mit folgender Direktive (nicht eintippen, nur merken!) zunächst unschädlich gemacht:
clear control
Dann soll die Taste ihre Funktion als Ctrl-Taste verlieren und stattdessen Umschalttaste werden:
keysym Control_R = Mode_switch
Da die Funktion der Ctrl-Taste nicht ganz wegfallen soll, muß sie erneut definiert werden, diesmal nur für die verbliebene linke Ctrl-Taste:
add control = Control_L
und die Taste Mode_switch muß auf einem der Modifier mod1, . . . , mod5 liegen, z.B.
clear mod3
add mod3 = Mode_switch
Alle diese Direktiven schreiben Sie in eine Datei und bewahren sie auf.
Besorgen Sie sich die xmodmap-Direktiven für die Wahl der Tastatur
Klicken Sie eine der drei Varianten an, die oben beschrieben wurden:
- Mnemotechnische Tastaturbelegung auf ASCII-Grundlage
- Deutsche Tastaturbelegung
- Deutsch-amerikanische Hybridtastatur
Vergleichen Sie Ihre Tastatur mit der aus den Beispielen
Wenn es so ist, daß Ihre Tastatur genausoviele Tasten hat wie die Beispiele oben und die Tastenbelegung der des ersten Beispiels (jeweils linke Hälfte jeder Taste) entspricht, dann haben sie Glück gehabt und Sie brauchen gar nichts zu tun.
Andernfalls lernen Sie aus der zuletzt besorgten Datei, wie die Umstellung einzelner Tasten notiert wird und passen Sie diese Datei an Ihre Verhältnisse an. Verwirrend kann dabei sein, daß die neue Tastenbelegung relativ zur alten definiert wird, also nicht "Die Taste in der Mitte der zweiten Zeile ist das z" sondern "Die Taste, wo jetzt das y ist, ist das z". Es geht auch anders (schauen Sie dazu in die im allerersten Schritt erzeugte Datei und lesen Sie die Erläuterungen im Anhang); das ist aber so hochgradig vom Fabrikat und Modell der Tastatur abhängig, daß man es nicht für jeden Typ vorkonfigurieren könnte.
Definieren Sie Ihre Tastatur um
Schreiben Sie die beiden oben besorgten Direktivensätze hintereinander in eine Datei datei und geben Sie dann das Kommando
xmodmap datei
Damit wird Ihre Tastatur umgestellt.
Achten Sie auf Ihre übrige Umgebung
Ihre Tastatur ist jetzt erfolgreich umgestellt. Das bedeutet, daß jede Applikation, die mit der Notwendigkeit rechnet, Nicht-ASCII-Zeichen ein- oder ausgeben zu müssen, das auch ohne applikationsspezifische Konfiguration kann. Das heißt nicht, daß Ihre übrige Software-Umgebung damit zurechtkommt. Auf drei Dinge sind besonders zu achten:
- Der Zeichensatz (Font) bei der Ausgabe muß die Zeichen darstellen können, und es darf keine Überraschungen geben, was die Codierung der Zeichen im Font angeht. Wenn Sie bei der Auswahl des Fonts (über die entsprechenden X-Ressourcen) darauf achten, daß der Font-Name die Zeichenreihe "-iso8859-1" enthält, dürfte wenigstens für den hier beschriebenen Fall, daß nämlich alle Zeichen aus dem Latin1-Zeichensatz sind, nichts schiefgehen.
- Zahlreiche Applikationen werden über Environment-Variable gesteuert, was die zu verwendende Sprache und den Zeichensatz angeht. Es ist die Variable "LANG" sowie weitere Variable, deren Name mit "LC_" anfängt. Leider sind zwar die Namen dieser Variablen, nicht aber die erlaubten Werte genormt. Näheres siehe in der FAQ on internationalization (i18n).
- Für das Fenster (meist xterm), in dem die Shell ihre Standardein- und ausgabe macht, sind manchmal Einstellungen getroffen, aufgrund derer Nicht-ASCII-Zeichen nicht richtig dargestellt werden. Falls das der Fall ist, sollte das Kommando
stty cs8 -istrip
helfen. Leider müßte es in jedem neuen xterm-Fenster erneut gegeben werden. Wer sichergehen will, kann das Kommando xterm in eine Kommandoprozedur verpacken, die sich darum kümmert, wie in diesem Beispiel.
Ob dieses Kommando nötig ist, hängt sehr stark vom Betriebssystem, von der Shell, von den durchlaufenen Prologen und anderem ab. Bevor man da zuviel Arbeit investiert, kann mans ja erst einmal "darauf ankommen lassen". Verwendet man zur Eingabe von Texten einen Editor, der ein eigenes Fenster unter X11 eröffnet, z.B. emacs oder xedit, so genügt meist eine korrekte Ausgabe; wer gibt schon Texte mit cat statt mit einem Editor ein?
Sehr viel mehr Information zu Software-Umgebungen, in denen die Verarbeitung nicht-englischer Texte möglich ist, findet man in der FAQ on internationalization (i18n) und in den Artikeln, auf die dort verwiesen wird. (Die "18" steht für die achtzehn im Wort "internationalization" weggelassenen Buchstaben, was insofern ein Beitrag zur Internationalisierung ist, als "I18N" sowohl "internationalization" als auch "internationalisation" heißen könnte; damit sind so unterschiedliche Sprachen wie das Amerikanische und das Britische vereint.)
Bauen Sie die obigen Kommandos in Ihre Konfiguration ein
Soweit Sie diese Schritte automatisieren wollen, gehören sie in die Datei .xsession (bzw. .xinitrc), die beim Aufbau einer X-Sitzung durchlaufen wird. Das wären also die folgenden Kommandos:
echo $DISPLAY > $HOME/.Xdisplay | nur falls für die obige Kommandoprozedur rund um xterm gebraucht |
xmodmap -v -pke > $HOME/.keyboard.orig.xm | um die ursprüngliche Tastaturbelegung wiederherstellen zu können |
xmodmap $HOME/.keyboard.xm | mit der oben erzeugten Datei mit xmodmap-Direktiven |
Denken Sie auch daran, daß Sie solche Kommandos in bedingte Anweisungen, z.B. in eine case-Anweisung der Bourne-Shell, einbauen müssen, wenn Sie nur für einen Teil der von Ihnen benutzten X-Server gelten, etwa weil Sie neben einem X-Terminal auch einen PC mit einer unterschiedlichen Tastatur benutzen.
Anhang: Vertauschte Steuertasten
Dieser Anhang hat eigentlich nicht viel mit dem Rest des Artikels zu tun. Es geht hier aber ebenfalls um Tastenbelegungen von X-Terminals und deren Änderung mit dem Kommando xmodmap; insofern gibt es doch einen Zusammenhang.
An manchen X-Terminals stimmt die Beschriftung von Steuertasten nicht mit deren tatsächlicher Funktion überein. Das ist vor allem dann der Fall, wenn das Gerät (Basis, Tastatur und Bildschirm) aus Komponenten unterschiedlicher Hersteller zusammengesetzt ist, die nicht richtig aufeinander abgestimmt sind. Prüfen Sie in einem solchen Fall zunächst, ob man nicht beim Booten des Terminals eine Option hat, die Steuertasten richtig einzustellen.
Besonders häufig sind die CapsLock- und die linke Ctrl-Taste, die sich oberhalb und unterhalb der linken Shift-Taste befinden, miteinander vertauscht. Wer das praktisch findet, kann es problemlos so lassen. Um aber gegebenenfalls die Tasten zu vertauschen, geht man so vor:
Man gibt das Kommando
xmodmap -pke
und sucht sich aus der Ausgabe die beiden Zeilen heraus, wo die beiden Tasten definiert sind, z.B.
keycode 17 = Caps_Lock
keycode 20 = Control_L
Schreibt man jetzt in eine Datei diese beiden Direktiven andersherum und fügt Direktiven an, mit denen die betroffenen Modifier gelöscht und neu definiert werden, also
keycode 17 = Control_L
keycode 20 = Caps_Lock
clear lock
add lock = Caps_Lock
clear control
add control = Control_L
add control = Control_R
so lassen sich mit einem Aufruf von xmodmap, dem diese Datei als Eingabe mitgegeben wird, die beiden Tasten vertauschen. Man hätte die beiden ersten Zeilen auch einfacher schreiben können:
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
Der Unterschied ist der, daß die erste Variante immer dasselbe Resultat zeitigt, während die zweite bei jedem Aufruf die beiden Tasten erneut miteinander vertauscht, da sie die Keycode-Werte aus der dann gerade aktuellen Tastenbelegung ermittelt. Chacun à son goût.
Die zweite Variante funktioniert deswegen, weil die Tasten, die gemeint sind, vor irgendeiner Änderung ermittelt werden. Welche Taste das "Caps_Lock" in der zweiten Zeile bezeichnet, wird also ermittelt, bevor die Direktive in der ersten Zeile tatsächlich ausgeführt wird. Daraus ergibt sich, daß Sie die Direktiven zur Vertauschung von Steuertasten nicht in dieselbe Datei mit xmodmap-Direktiven schreiben sollten wie die Definition der Umschalttaste - sonst könnten Sie die Umschalttaste auf eine Taste legen, die inzwischen schon woanders ist. Gehen Sie also mit mehreren xmodmap-Kommandos schrittweise vor.