Utilizzare setxkbmap per scambiare lo spostamento sinistro e il controllo sinistro


17

È possibile scambiare i tasti Sinistra Shifte Sinistra CTRLusando setxkbmapinvece di xmodmap?

MODIFICARE

Sono passato a Fcitx , che funziona molto meglio con il layout della mia tastiera e la mappa dei tasti personalizzata rispetto a IBus sotto ogni aspetto. Lo consiglio vivamente.

Risposte:


28

xmodmapè obsoleto; quindi in effetti dovrebbe essere fatto con gli xkbstrumenti.

Lo swap desiderato non sembra essere incluso per impostazione predefinita con i file X11; quindi devi scriverlo tu stesso.

La pagina http://madduck.net/docs/extending-xkb/ mi ha aiutato a capire e trovare un modo per farlo.

Crea un file ~/.xkb/keymap/mykbddove metti l'output di setxkbmap, sarà la tua definizione di tastiera di base; per esempio:

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

quindi, crea un file di simboli per definire lo scambio di chiavi, inseriscilo ad esempio in ~/.xkb/symbols/myswap

lì, inserisci le seguenti righe:

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

quindi, modifica il ~/.xkb/keymap/mykbdfile e modifica la xkb_symbolsriga da aggiungere

+myswap(swap_l_shift_ctrl)

infine, puoi caricarlo con xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(non puoi usare "~" per il -Iparametro). Probabilmente sputerà molti avvisi su simboli indefiniti per alcune chiavi rare, ma puoi ignorarli (ad esempio, reindirizzare l'errore a dave:) 2> /dev/null.

Se vuoi essere in grado di scambiare facilmente tra uno normale e il tuo ctrl / shift invertito; basta creare ~/.xkb/keymap/un altro file, senza l'opzione "myswap" aggiuntiva e caricarlo con xkbcomp. È possibile creare due piccoli script per caricarli.


1
Grazie. Funziona, ma per una volta. Il problema è che sto usando un motore di input chiamato IBus. Ogni volta che ho cambiato il metodo di input e poi di nuovo premendo il tasto "Ctrl + Spazio", i tasti Left Shift e Left Control vengono commutati indietro. Qualche suggerimento su come evitarlo.
giorno

mmn, forse IBus fa alcune ridefinizioni della tastiera. prova xkbcomp $DISPLAY some.dumpdopo e prima di chiamare IBus e fai una diff dei due dump (quelli sono la definizione completa della tastiera); probabilmente vedrai differenze.
Pablo Saratxaga,

Hmm, fa, che fastidio. Qualche idea per sbarazzarsi del problema? Si noti che il comando setxkbmap -option caps:escapefunziona. IBus ha ricordato i tasti scambiati Tasti Esc e Caps_Lock Ma non lo è per i tasti Maiusc sinistro e Controllo sinistro scambiati.
giorno

forse IBus legge la tastiera quando viene lanciato. Prova a scaricare IBus, cambiare la tastiera e caricarlo di nuovo. Se il problema persiste, allora dovrebbe essere fatta una domanda specifica IBus (e forse segnalare un bug; imho, IBus dovrebbe rilevare i cambiamenti della tastiera e onorarli)
Pablo Saratxaga,

Ciao. Qualcuno può dirmi come avrei usato la stessa tecnica per scambiare il tasto Alt sinistro con il tasto Control sinistro? Ho provato a cambiare il file myswap in: partial modifier_keys xkb_symbols "swap_l_shift_ctrl" {sostituisci chiave <LCTL> {[Alt_L]}; sostituire la chiave <LALT> {[Control_L]}; }; ma non ha funzionato. TIA !!!
Neil Girardi,

3

Mi sono imbattuto in alcuni problemi di mappatura LALTper l' Control_Lutilizzo della soluzione di Pablo , sembra che sia necessario impostare anche le modifier_mapopzioni.

Ho copiato un modello da /usr/share/X11/xkb/symbols/altwin- cerca xkb_symbols "ctrl_alt_win"- e modificato per impostare le seguenti modifiche:

  • Tasto LALT per Control **
  • Tasto LWIN su Alt
  • Tasto MENU su tasto Windows

Il ~/.xkb/symbols/myswapfile finale era:

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

Ho anche aggiunto -w0al xkbcompcomando per evitare qualsiasi output di avviso quando si apre una nuova shell.

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

** Passando molto da Mac a Linux, mi piace avere due tasti di controllo su Linux per approssimare la tastiera del Mac per la mia memoria muscolare.

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.