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

4

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

Eu tenho um layout de teclado personalizado, que está em /usr/share/X11/xkb/symbols/us , mas ele só "funciona" se o X estiver sendo executado.

Ambos os terminais virtuais e X parecem gerenciar entradas / saídas de teclado à sua maneira, mas presumivelmente eles 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 do Linux lida com entradas / saídas de teclado? Existe um arquivo fonte que eu possa olhar com uma lista de todos os scancodes / keycodes / keysims / etc, e, talvez com a lógica geral de como o Linux gerencia toda a idéia de um "teclado"?

(Estou executando o Lubuntu.)

    
por étale-cohomology 29.10.2016 / 22:06

1 resposta

5

Veja Como a entrada e o texto do teclado trabalho de saída? para uma visão geral do tópico.

Em mais detalhes, no Linux, o kernel recebe códigos de varredura do hardware e os converte em códigos de teclas. (Essa terminologia não é completamente padrão; você pode encontrar “código de verificação” ou “código de chave” usado para ambos.) Como essa conversão funciona depende do driver do teclado. Para teclados PS / 2, você pode configurá-lo com setkeycodes . Para teclados USB, você pode configurá-lo via udev . Veja também o wiki do Arch . 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 de teclas são mapeados para escapar seqüências 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 eles mesmos e teclas de função codificadas usando caracteres de controle ou seqüências de escape. Você pode alterar o mapeamento com loadkeys . O mapeamento usa dois níveis de indireção, da combinação keycode + modifier (com três modificadores: shift , control , alt ) para keysym e de keysym para string (caractere ou seqüência de escape). O conjunto de keysyms é fixo, então se você quiser definir combinações personalizadas, você precisará usar keyyms existentes que não são usados como F13 , F14 ,…

Se você quiser ver o código-fonte que implementa essas traduções, consulte drivers de teclado e código de entrada genérico e udev e libudev .

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

    
por 30.10.2016 / 01:34