Keyboard configuration in console (Português)

From ArchWiki
(Redirected from KEYMAP (Português))
Jump to: navigation, search

Mapeamentos de teclado (conhecido pela abreviação inglesa como keymaps) para console virtual, fontes de console e mapas de console são fornecidos pelo pacote kbd (uma dependência de systemd), que também fornece muitas ferramentas de baixo nível para gerenciar o console virtual. Além disso, o systemd também fornece a ferramenta localectl, que pode controlar tanto o locale do sistema quanto as configurações de layout do teclado para o console virtual e o Xorg.

Vendo as configurações do teclado

Use localectl status para ver as configurações atuais de teclado.

Mapas de teclado

Os arquivos de mapas de teclado são armazenados na árvore de diretórios /usr/share/kbd/keymaps/. Geralmente, um arquivo de mapa de teclado corresponde a um layout de teclado (a instrução include pode ser usada para compartilhar partes comuns e um arquivo de mapa de teclado pode conter vários layouts com alguma combinação de teclas usada para alternar). Para mais detalhes, veja keymaps(5).

Listando mapas de teclado

As convenções de nomenclatura dos mapas de teclado do console são um pouco arbitrárias, mas geralmente são baseadas em:

Para obter uma lista de todos os mapas de teclado disponíveis, use o comando:

$ localectl list-keymaps

Para procurar um mapa de teclado, use o seguinte comando, substituindo termo_de_pesquisa pelo código do seu idioma, país ou layout:

$ localectl list-keymaps | grep -i termo_de_pesquisa

Alternativamente, usando o find:

$ find /usr/share/kbd/keymaps/ -type f

Loadkeys

É possível definir um mapa de teclado apenas para a sessão atual. Isso é útil para testar diferentes mapas de teclado, resolver problemas etc.

A ferramenta loadkeys é usada para este propósito, é usada internamente pelo systemd ao carregar o mapa de teclas configurado no /etc/vconsole.conf. Pode ser usado muito simplesmente para este propósito:

# loadkeys mapa_de_teclado

Veja loadkeys(1) para detalhes.

Configuração persistente

Um mapa de teclado persistente pode ser configurado em /etc/vconsole.conf, que é lido por systemd na inicialização. A variável KEYMAP é usada para especificar o mapa de teclado. Se a variável estiver vazia ou não definida, o mapa de teclado us será usado como valor padrão. Veja vconsole.conf(5) para todas as opções. Por exemplo:

/etc/vconsole.conf
KEYMAP=br-abnt2
...

Por conveniência, localectl pode ser usado para definir o mapa de teclado do console. Ele irá alterar a variável KEYMAP em /etc/vconsole.conf e também definirá o mapa de teclado da sessão atual:

$ localectl set-keymap --no-convert mapa_de_teclado

A opção --no-convert pode ser usada para evitar que o localectl altere automaticamente o mapa de teclado do Xorg para a correspondência mais próxima. Veja localectl(1) para mais informações.

Criando um mapa de teclado personalizado

Ao usar o console, você pode usar teclas de atalho (hotkeys) para imprimir um caractere específico. Além disso, podemos também imprimir uma sequência de caracteres e algumas sequências de escape. Assim, se imprimirmos a sequência de caracteres que constituem um comando e depois um caractere de escape para uma nova linha, esse comando será executado.

Um método de fazer isso é editar o arquivo de mapa de teclado. No entanto, como ele será reescrito sempre que o pacote ao qual ele pertence for atualizado, a edição desse arquivo não será incentivada. É melhor integrar o mapa de chaves existente com um mapa de teclado pessoal. O utilitário loadkeys pode fazer isso.

Primeiro, crie um arquivo de mapa de teclado. Esse arquivo de mapa de teclado pode estar em qualquer lugar, mas um método é imitar a hierarquia de diretórios em /usr/local:

# mkdir -p /usr/local/share/kbd/keymaps
# vim /usr/local/share/kbd/keymaps/personal.map

Como um comentário adicional, vale a pena notar que um mapa de teclado pessoal também é útil para redefinir o comportamento de teclas já tratadas pelo mapa de teclado padrão: quando carregado com loadkeys, as diretivas no mapa de teclado padrão serão substituídas quando eles entram em conflito com as novas diretivas e serão conservadas. Dessa forma, somente as alterações no mapa de teclas devem ser especificadas no mapa de teclado pessoal.

Dica: Você também pode editar um mapa de teclado existente localizado na árvore de diretórios /usr/share/kbd/keymaps/. Os mapas de teclado têm uma extensão .map.gz de forma que, por exemplo, us.map.gz é um mapa de teclado americano. Basta copiar o mapa de teclado para /usr/local/share/kbd/keymaps/personal.map.gz e executar gunzip nele.

Adicionando diretivas

Dois tipos de diretivas são necessários neste mapa de teclado pessoal. Em primeiro lugar, as diretivas keycode, que correspondem ao formato visto nos mapas de teclado padrão. Essas diretivas associam um keycode (código de teclas) a um keysym (símbolo de teclas). Keysyms representam ações do teclado. As ações disponíveis incluem a saída de códigos de caracteres ou sequências de caracteres, consoles de comutação ou mapas de teclado, inicialização da máquina e muitas outras ações. O mapa de teclado completo atualmente ativo pode ser obtido com

# dumpkeys -l

A maioria dos keysyms é intuitiva. Por exemplo, para definir tecla 112 para a retornar um "e", a diretiva será:

keycode 112  = e

Para definir a tecla 112 para retornar um símbolo de euro, a diretiva será:

keycode 112 = euro

Algumas keysyms não são imediatamente conectadas a ações de um teclado. Em particular, as keysyms prefixadas por um F maiúsculo e um a três dígitos (F1-F246) constituindo um número maior que 30 estão sempre livres. Isso é útil para direcionar a hotkey para retornar uma sequência de caracteres e outras ações:

keycode 112 = F70

Então, F70 pode ser vinculado para retornar um texto específico:

string F70 = "Opa"

Quando a tecla 112 é pressionada, ela mostrará o conteúdo de F70. Para executar um comando impresso em um terminal, um caractere de escape de nova linha deve ser anexado ao final da string de comando. Por exemplo, para inserir um sistema na hibernação, o seguinte mapa de teclado é adicionado:

string F70 = "sudo /usr/sbin/hibernate\n"

Outros exemplos

  • Para fazer a tecla Alt da Direta ser o mesmo que a tecla Alt da Esquerda (para Emacs), use a seguinte linha em seu mapa de teclado. Isso vai incluir o arquivo /usr/share/kbd/keymaps/i386/include/linux-with-two-alt-keys.inc – acesse-o para detalhes.
include "linux-with-two-alt-keys"
  • Para trocar CapsLock com Escape (para Vim), remapeie os respectivos keycodes:
keycode 1 = Caps_Lock
keycode 58 = Escape
  • Para fazer o CapsLock uma outra tecla Control, remapeie o respectivo keycode:
keycode 58 = Control
  • Para trocar CapsLock com a tecla Control da Esquerda, remapeie as respectivas keycodes:
keycode 29 = Caps_Lock
keycode 58 = Control

Salvando alterações

Para fazer uso do mapa de teclado pessoal, ele deve ser carregado com loadkeys:

$ loadkeys /usr/local/share/kbd/keymaps/personal.map

No entanto, este mapa de teclado está ativo apenas para a sessão atual. Para carregar o mapa de teclado na inicialização, especifique o caminho completo para o arquivo na variável KEYMAP em /etc/vconsole.conf. O arquivo não precisa ser compactado como os mapas de teclado oficiais fornecidos pelo kbd.

Ajustando o atraso e a taxa de digitação

O "atraso de digitação" (typematic delay) indica a quantidade de tempo (normalmente em milissegundos) que uma tecla precisa ser pressionada e mantida para que o processo de repetição comece. Após o processo de repetição ter sido acionado, o caractere será repetido com uma certa frequência (geralmente dada em Hz) especificada pela "taxa de digitação" (typematic rate). Estes valores podem ser alterados usando o comando kbdrate. Observe que essas configurações são configuradas separadamente para o console virtual e para o Xorg.

# kbdrate [-d atraso] [-r taxa]

Por exemplo, para definir um atraso de digitação para 200ms e uma taxa de digitação para 30Hz, use o seguinte comando:

# kbdrate -d 200 -r 30

A emissão do comando sem especificar o atraso e a taxa vai redefinir os valores de digitação para seus respectivos padrões; um atraso de 250ms e uma taxa de 11Hz:

# kbdrate

Serviço do systemd

Um serviço de systemd pode ser usado para definir a taxa de teclado. Por exemplo:

/etc/systemd/system/kbdrate.service

[Unit]
Description=Keyboard repeat rate in tty.

[Service]
Type=oneshot
RemainAfterExit=yes
StandardInput=tty
StandardOutput=tty
ExecStart=/usr/bin/kbdrate -s -d 450 -r 60
 
[Install]
WantedBy=multi-user.target

Então inicie/habilite o serviço de systemd kbdrate.service.