Existem muitas camadas envolvidas aqui e o resultado depende muito do contexto. Mas algumas informações gerais:
Em primeiro lugar, o kernel. Isso é responsável por manipular o hardware real do teclado e registra as chaves através de algum mecanismo (geralmente um manipulador de interrupções, na parte inferior) e armazena uma referência à qual a tecla foi pressionada usando uma representação inequívoca da chave específica (geralmente um código de tecla). algum tipo).
Em segundo lugar, os consumidores. No Linux, há basicamente duas opções aqui: ou as teclas do teclado são alimentadas no subsistema TTY e se transformam em bytes de entrada em um dispositivo terminal, se você estiver em um VT, ou são entregues ao Xorg e passados para aplicativos via o protocolo X, se você estiver na GUI. Este último é o caso normal hoje em dia, embora o primeiro ainda seja bem suportado. O Xorg e o protocolo X capturam eventos-chave brutos do kernel, e os transmitem de forma similar aos aplicativos X - ou seja, no nível X simples, os aplicativos recebem apenas notificações de liberação de teclas / chave, e é o responsabilidade da aplicação de impor semântica sobre eles. Isso inclui até mesmo coisas básicas e quase universais como a tecla marcada 'A' produzindo o byte a
normalmente, mas A
quando a tecla shift é pressionada. Escusado será dizer que existem muitas bibliotecas para fazer a maior parte disto, e as novas aplicações normalmente não precisam de se preocupar com isso - mas ainda é feito trabalho ao nível da aplicação.
Como o trabalho é feito no nível do aplicativo, o que lida com as coisas é quase totalmente dependente do aplicativo. Um programa de emulador de terminal pega os pressionamentos de tecla do protocolo X e duplica o manuseio do subsistema TTY, transformando-os em bytes em uma linha, para que você possa acessar um shell. Os programas GUI normais usam um kit de ferramentas ou outro, e todos os kits de ferramentas fornecem o manuseio do teclado como uma funcionalidade básica, permitindo a semântica usual para caixas de texto, elementos selecionados e assim por diante. Programas maiores e mais sofisticados, como um navegador ou um jogo em tela cheia, provavelmente fazem o seu próprio manuseio de teclado no nível X, pela maior flexibilidade que ele oferece. Mas tudo é feito pelo aplicativo individual e depende apenas do que o aplicativo decide.