Verwenden Sie setxkbmap, um die linke Umschalttaste und das linke Steuerelement zu tauschen

17

Ist es möglich , die Linke zu tauschen Shiftund die linken CTRLTasten setxkbmapstatt xmodmap?

BEARBEITEN

Ich bin zu Fcitx gewechselt , das mit meinem Tastaturlayout und der benutzerdefinierten Tastaturbelegung in jeder Hinsicht viel besser funktioniert als IBus. Ich empfehle es sehr.

Tag
quelle

Antworten:

28

xmodmapist obsolet; Also sollte es tatsächlich mit den xkbWerkzeugen gemacht werden.

Der von Ihnen gewünschte Swap scheint standardmäßig nicht in X11-Dateien enthalten zu sein. also musst du es selbst schreiben.

Die Seite http://madduck.net/docs/extending-xkb/ hat mir geholfen, dies zu verstehen und einen Weg zu finden.

Erstellen Sie eine Datei, ~/.xkb/keymap/mykbdin der Sie die Ausgabe setxkbmapablegen. Dies ist Ihre Basis-Tastaturdefinition. z.B:

setxkbmap -print > ~/.xkb/keymap/mykbd

Erstellen Sie anschließend eine Symboldatei, um den Schlüsselaustausch zu definieren, und fügen Sie sie beispielsweise ein ~/.xkb/symbols/myswap

dort setzen Sie die folgenden Zeilen:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

Bearbeiten Sie anschließend die ~/.xkb/keymap/mykbdDatei und ändern Sie die xkb_symbolsZeile, die hinzugefügt werden soll

+myswap(swap_l_shift_ctrl)

Schließlich können Sie es mit laden xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(Sie können nicht "~" für den -IParameter verwenden). Es wird wahrscheinlich eine Menge Warnungen über undefinierte Symbole für einige seltene Schlüssel ausgeben, aber Sie können sie ignorieren (z. B. Fehler an dave umleiten:) 2> /dev/null.

Wenn Sie in der Lage sein möchten, einfach zwischen einem normalen und einem invertierten Strg- / Shift-Modus zu wechseln; Erstellen Sie einfach eine ~/.xkb/keymap/andere Datei ohne die zusätzliche Option "myswap" und laden Sie sie mit xkbcomp. Sie können zwei kleine Skripte erstellen, um sie zu laden.

Pablo Saratxaga
quelle
1
Vielen Dank. Es funktioniert, aber einmal. Das Problem ist, dass ich eine Eingabe-Engine namens IBus verwende. Immer wenn ich die Eingabemethode und dann mit der Tastenkombination "Strg + Leertaste" zurückgeschaltet habe, werden Left Shift und Left Control zurückgeschaltet. Irgendwelche Vorschläge, wie man das vermeidet.
Tag
mmn, vielleicht macht IBus selbst einige Neudefinitionen der Tastatur. Versuchen Sie es xkbcomp $DISPLAY some.dumpnach und vor dem Aufruf von IBus und führen Sie einen Vergleich der beiden Speicherauszüge durch (dies sind vollständige Tastaturdefinitionen). Sie werden wahrscheinlich Unterschiede sehen.
Pablo Saratxaga
Hmm, tut es, wie nervig. Irgendeine Idee, das Problem loszuwerden? Beachten Sie, dass der Befehl setxkbmap -option caps:escapefunktioniert. IBus erinnerte sich an die vertauschten Tasten Esc und Caps_Lock. Dies gilt jedoch nicht für die vertauschten Tasten Left Shift und Left Control.
Tag
Vielleicht hat IBus beim Start die Tastatur gelesen. Versuchen Sie, IBus zu entladen, die Tastatur zu ändern und erneut zu laden. Wenn das Problem weiterhin besteht, sollte eine IBus-spezifische Frage gestellt werden (und möglicherweise ein Fehler gemeldet werden; wenn dies der Fall ist, sollte IBus Tastaturänderungen erkennen und diese
berücksichtigen
Hallo. Kann mir jemand sagen, wie ich die gleiche Technik verwenden würde, um die linke Alt-Taste mit der linken Strg-Taste zu tauschen? Ich habe versucht, die myswap-Datei zu ändern: partial modifier_keys xkb_symbols "swap_l_shift_ctrl" {Ersetze den Schlüssel <LCTL> {[Alt_L]}; Ersetzen Sie die Taste <LALT> {[Control_L]}; }; aber es hat nicht funktioniert. TIA !!!
Neil Girardi
3

Ich bin auf einige Probleme gestoßen, die sich LALTauf die Control_LVerwendung von Pablos Lösung beziehen. Anscheinend müssen Sie auch die modifier_mapOptionen festlegen .

Ich habe eine Vorlage von /usr/share/X11/xkb/symbols/altwin- look for xkb_symbols "ctrl_alt_win"- kopiert und geändert, um die folgenden Änderungen vorzunehmen:

  • LALT-Taste zur Steuerung **
  • LWIN-Taste auf Alt
  • MENU-Taste auf Windows-Taste

Die endgültige ~/.xkb/symbols/myswapDatei war:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

Ich -w0habe den xkbcompBefehl auch erweitert, um eine Warnmeldung beim Öffnen einer neuen Shell zu vermeiden.

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** Wenn ich häufig zwischen Mac und Linux umschalte, möchte ich unter Linux zwei Steuertasten haben, um die Mac-Tastatur für mein Muskelgedächtnis zu approximieren.

Jo-el
quelle