Hallo liebe Leute,
ich habe jetzt einige Zeit mit xmodmap zugebracht und möchte mein erworbenes
Wissen in den Topf werfen um zu sehen was da am Ende herauskommt.Es gibt
viele Ungereimtheiten im Zusammenhang mit xmodmap.
Zu erst mal einige nützliche Informationen:
Ich nutze Ubuntu 11.10, 3.0.0-15-generic-pae und xorg 1:7.6+7ubuntu7
Mein ursprüngliches Problem war, dass ich Zwischen verschiedenen
Tastatur-Layouts mittels Tastandruck hin und her wechseln wollte. Das
kann ich jetzt auch aber dabei habe ich herausgefunden, dass einige
Dinge mit xmodmap nicht wie erwartet funktionieren und andere Dinge
gar nicht. Doch zu erst zu den Dingen die funktionieren. Motivation
ist alles 😉 Dabei wird deutlich wie verwirrend die
Begriffe Group, Level usw. verwendet werden.
Der erste Trick besteht in zwei Einstellungen in System
Settings->Keyboard Layout->Options. Dort habe ich bei
Key to chose 3rd Level : Left_Alt
und bei
Key to chose 5th Level : Right_Alt,locks when pressed together with another 5th level chooser,one press releases lock
ausgewählt.
Nun gebe ich im gnome-terminal
xmodmap -e "keycode 10 = 1 2 3 4 5 6 7 8 9 0"<Enter>
ein. Damit werden dem Key-Code '10' - das entspricht dem Druck der
Taste '1' auf meiner Tastatur - insgesamt 10 verschiedene 'keysyms'
zugewiesen. Das erste 'keysym' ist die '1'. Das heißt bei einem
einfach Druck der '1' auf der Tastatur wird '1' ausgegeben.
Das Programm 'xev' hilft dabei herauszufinden welche Taste welchen
keycode liefert!
Drückt man 'Shift+1', so wird das zweite 'keysym', die '2' ausgegeben.
Hier erscheint bei dem deutschen Standard Keyboard-Layout normalerweise
das Ausrufezeichen'!'
Drücke ich nun 'Alt+1' wird das dritte 'keysm', die '3' ausgegeben,
bei 'Shift+Alt+1', die '4',
bei 'Alt Gr+1', die '5',
bei 'Shift+Alt Gr+1', die '6'.
(Man beachte, dass 'Alt' bei mir die linke Alt-Taste und 'Alt Gr' die rechte Alt-Taste in der Terminologie von 'Settings->Keyboard Layout->Options' ist.)
Soweit so gut. Bis hierher können wir 6 verschiedene Zeichen auf der
Taste '1' ausgeben lassen. Die Levels sind also die einzelnen 'keysym'-Plätze
in der Zeile 'keycode 10 = 1 2 3 4 5 6 7 8 9 0' nach dem Gleichheitszeichen.
Insgesamt gibt es so weit ich es bisher getestet habe '10' Level. Level '1'
ist der Standardlevel. Durch bestimmte Funktionen können die Levels verändert
werden. Mittels der Einstellung 'Settings->Keyboard Layout->Options' für
'Key to chose 5th level' und 'Key to chose 3rd level' sind sind die zwei
Tasten 'Alt' und 'Alt Gr' mit der Funktion belegt worden, bei gehaltener Taste
in den Level '3' bzw. '5' zu wechseln. Die 'Shift'-Taste hat die Funktion
bei gehaltener Taste den aktuellen Level um eins zu erhöhen.
Beispiel: Taste Ergebnis 1 1 normaler Tastendruck in Level 1 Shift+1 2 aktueller Level 1 wird um eins erhöht durch Shift Alt+1 3 linke Alt-Taste wechselt in Level 3 Shift+Alt+1 4 Shift erhöht den Level 3 um eins Alt Gr+1 5 rechte Alt-Taste, Alt Gr wechselt in Level 5 Alt Gr+Shift+1 2 aktueller Level 1 wird um eins erhöht durch Shift
Bei mir ergibt es keinen Unterschied ob ich zu erst die Shift-Taste und
dann die 3rd (oder 5th)-Level-Taste drücke oder zu erst 3rd (oder 5th)-
Level-Taste und dann die Shift-Taste. (z.B. ist Shift+Alt+1 == Alt+Shift+1)
Kommen wir nun zu dem 'Group'-Begriff. Die 10 Levels lassen sich in 5 Gruppen
zusammenfassen. Eine Grupe besteht also aus 2 Levels. Wir haben also bisher
Zugriff auf die ersten drei Gruppen.
In der manpage zu xmodmap
man xmodmap
ließt man, dass die möglichen 'keysym'-Einträge in der Datei
'/usr/include/X11/keysymdef.h'
aufgelistet sind. Dort werden den Positionen der Zeichen in der UTF-16-
Zeichentabelle sinnvolle Namen zugeordnet. Viele Positionen enthalten
keine Zeichen sondern dienen nur bestimmten Funktionen, wie die
Enter-Taste, Space, Shift...
Ab Zeile 520 fangen die Definitionen Für den Zeichensatz Latin 1 ISO/IEC 8859-1 an.
/* * Latin 1\\ * (ISO/IEC 8859-1 = Unicode U+0020..U+00FF) * Byte 3 = 0 */ #ifdef XK_LATIN1 #define XK_space 0x0020 /* U+0020 SPACE */ #define XK_exclam 0x0021 /* U+0021 EXCLAMATION MARK */ ...
Sucht man ausgefallene Zeichen, so hilft das Programm 'gucharmap' weiter. Es
befindet sich in den Ubuntu-Paketquellen. Wählt man dort links 'common' aus,
so findet man rechts die 8859-1 Zeichen. Drückt man 'Strg+F' für Suchen und
sucht nach 0x262F, so müsste man das YingYang-Zeichen finden.
Mit
xmodmap -e "keycode 11 = 2 quotedbl U0262F"
führt die Kombination 'Alt+2' zur Ausgabe des YingYang-Zeichens ☺.
Nun aber zurück zu dem Problem in die anderen beiden Gruppen wechseln zu
können. Dazu verwende ich eine Modifikation des dritten Levels der
'Punkt'-Taste und der 'Komma'-Taste (rechts von 'M' auf meiner Tastatur).
Es kommen die beiden keysym Namen 'ISO_Next_Group' und 'ISO_Prev_Group'
zum Einsatz. Bei 'ISO_Next_Group' wird eine Gruppe hoch gewechselt und
bie ISO_Prev_Group eine Gruppe runter.
xmodmap -e "keycode 59 = comma semicolon ISO_Next_Group ISO_Next_Group ISO_Next_Group ISO_Next_Group ISO_Next_Group ISO_Next_Group ISO_Next_Group ISO_Next_Group" xmodmap -e "109 keycode 60 = period colon ISO_Prev_Group ISO_Prev_Group ISO_Prev_Group ISO_Prev_Group ISO_Prev_Group ISO_Prev_Group ISO_Prev_Group ISO_Prev_Group"
Drückt man nun im Terminal die Taste '1' und dann insgesamt vier mal die
Kombination 'Alt-Gr+Komma+1', so müsste die Zahlenfolge '13791' erscheinen.
Eigenartiger Weise wird der Level 5 übersprungen. Eigentlich müsste, so
dachte ich, nach Level 3 der Level 5 kommen. Bei mir ist das aber nicht der
Fall. Warum nur? Bitte um Feedback!
Ist man bei der letzten Gruppe (Gruppe 5, Level 9) angekommen und geht
noch einen Level weiter hoch, so kommt man wieder bei 1 an. Das Wechseln
der Level nach unten gelingt nun mittels 'Alt-Gr+Punkt'. Auch hier wird
Level 5 übersprungen.
Ich habe jetzt Zugriff auf 10 verschiedene Levels aber der Zugriff ist nicht
einheitlich. Ich komme nun zu Eigenheiten, die ich mir nicht erklären kann.
Xmodmap scheint nur eine vorgegebene Konfiguration der Key-Mappings von xkb
zu ändern. Ob und wie viele Levels eine Taste letztlich haben kann und
welche Funktionen durch einen Tastendruck ausgeführt werden, hängt
von den Grundeinstellungen von xkb ab. Mit xkb kenne ich mich noch nicht gut
aus. Siehe hierzu http://www.freedesktop.org/wiki/Software/XKeyboardConfig
unten die ersten drei Links.
Weiter zu den Absurditäten:
Die keysym Namen
ISO_Level5_Shift -> heißt, wenn Taste gedrückt und gehalten, dann ist man in Level 5 (wie Shift-Taste (Level 1-2)) Level5_Latch -> heißt, wenn Taste gedrückt und losgelassen, so wird einmalig die nächst gedrückte Taste in Level 5 ausgegeben Level5_Lock -> heißt, wenn Taste gedrückt und losgelassen, so wir Level 5 dauerhaft eingestellt, ein Zweiter Druck füht zur Rückkehr zu Level 1 wie Capslock zwischen Level 1-2\\
Funktionieren, wie beschrieben. Die keysam Namen
ISO_Level3_Shift Level3_Latch Level3_Lock
zeigen allerdings keine Wirkung bei mir. Die sind tot. Warum?
Die folgenden keysyms funktionieren bei mir auch nicht:
\\ ISO_Group_Shift ISO_Group_Latch ISO_Group_Lock ISO_Next_Group ISO_Next_Group_Lock ISO_Prev_Group ISO_Prev_Group_Lock ISO_First_Group ISO_First_Group_Lock ISO_Last_Group ISO_Last_Group_Lock
Ich vermute, dass das mit den Grundeinstellungen von xkb zu tun hat.
Wenn eine Taste für eine Funktion nicht vorgesehen ist, dann bringt es
auch nichts hinterher mit xmodmap zu versuchen etwas einzustellen.
Mich würde auch mal interessieren, was genau gnome tut, wenn die Optionen in
der GUI der Keyboard Settings gesetzt werden.
Ich finde es schon traurig, dass man sein Standardeingabegerät derart
umständlich an seine Bedürfnisse anpassen muss. Das ist für mich ein
Mysterium.
Für Anmerkungen und Hinweise bin ich dankbar,
Viele Grüße
Christoph
Moderiert von kaputtnik:
Ins richtige Forum verschoben. BItte beachte die als Wichtig markierten Einträge "Welche Themen gehören hier her und welche nicht" in den jeweiligen Foren. Danke ☺