Linux console (Português)/Keyboard configuration (Português)
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:
-
Códigos de idioma: sendo que código de idioma (em inglês language codes) é o mesmo que seu código de país (ex.,
de
para alemão oufr
para francês). -
Códigos de país: sendo que as variações do mesmo idioma são usadas em diferentes países (ex.,
uk
para inglês do Reino Unido ouus
para inglês dos Estados Unidos); uma lista de códigos de país também pode ser encontrada em wikipedia:ISO 3166-1#Officially assigned code elements. -
Layouts de teclado: sendo que o layout não está relacionado a um país ou idioma em particular (ex.,
dvorak
para o layout de teclado Dvorak).
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.
Se necessário, o mapa de teclado do /etc/vconsole.conf
pode ser carregado anteriormente no espaço de usuário pelo #Hooks comuns|hook do mkinitcpio keymap
.
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.
/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
.