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.

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.