Wie ordne ich die Feststelltaste dauerhaft dem Esc in X11 zu?

9

Ich möchte die Feststelltaste neu zuordnen, um in X11 zu entkommen (dh das Drücken der physischen Feststelltaste wird von den Anwendungen als esc interpretiert und das Verhalten von esc ändert sich nicht). Die Lösung muss einen X-Neustart überstehen . xmodmap und setxkbmap sind akzeptable Lösungen (ebenso wie ähnliche Programme). Ich möchte mich nicht mit einer grafischen Benutzeroberfläche befassen, da die Lösung portabel und Teil meiner Punktedateien sein soll. Wenn mir eine bessere / einfachere / offensichtlichere Lösung fehlt, sagen Sie es mir bitte. Beachten Sie jedoch, dass ich kein DE verwende (i3wm ausprobieren).

Bisher habe ich versucht, xmodmap und setxkbmap mit wenig Erfolg zu verwenden.

Hier ist mein Versuch, xmodmap zu verwenden:

# ~/.xinitrc
xmodmap ~/.xmodmap

und

# ~/.xmodmap
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Das Ausführen $ xmodmap ~/.xmodmapüber die Befehlszeile funktioniert und macht, was ich will. Das Problem ist, dass dies bei jedem Neustart von x zurückgesetzt wird. Dort erwarte ich, dass xinitrc hereinkommt - sollte es nicht jedes Mal geladen werden, wenn x startet und den Befehl xmodmap ausführt? Wenn der Befehl funktioniert, warum macht er beim Lesen aus einer Datei nichts?

Ich habe ein paar Dinge mit setxkbmap ausprobiert, von denen keines funktioniert hat. Die beiden folgenden Versuche waren zu unterschiedlichen Zeiten in der Datei.

# ~/.xinitrc
setxkbmap -option caps:esc     # attempt 1
setxkbmap -option esc:nocaps   # attempt 2

Keiner der Befehle hat über die Befehlszeile etwas Wahrnehmbares bewirkt, daher gehe ich davon aus, dass ich den Befehl falsch verstanden habe. Ich mag die Idee dieser Lösung, weil sie ein Einzeiler ist und nichts in einer anderen Datei erfordert. Wenn es nur klappen würde.

Ist .xinitrc die falsche Datei? Ich weiß, dass startx von ~ / .xinitrc geladen wird.

Ich fordere, dass mögliche Lösungen die gesamte (n) Datei (en) enthalten, nicht nur eine Zeile (wenn mehr als eine in der Datei erforderlich ist), damit ich keinen Zwischenschritt durcheinander bringe. Wenn ich zum Beispiel etwas in .xinitrc und etwas in .xcapsrebind benötige, zeige bitte beide Dateien und alle erforderlichen Inhalte an (ich kann auch damit umgehen, dass ich aufgefordert werde, etwas an das Ende anzuhängen, aber wenn ein & oder ähnliches erforderlich sein kann, bitte sag mir).

Ethanmad
quelle
2
In .xinitrc:setxkbmap -option caps:escape
Jasonwryan
1
Laufen xmodmapin .xinitrcfunktionieren soll. Es ist was ich tue. Vielleicht etwas Ungewöhnliches zuordnen, um sicherzustellen, dass es tatsächlich läuft, wenn Sie x starten? Welche Fenstermanager- / Desktopumgebung verwenden Sie? KDE „korrigiert“ regelmäßig meine Tastaturbelegung, ohne dass ich es sage. Überprüfen Sie möglicherweise Ihre Desktop-Einstellungen, um sicherzustellen, dass nichts xmodmaphinter Ihrem Rücken läuft .
Yellowantphil
jasonwryan: Versuchte das in beiden .xinitrc; hat nicht funktioniert. Es hat über die Kommandozeile funktioniert! Es gibt also einen Anfang. Ich denke, Yellowantphil hat recht - ~/.xinitrcwird nicht gerannt . Ich benutze gerade i3wm und kein DE, obwohl das gleiche im Pantheon passiert ist, als ich es versucht habe. Soweit ich das beurteilen kann, spielt i3 nicht mit dem xinitrc oder lädt sein eigenes (aber ich bin ein Noob, also was weiß ich?).
Ethanmad
Sie können auch versuchen, Option "XkbOptions" "caps:escape"in eine XTastaturkonfigurationsdatei aufzunehmen, z. B./etc/X11/xorg.conf.d/10-keyboard.conf
don_crissti

Antworten:

5

BEARBEITEN: Wie ein hilfreicher Benutzer betont hat, wird meine ursprüngliche Lösung ein Update nicht überleben. Seine Lösung in den Kommentaren sollte funktionieren. Wenn Sie es vorziehen , Swap - Caps Lock und stattdessen zu entkommen, würde ich empfehlen , die folgenden Befehle das Hinzufügen von entweder .xinitrc oder von i3 config:

.xinitrc:

xmodmap -e "clear lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"

i3-Konfigurationsdatei (normalerweise unter .config / i3 / config oder unter .i3 / config)

# swap caps lock and escape
exec_always --no-startup-id xmodmap -e "clear lock"
exec_always --no-startup-id xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
exec_always --no-startup-id xmodmap -e "keycode 66 = Escape NoSymbol Escape"

Mir ist klar, dass diese Frage ziemlich alt ist, aber ich dachte, ich könnte eine Antwort für diejenigen von uns hinzufügen, die immer noch versuchen, dies herauszufinden.

Nachdem ich ähnliche Probleme mit einigen nicht geladenen DEs hatte ~/.xinitrc, vermied ich xmodmap vollständig, ging zu /usr/share/X11/xkb/symbolsund änderte die Schlüsselzuordnung => direkt.

Dazu habe ich die Konfigurationsdatei für meine Tastatur unter bearbeitet /usr/share/X11/xkb/symbols. Bei den meisten Tastaturen sollte dies die pcDatei sein.

Nach dem Öffnen der Datei habe ich manuell zwischen Escape und Caps_Lock für die jeweiligen Schlüssel gewechselt. Das Ergebnis ist unten dargestellt. Da dies Auswirkungen darauf hat, wie X die Hardware dem Schlüsselsymbol zuordnet, sollte es funktionieren, unabhängig davon, ob Sie GNOME oder i3 oder ähnliches verwenden.

Ein Ausschnitt meiner resultierenden Datei lautet wie folgt:

default  partial alphanumeric_keys modifier_keys

xkb_symbols "pc105" {

    key <ESC>  {        [ Caps_Lock             ]       };

    // The extra key on many European keyboards:
    key <LSGT> {        [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {        [ backslash,    bar     ]       };
    key <SPCE> {        [        space          ]       };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {        [ BackSpace, BackSpace  ]       };

    key  <TAB> {        [ Tab,  ISO_Left_Tab    ]       };
    key <RTRN> {        [ Return                ]       };

    key <CAPS> {        [ Escape                ]       };
    key <NMLK> {        [ Num_Lock              ]       };

    key <LFSH> {        [ Shift_L               ]       };
    key <LCTL> {        [ Control_L             ]       };
    key <LWIN> {        [ Super_L               ]       };

    key <RTSH> {        [ Shift_R               ]       };
    key <RCTL> {        [ Control_R             ]       };
    key <RWIN> {        [ Super_R               ]       };
    key <MENU> {        [ Menu                  ]       };

Das hat für mich wie ein Zauber gewirkt.

Beim Durchsuchen der zugehörigen Dateien fand ich wiederholte Erwähnungen und teilweise Implementierungen einer Art Flag, mit dem bestimmte Schlüssel umgeschaltet wurden, z. B. das Vertauschen von Escape und Caps Lock. Ich gehe davon aus, dass dies das Gnome Tweak Tool und setxkbmap verwenden. Ich konnte jedoch nicht herausfinden, wie diese Flags mit i3 Window Manager aktiviert bleiben sollen. Die obige Lösung sollte gut funktionieren.

Hoffe das behebt das Problem!

Kapsloch
quelle
in Ihrer i3-Konfiguration:exec --no-startup-id setxkbmap -layout whatever -variant whatever -option caps:escape
Quixotic
Beachten Sie, dass Ihre Änderungen an der Systemdatei ...xkb/symbols/pcbeim nächsten Aktualisieren xkeyboard-configoder xkb-dataAktualisieren der Pakete überschrieben werden.
Quixotic
1

Zwei Möglichkeiten:

1) .xinitrcwird nicht ausgeführt - es wird von xinit, startx und einigen anderen Methoden zum Starten von X-Sitzungen verwendet, wird jedoch nicht allgemein unterstützt - Sie verwenden möglicherweise einen Display-Manager, der es nicht ausführt. Wenn Sie .xinitrc etwas hinzufügen, touch /tmp/xinitrc-was-runum festzustellen, ob dies der Fall ist.

2) Xorg wird automatisch auf die Standardeinstellungen zurückgesetzt, wenn keine Clients verbunden sind. Wenn .xinitrc beendet wird, bevor der Fenstermanager oder etwas anderes ausgeführt wird, gehen die Änderungen an xmodmap oder setxkbmap verloren.

Wenn bereits eine XKB-Option definiert ist, die Sie verwenden möchten, anstatt Programme auszuführen, um die Einstellung bei jedem Start von Xorg zu ändern, können Sie Xorg einfach anweisen, bereits mit den richtigen Einstellungen zu starten. Zum Beispiel habe ich eine Datei mit dem Namen installiert, die Folgendes enthält, damit die Tasten Strg-Alt-Rücktaste meinen Xserver beenden können /etc/X11/xorg.conf.d/90-zap.conf:

# This configuration snippet enables the Ctrl-Alt-Backspace server kill key
# 
# To use it, link or copy into /etc/X11/xorg.conf.d/
#
# Note that only the last XkbOptions setting seen for a device will be used,
# so to use multiple options, copy this file and add options into the Option
# string, such as "terminate:ctrl_alt_bksp,ctrl:swapcaps"

Section "InputClass"
    Identifier "keyboard zap by default"
    MatchIsKeyboard "on"

    Option "XKbOptions" "terminate:ctrl_alt_bksp"
EndSection

Weitere Informationen hierzu finden Sie in den X.Org-Dokumenten unter https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html .

alanc
quelle