Come cambiare la mappa dei tasti della console in Linux?


36

Vorrei scambiare Esce CapsLockin console (non in X, e utilizzare xev), come posso farlo?

Il mio sistema operativo è Ubuntu.

Risposte:


60

Gli strumenti per manipolare il layout della tastiera sulle console virtuali sono loadkeys, dumpkeyse showkey. Leggi le loro manpage e informati sulle loro complessità.

Si noti che questi strumenti funzionano solo in una console virtuale, non in un emulatore di terminale in un ambiente grafico come gnome. Per saperne di più sulla differenza leggi questa domanda e risposte: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

Ecco una breve guida per fare ciò che vuoi:

  1. Salva il layout della tastiera corrente:

    $ dumpkeys > backup.kmap
    

    Nel caso in cui qualcosa vada storto potresti riuscire a ripristinare la tua keymap usando il comando:

    $ sudo loadkeys backup.kmap
    

    Se la tastiera è così incasinata che non puoi nemmeno farlo, l'unica opzione che non prevede la magia del kernel antico è il riavvio.

  2. Verifica quali codici chiave sono assegnati alle tue chiavi:

    $ showkey
    

    Ora premere il tasto ESC e il tasto CAPSLOCK. I codici chiave dovrebbero apparire sullo schermo. Nota i codici chiave. Sul mio sistema l'ESC ha il codice chiave 1 e CAPSLOCK ha il codice chiave 58. showkeyterminerà dopo 10 secondi di inattività (almeno sul mio ubuntu 10.04).

  3. Nota i nomi dei tasti ESC e CAPSLOCK dai dumpkeys:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Nota la riga della mappa dei tasti da dumpkeys:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Crea un file keymap che cambia ESC e CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Carica la mappa dei tasti:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Test: il test del tasto CAPSLOCK è ovvio. Basta premere il tasto CAPSLOCK e verificare se gli altri tasti escono in maiuscolo. Per testare il tasto ESC è possibile utilizzare CTRL + V seguito da ESC. Dovrebbe stampare ^[. CTRL + V fa in modo che la shell stampi la chiave successiva alla lettera invece di interpretarla.

Per caricare questa modifica ad ogni riavvio, inserire la seguente riga nel /etc/rc.localfile:

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap

Informazioni raccolte da varie pagine, tra cui, ma non limitato a:


5
È inoltre possibile utilizzare sudo setupcon --saveper rendere permanenti le modifiche, anziché modificare rc.local. È essenzialmente lo stesso didumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor,

È più sicuro utilizzare /usr/bin/loadkeysin /etc/rc.localquanto il percorso variabile di ambiente non è garantito da impostare in questa fase. E sudonon è necessario in rc.local.
August Karlstrom

@AugustKarlstrom Il comando in rc.localviene eseguito ogni volta che si avvia il sistema. @ bukzor nonsudo setupcon è presente , è un comando di installazione singolo, che sostituisce la mappa dei tasti predefinita del sistema, senza aggiungere alcun codice di avvio del runtime. Aggiungendo a , aggiunge ulteriore codice di avvio e duplica ciò che è già stato fatto dai loadkeys predefiniti del sistema. Il metodo potrebbe effettivamente essere meno sicuro perché dipende da un percorso non standard della mappa di tasti. rc.localloadkeysrc.localrc.local
RobertL,

@RobertL, per favore, elabora il setupconmetodo. Aggiungi la tua risposta o modifica la mia se lo desideri.
lesmana,

Non riesco a verificare la dichiarazione di @ bukzor in merito setupcon. Sembra che agosto ha fatto l'ipotesi che l' sudo setupcon --saveavrebbe andare in rc.localcui non credo è vero, ma se lo fa, non è necessario sudoin rc.local. Penso che abbiamo bisogno di maggiori informazioni prima di aggiornare la tua risposta. La domanda principale è "Come installare la keymap modificata in modo che venga caricata automaticamente durante il processo di avvio?" Non so davvero quale sia il modo migliore, rc.localo l'installazione di una keymap, o anche se l'installazione di una keymap funzionerà. Ho fatto ricerche di recente e ci tornerò qui.
Robert L

4

Usa 'ctrl: nocaps' invece di 'ctrl: swapcaps' se vuoi solo avere il tasto due maiuscole (il maiuscole con un altro nome è ancora super inutile).

X11: (vedi anche /usr/share/X11/xkb/rules/base.lst:)

sudo vim /etc/default/keyboard
    XKBOPTIONS="ctrl:swapcaps"
udevadm trigger --subsystem-match=input --action=change
sudo restart lightdm

Console di testo: (rubato da setupcon)

#!/bin/sh
. /etc/default/console-setup 
. /etc/default/keyboard
ckbcomp $acm_option $rules_option -model "$XKBMODEL" \
            "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \
            | gzip -9 2>/dev/null >/etc/console-setup/cached.kmap.gz
loadkeys /etc/console-setup/cached.kmap.gz
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.