Não entendo dispositivos terminais virtuais (por exemplo, /dev/tty1
), mas sei que posso "mudar" para tty1
se pressionar ctrl + alt + f1
.
Eu tenho um layout de teclado personalizado, que está disponível, /usr/share/X11/xkb/symbols/us
mas 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.