Como alterar o mapa de teclas do console no Linux?

36

Gostaria de trocar Esce CapsLockno console (não no X e usar xev), como posso fazer isso?

Meu sistema operacional é o Ubuntu.

Vayn
fonte

Respostas:

60

As ferramentas para manipular o layout do teclado nos consoles virtuais são loadkeys, dumpkeyse showkey. Leia suas páginas de manual e informe-se sobre seus meandros.

Observe que essas ferramentas funcionam apenas em um console virtual, não em um emulador de terminal em um ambiente gráfico como o gnome. Para aprender sobre a diferença, leia esta pergunta e respostas: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

Aqui está um pequeno guia para fazer o que você deseja:

  1. Salve seu layout de teclado atual:

    $ dumpkeys > backup.kmap
    

    Caso algo dê errado, você poderá restaurar seu mapa de teclas usando o comando:

    $ sudo loadkeys backup.kmap
    

    Se o teclado está tão bagunçado que você nem consegue fazer isso, sua única opção que não envolve a magia antiga do kernel é reiniciar.

  2. Verifique quais códigos de chave estão atribuídos às suas chaves:

    $ showkey
    

    Agora pressione a tecla ESC e a tecla CAPSLOCK. Os códigos das teclas devem aparecer na tela. Observe os códigos de teclas. No meu sistema, o ESC possui o código de chave 1 e o CAPSLOCK possui o código de chave 58.showkey terminará após 10 segundos de inatividade (pelo menos no ubuntu 10.04).

  3. Observe os nomes das teclas ESC e CAPSLOCK das dumpkeys:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Observe a linha do mapa de teclas em dumpkeys:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Crie um arquivo de mapa de chaves que alterna ESC e CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Carregue o mapa de teclas:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Teste: o teste da chave CAPSLOCK é óbvio. Basta pressionar a tecla CAPSLOCK e verificar se outras teclas aparecem em maiúsculas. Para testar a tecla ESC, você pode usar CTRL + V seguido de ESC. Deve imprimir ^[. CTRL + V faz com que o shell imprima a próxima chave literalmente, em vez de interpretá-la.

Para carregar essa modificação em cada reinicialização, coloque a seguinte linha no seu /etc/rc.localarquivo:

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

Informações coletadas de várias páginas, incluindo, entre outras:

lesmana
fonte
5
Você também pode usar sudo setupcon --savepara tornar as alterações permanentes, em vez de editar o rc.local. Isso é essencialmente o mesmo quedumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor
É mais seguro usá-lo /usr/bin/loadkeys, /etc/rc.localpois não é garantido que a variável de ambiente do caminho seja configurada neste estágio. E sudonão é necessário rc.local.
August Karlstrom
@AugustKarlstrom O comando in é rc.localexecutado sempre que o sistema é inicializado. @ bukzor de sudo setupconé não em rc.local, é um comando de configuração única, que substitui o mapa de teclado padrão do sistema, sem acrescentar qualquer código de inicialização de tempo de execução. Adicionando loadkeys a rc.local, adiciona código de inicialização extra e duplica o que já foi feito pelas teclas de carregamento padrão do sistema. Na rc.localverdade, o método pode ser menos seguro porque depende de um caminho não padrão para o mapa de teclas.
RobertL
@RobertL, por favor, elabore o setupconmétodo. Adicione sua própria resposta ou edite a minha, se desejar.
Lesmana
Não consigo verificar a declaração de @ bukzor sobre setupcon. Parece que agosto fez a suposição de que o sudo setupcon --saveiria para rc.localque eu não acho que é verdade, mas se isso acontecer, você não precisa sudode rc.local. Acho que precisamos de mais informações antes de atualizar sua resposta. A questão principal é "Como instalar o mapa de teclas modificado para que ele seja carregado automaticamente durante o processo de inicialização?" Realmente não sei qual é a melhor maneira, rc.localou instalar um mapa de teclas, ou mesmo se a instalação de um mapa de teclas funcionará. Eu tenho pesquisado isso ultimamente e voltarei aqui.
RobertL
4

Use 'ctrl: nocaps' em vez de 'ctrl: swapcaps' se você quiser apenas ter duas teclas de capslocks (capslock com outro nome ainda é super inútil).

X11: (veja também: /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 de texto: (roubado do 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
Bukzor
fonte