Zwei Jahre später bin ich endlich stolz darauf, meine eigene Frage zu beantworten.
Ich habe festgestellt, dass die einfachste, zuverlässigste und erweiterbarste Methode darin besteht, sich ausschließlich darauf zu verlassen xmodmap
.
1. Holen Sie sich die Schlüsselcodes der Sondertasten
Führen Sie xev
den Befehl aus, um den Schlüsselcode der Tasten zu bestimmen, die Sie als Modusumschalter verwenden möchten. Drücken Sie dann die Tasten, an denen Sie interessiert sind, und notieren Sie diekeycode
$ xev KeyRelease event, serial 40, synthetic NO, window 0x2600001, root 0x2a6, subw 0x0, time 1221887800, (885,743), root:(3447,805), state 0x2010, keycode 66 (keysym 0xff7e, Mode_switch), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
Der Schlüsselcode befindet sich in der dritten Zeile, Schlüsselcode 66.
Für mich waren dies die Schlüssel, die mich besonders interessierten, und die entsprechenden Schlüsselcodes für mich:
Caps Lock
Schlüsselcode 66Pause|Break
Schlüsselcode 128Left Windows key
Schlüsselcode 133Num Lock
Schlüssel 77
2. Stellen Sie die Umschaltertasten ein
Dies ist das Setup, für das ich mich entschieden habe, aber Sie können Ihr eigenes Setup auswählen. Ich habe dies in einer Datei gespeichert $HOME/.xmodmap
.
~/.xmodmap keycode 66 = Mode_switch keycode 127 = Multi_key keycode 133 = Super_L ...
So kann ich gebunden haben Caps Lock
zu Mode_switch
, Pause Break
zu Compose
und die linke Win
Taste Super_L
. Der Compose
Schlüssel ist besonders nützlich, da zwei Schlüssel zu Ligatur kombiniert werden können. ZB Compose
gefolgt von T
und M
ergibt das Markenzeichen ™
.
3. Aktuelle Tastaturbelegbindungen von erhalten xmodmap
Um mein Tastaturlayout nicht zu zerstören, wollte ich meine Tasten so nahe wie möglich an meinem ursprünglichen Layout halten. Dafür habe ich die aktuelle Keymap ausgedruckt und nach den Keycodes gesucht, die ich ändern wollte.
$ xmodmap -pke | ag 'keycode 51'
Off Natürlich könnte man genauso gut verwenden grep
oder ack
, je nach Werkzeug, das Sie verwenden möchten.
$ xmodmap -pke | grep 'keycode 41' $ xmodmap -pke | ack 'keycode 31'
Die Ausgabe davon hat das gleiche Format wie das, das Sie in Ihrem Format wie folgt angeben ~/.xmodmap
:
keycode 31 = i I i I rightarrow idotless rightarrow idotless i I rightarrow idotless i I rightarrow idotless
4. Sichern Sie Ihre bestehenden xmodmap
Nur für den Fall, dass etwas schief geht, ist es nie eine schlechte Idee, Ihren Strom xmodmap
verfügbar zu haben, auf den Sie leicht zurückgreifen können.
$ xmodmap -pke > ~/.xmodmap.bak
5. Fügen Sie Zeichen zur 2., 3., 4. Ebene Ihrer Schlüssel hinzu
Soweit ich verstanden habe, ist das Format der .xmodmap
Datei so:
keycode <keycode> = <1st level> <Shift+1st> <2nd level> <shift+2nd> <3rd level> <shift+3rd level> <4th level> <shift+4th> ...
Nun, ich verstehe nicht alle Ebenen, aber Mode_Switch
( Caps Lock
in meinem Fall) gibt Ihnen Stufe 2 und Alt Gr
Stufe 3, und das ist so ziemlich alles, was mich interessiert, also habe ich den Rest dieser Linie so belassen, wie er in meiner war ~/.xmodmap.bak
und hat gerade die 3., 4., 5. und 6. Spalte (Level 2 und 3 plus Shift) in gültige Zeichen geändert ( eine Liste der gültigen Zeichen finden Sie hier ).
~/.xmodmap ... keycode 51 = apostrophe asterisk dollar ampersand acute multiply acute multiply apostrophe asterisk acute multiply apostrophe asterisk acute multiply keycode 59 = comma semicolon parenleft parenright dead_cedilla dead_ogonek dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek keycode 60 = period colon bracketleft bracketright periodcentered dead_abovedot periodcentered dead_abovedot period colon periodcentered dead_abovedot period colon periodcentered dead_abovedot keycode 61 = minus underscore braceleft braceright slash backslash braceleft braceright keycode 65 = space space space space space underscore space space ...
6. Testen Sie Ihre .xmodmap
Lassen xmodmap
Sie jetzt .xmodmap
Ihr neues Tastaturlayout ausführen und testen.
$ xmodmap /home/user/.xmodmap
7. Stellen Sie sicher, dass Ihr Tastaturlayout unter x init geladen ist
Ich habe dies zu meinem hinzugefügt $HOME/.xinitrc
:
~/.xinitrc ... [-f $HOME/.xmodmap] && xmodmap $HOME/.xmodmap ...
Ich hoffe das war hilfreich!