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.