ti-enxame.com

Como funciona o mapeamento de teclado no Linux?

Sempre tive problemas em entender a maneira como o mapeamento do teclado e coisas relacionadas são reunidas no Linux.

Quando as coisas quebram, meu sangue ferve se eu tiver que vasculhar intermináveis ​​listas de e-mails desatualizadas e postagens de fóruns para encontrar QUE um comando ou linha de inputrc que corrige meu problema.

Existem problemas clássicos como backspace que não funciona no vim ou Ctrl + setas no bash até que você mude o tipo de terminal. Ou um problema que encontrei recentemente, em que uma instalação nova do Debian @ tecla realmente imprime ", e " imprime @ (layout de teclado errado?)

Apenas olhar para arquivos e ferramentas não ajuda muito. inputrc? xmodmap? setxkbmap? configuração do console? Onde eu começo a realmente entender como funciona para não ter que recorrer a comandos duvidosos de alguém para consertar meus problemas de teclado?

18
Alex B

Isso é muito mais complicado do que deveria ser, mas aqui está a minha tentativa.

No nível mais básico, o kernel sabe como reconhecer dispositivos de teclado e entende o conceito de mapa de teclado do console . Esta é a maneira mais simples de configurar seu teclado e há apenas uma variável a ser considerada, mas essas configurações afetam apenas a entrada do teclado no console de texto do Linux.

Depois de entrar no Xorg, as coisas ficam um pouco mais complicadas, mas na verdade faz algum sentido. O Xorg tem várias noções específicas que são muito importantes para entender.

  • O Xorg fala diretamente com o dispositivo de teclado, contornando o kernel e ignorando o mapa de teclado especificado no console.
  • O Xorg permite que você defina algumas opções específicas para o seu teclado no arquivo xorg.conf, embora as distribuições atuais do Linux tentem o seu melhor para rodar sem nenhum arquivo xorg.conf. Dependendo da sua versão do Xorg, você pode precisar especificar seu XkbLayout dentro de uma seção InputClass (para versões mais recentes do Xorg) ou uma seção InputDevice (para versões mais antigas).
  • Existem várias camadas específicas de interpretação no Xorg quando uma tecla é pressionada.
    1. No nível mais básico, cada evento de pressionamento de tecla é representado por um código numérico.
    2. O XkbModel combinado com o XkbLayout são usados ​​para associar um determinado código-chave a um evento-chave real. Por exemplo, no meu teclado, o código 50 gera Shift_L.
    3. Você pode opcionalmente especificar vários XkbLayouts para um teclado e, em seguida, usar o XkbOptions (lista completa normalmente armazenada em /usr/share/X11/xkb/rules) para configurar como alternar layouts. (Isso é útil se, digamos, você estiver tentando aprender Dvorak sozinho, ou se quiser alternar entre os layouts de teclado em inglês e russo).
    4. Cada código de tecla pode ser interpretado de várias maneiras, dependendo de quais modificadores estão sendo pressionados. xmodmap permite que você veja quais eventos chave serão enviados com base em quais modificadores estão sendo mantidos.
14
clee

Atualmente, o console e o X podem funcionar juntos.

Não sei se isso está completamente padronizado ainda, mas no Debian Unstable (e presumivelmente outras distros com Xorg e ferramentas de console atualizadas), /etc/default/keyboard permite que você use a sintaxe do estilo X para configurar o teclado no console e no X - pelo menos se você estiver usando ferramentas do console e configuração do console. O resto é conforme descrito acima.

3
KellyClowers

Existem problemas clássicos, como backspace não funciona no vim ...

Talvez você esteja falando sobre o comportamento do vim de excluir com backspace apenas os caracteres que você digitou na edição atual, e impedindo que você faça isso com caracteres já presentes antes de entrar no modo de edição.

Esse comportamento é alterado pela configuração:

set backspace=indent,eol,start
0
nozimica