Die folgende Lösung ist barbarisch, aber sie funktioniert (vorausgesetzt, Sie sind mit einer Level3-Latch statt einer Level3-Shift zufrieden) - der Unterschied besteht darin, dass bei letzterer alle Tasten gleichzeitig gedrückt werden müssen, bei der ersteren zuerst LeftCtrl+ drücken LeftAlt, loslassen und erst dann die zu schaltende Taste drücken) und root nicht erforderlich.
setxkbmap -option grp:lctrl_lalt_toggle xmodmap -e 'keycode 37 = Control_L ISO_Level3_Latch' xmodmap -e 'keycode 64 = Alt_L ISO_Level3_Latch'
Erklärung, wie das funktioniert:
Die xkb grp: lctrl_lalt_toggle Option macht LeftCtrlVerschiebung LeftAltzu Level2 und umgekehrt (siehe: /usr/share/X11/xkb/symbols/group
). Dadurch wird auch die Ebene2 von LeftCtrlund LeftAltzu ISO_Next_Group verschoben, was unerwünscht ist, da dies ISO_Level3_Latch sein soll. Daher verwenden wir xmodmap, um die Ebene2 in ISO_Level3_Latch für beide LeftCtrlund LeftAlt(während Level1 als Control_L und Alt_L beibehalten wird) zu ändern. Die Schlüsselcodes (37 und 64) können entweder durch Überprüfen der Ausgabe von xmodmap -pke
oder durch Verwendung von gefunden werden xev
.
Wenn wir nur die xmodmap-Neudefinitionen (ohne setxkbmap
vorherige Verwendung ) anwenden, wäre der Schlüssel, der für die Verschiebung der Ebene 2 verantwortlich ist Shift, wie für fast alle Schlüssel, sodass sowohl Shift+ LeftCtrlals auch Shift+ LeftAlt(aber nicht LeftCtrl+ LeftAlt) zu Level3-Latches werden.
Warum müssen wir eine Level3-Latch statt einer Level3-Schicht verwenden?
Wenn Sie ISO_Level3_Shift anstelle von ISO_Level3_Latch verwenden würden, müssten Sie gleichzeitig LeftCtrl+ LeftAlt+ drücken YourDesiredKey, damit die Level3-Schicht auftritt. Unglücklicherweise sind LeftCtrlund LeftAltbleiben immer noch Modifizierer. Abgesehen davon, dass YourDesiredKey korrekt verschoben wurde, würde es auch von Alt oder Ctrl (abhängig davon, was Sie zuerst gedrückt haben) "geändert". Mit der Verriegelung haben Sie dieses Problem nicht.