Como o kernel do Linux lida com entradas/saídas de teclado?

Como o kernel do Linux lida com entradas/saídas de teclado?

Não entendo dispositivos terminais virtuais (por exemplo, /dev/tty1), mas sei que posso "mudar" para tty1se pressionar ctrl + alt + f1.

Eu tenho um layout de teclado personalizado, que está disponível, /usr/share/X11/xkb/symbols/usmas só "funciona" se o X estiver em execução.

Tanto os terminais virtuais quanto o X parecem gerenciar entradas/saídas do teclado à sua maneira, mas presumivelmente ambos fazem interface com o kernel (Linux) de alguma forma, o que deve fornecer algum tipo de abstração para o hardware do teclado.

Como o kernel Linux lida com entradas/saídas do teclado? Existe um arquivo fonte que eu possa ver com uma lista de todos os scancodes/keycodes/keysims/etc., e, talvez, com a lógica geral de como o Linux gerencia toda a ideia de um "teclado"?

(Estou executando o Lubuntu.)

Responder1

VerComo funcionam a entrada do teclado e a saída de texto?para uma visão geral do tema.

Mais detalhadamente, no Linux, o kernel recebe códigos de varredura do hardware e os converte em códigos-chave. (Essa terminologia não é totalmente padrão; você pode encontrar “código de leitura” ou “código de chave” usados ​​para ambos.) O funcionamento dessa conversão depende do driver do teclado. Para teclados PS/2, você pode configurá-lo comsetkeycodes. Para teclados USB, você pode configurá-lovia udev. Veja tambémo wiki do Arco. Todos os dispositivos de entrada do usuário, incluindo teclados e mouses, são expostos por meio de dispositivos de eventos /dev/input/event*.

Em um console Linux, os códigos-chave são mapeados para sequências de escape de acordo com o mapa de teclas do console. Como um console é um terminal de texto, os aplicativos veem bytes, com caracteres imprimíveis representando a si mesmos e teclas de função codificadas usando caracteres de controle ou sequências de escape. Você pode alterar o mapeamento comloadkeys. O mapeamento usa dois níveis de indireção, da combinação keycode + modificador (com três modificadores: shift, control, alt) para keysym e de keysym para string (caractere ou sequência de escape). O conjunto de símbolos de teclas é fixo, portanto, se você quiser definir combinações personalizadas, precisará usar símbolos de teclas existentes que não seriam usados ​​de outra forma, como F13, F14,…

Se você quiser ver o código-fonte que implementa essas traduções, dê uma olhada emdrivers de tecladoecódigo de entrada genérico, eudevelibudev.

O X11 (a GUI) tem sua própria maneira de mapear códigos-chave para o que os aplicativos recebem. Os aplicativos X11 veem símbolos de teclas e modificadores, portanto, as teclas de função não precisam ser mais codificadas. Na verdade, existem duas maneiras de definir mapas de teclado no X: o método clássico xmodmap e o mecanismo mais recente XKB, que é mais poderoso, porém mais complexo.

informação relacionada