Como o mapeamento de teclado funciona no Linux? [duplicado]

16

Eu sempre tive dificuldade em entender como o mapeamento de teclado e coisas relacionadas são colocadas juntas no Linux.

Quando as coisas quebram, meu sangue ferve se eu tiver que vasculhar uma lista de discussão desatualizada e posts do fórum para encontrar THAT um comando ou uma linha inputrc que conserte o meu problema.

Há problemas clássicos como o retrocesso não funcionar no vim ou Ctrl + setas no bash até você alternar o tipo de terminal. Ou um problema que eu encontrei recentemente, onde no Debian fresco instalar @ chave realmente imprime " e " imprime @ (layout de teclado errado?)

Basta olhar para arquivos e ferramentas não ajuda muito. inputrc? xmodmap? setxkbmap? console-setup? Onde eu começo a entender como funciona, então eu não tenho que recorrer a tentar comandos duvidosos de alguém para consertar meus problemas de teclado?

    
por Alex B 21.08.2010 / 12:10

3 respostas

13

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

No nível mais básico, o kernel sabe reconhecer dispositivos de teclado e entende o conceito de um mapa de teclas da consola . Essa é a maneira mais simples de configurar o 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.

Uma vez que você entra 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, ignorando o kernel e ignorando o mapa de teclas 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 executar o melhor possível sem qualquer arquivo xorg.conf. Dependendo da sua versão do Xorg, você pode precisar especificar o 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 é usado para associar um determinado código de tecla a um evento de chave real. Por exemplo, no teclado, o código 50 gera Shift_L .
    3. Opcionalmente, você pode especificar vários XkbLayouts para um teclado e, em seguida, usar XkbOptions (lista completa geralmente armazenada em /usr/share/X11/xkb/rules ) para configurar como alternar os layouts. (Isso é útil se, digamos, você estiver tentando se ensinar Dvorak ou quiser alternar entre os layouts de teclado em inglês e russo).
    4. Cada código de acesso pode ser interpretado de várias maneiras, dependendo de quais modificadores estão sendo mantidos. xmodmap permite que você veja quais eventos principais serão enviados com base nos modificadores que estão sendo mantidos.
por 21.08.2010 / 13:36
3

Hoje em dia, o console e o X podem funcionar juntos.

Eu não sei se isso é completamente padronizado ainda, mas no Debian Unstable (e presumivelmente outras distros com ferramentas atualizadas do Xorg e do console), /etc/default/keyboard permite que você use a sintaxe no estilo X para configurar o teclado no console e no X - pelo menos se você estiver usando console-tools e console-setup. O resto é como clee descrito.

    
por 21.08.2010 / 23:00
0

There are classic problems like backspace not working in vim...

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

Esse comportamento é alterado pela configuração:

set backspace=indent,eol,start
    
por 20.04.2011 / 20:01