Come rimappare permanentemente il blocco maiuscole in esc in X11?


9

Voglio rimappare il blocco maiuscole per uscire in X11 (ovvero premendo il pulsante di blocco maiuscole fisico verrà interpretato come esc dalle applicazioni e il comportamento di esc non cambierà). La soluzione deve sopravvivere un riavvio X . xmodmap e setxkbmap sono soluzioni accettabili (così come programmi simili). Non voglio avere a che fare con una GUI, perché voglio che la soluzione sia portatile e che faccia parte dei miei dotfile. Se mi manca una soluzione migliore / più semplice / più ovvia, per favore dimmelo, ma nota che non sto usando un DE (provando i3wm).

Finora ho provato a usare xmodmap e setxkbmap con scarso successo.

Ecco il mio tentativo di utilizzare xmodmap:

# ~/.xinitrc
xmodmap ~/.xmodmap

e

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

In esecuzione $ xmodmap ~/.xmodmapdalla riga di comando funziona e fa quello che voglio. Il problema è che questo viene ripristinato ogni volta che x si riavvia. È lì che mi aspetto che entri xinitrc - non dovrebbe caricarsi ogni volta che x si avvia ed eseguire il comando xmodmap? Se il comando funziona, perché non fa nulla quando viene letto da un file?

Ho provato un paio di cose con setxkbmap, nessuna delle quali ha funzionato. I due tentativi seguenti sono stati nel file in momenti separati.

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

Nessuno dei due comandi ha fatto nulla di percepibile dalla riga di comando, quindi presumo di aver sbagliato il comando. Mi piace l'idea di questa soluzione perché è un one-liner e non richiede nulla in qualche altro file. Se solo avesse funzionato.

.Xinitrc è il file sbagliato da utilizzare? So che startx si sta caricando da ~ / .xinitrc.

Chiedo che le possibili soluzioni contengano l'intero file, non solo una riga (se nel file ne è richiesta più di una), quindi non confondo alcuni passaggi intermedi. Ad esempio, se ho bisogno di qualcosa in .xinitrc e qualcosa in .xcapsrebind, ti preghiamo di mostrare sia i file che tutti i contenuti richiesti (posso anche gestire la richiesta di aggiungere qualcosa alla fine, ma se può essere richiesto un & o simile, dimmelo, ti prego).


2
In .xinitrc:setxkbmap -option caps:escape
jasonwryan,

1
Esecuzione xmodmapin .xinitrcdovrebbe funzionare. È quello che faccio. Forse mappare qualcosa di insolito, per assicurarsi che sia effettivamente in esecuzione quando si avvia x? Inoltre, quale gestore di finestre / ambiente desktop usi? KDE "corregge" periodicamente la mia mappatura della tastiera senza che me lo dica. Magari controlla le impostazioni del tuo desktop per assicurarti che non ci sia nulla xmodmapdietro la schiena.
Yellowantphil,

jasonwryan: Ho provato che in entrambi .xinitrc; non ha funzionato. Ha funzionato dalla riga di comando! Quindi c'è un inizio. Penso che il yellowantphil abbia ragione-- ~/.xinitrcnon si stia scappando . Sto usando i3wm e nessun DE in questo momento, anche se la stessa cosa stava succedendo in Pantheon quando ho provato. Per quanto ne so, i3 non scherza con xinitrc né carica il suo (ma io sono un noob, quindi cosa ne so?).
Ethanmad,

Puoi anche provare a includere Option "XkbOptions" "caps:escape"in un Xfile di configurazione della tastiera, ad esempio/etc/X11/xorg.conf.d/10-keyboard.conf
don_crissti

Risposte:


5

EDIT: come ha sottolineato un utente utile, la mia soluzione iniziale non sopravviverà a un aggiornamento. La sua soluzione nei commenti dovrebbe funzionare. Se invece preferisci scambiare Caps Lock ed Escape, ti consiglio di aggiungere i seguenti comandi dal tuo .xinitrc o dalla configurazione i3:

.xinitrc:

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

file di configurazione i3 (generalmente situato in .config / i3 / config o in .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"

Mi rendo conto che questa domanda è piuttosto vecchia, ma ho pensato di aggiungere una risposta per quelli di noi che stanno ancora cercando di capirlo.

Dopo aver riscontrato problemi simili con alcuni DE non caricati ~/.xinitrc, ho evitato del tutto xmodmap, sono andato /usr/share/X11/xkb/symbolse ho modificato direttamente la mappatura del simbolo chiave =>.

Per fare ciò, ho modificato il file di configurazione per la mia tastiera situata in /usr/share/X11/xkb/symbols. Per la maggior parte delle tastiere, questo dovrebbe essere il pcfile.

Dopo aver aperto il file, ho cambiato manualmente Escape e Caps_Lock per i rispettivi tasti, il risultato è mostrato di seguito). Poiché ciò influisce sul modo in cui X associa l'hardware alla chiave Symbol, dovrebbe funzionare indipendentemente dal fatto che tu sia su GNOME o i3 o qualcosa del genere.

Uno snippet del mio file risultante è il seguente:

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                  ]       };

Questo ha funzionato come un incanto per me.

Guardando i file correlati, ho trovato ripetute menzioni e implementazioni parziali di un tipo di flag usato per cambiare alcuni tasti, come lo scambio di Escape e Caps Lock. Suppongo che questo sia lo strumento Gnome Tweak e setxkbmap; tuttavia, non sono riuscito a capire come mantenere questi flag con i3 Window Manager. La soluzione sopra dovrebbe funzionare bene.

Spero che questo risolva il problema!


nella tua configurazione i3:exec --no-startup-id setxkbmap -layout whatever -variant whatever -option caps:escape
quixotic il

nota che le tue modifiche al ...xkb/symbols/pcfile di sistema verranno sovrascritte alla prossima volta xkeyboard-configo i xkb-datapacchetti verranno aggiornati.
donchisciottesco

1

Due possibilità:

1) .xinitrcnon viene eseguito: viene utilizzato da xinit, startx e alcuni altri metodi per l'avvio di sessioni X, ma non è universalmente supportato, è possibile che tu stia utilizzando un display manager che non lo esegue. L'aggiunta di qualcosa a .xinitrc come touch /tmp/xinitrc-was-runpuò aiutare a determinare se è così.

2) Xorg ripristina automaticamente le impostazioni predefinite quando nessun client è connesso - se .xinitrc termina prima che il gestore delle finestre o qualsiasi altra cosa inizi a funzionare, le modifiche xmodmap o setxkbmap andranno perse.

Se è già stata definita un'opzione XKB che si desidera utilizzare, anziché eseguire programmi per modificare l'impostazione ogni volta che si avvia Xorg, è possibile semplicemente dire a Xorg di avviarsi già con le impostazioni giuste. Ad esempio, per consentire ai tasti Ctrl-Alt-Backspace di uccidere il mio Xserver, ho installato un file chiamato /etc/X11/xorg.conf.d/90-zap.confche contiene:

# 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

Puoi leggere di più al riguardo nei documenti X.Org su https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.