Keybord-key e o caractere resultante. Quem é responsável (no SO) [duplicado]

0

Pressionar uma tecla no teclado resulta em diferentes tipos de caracteres em diferentes sistemas operacionais. por exemplo. Pressionar a seta para cima no Windows resultará em uma seqüência de caracteres e pressionar a mesma tecla no linux.

Então a questão é: qual "parte" de um sistema operacional é responsável? Especialmente quando se olha para o GNU \ linux OS, já que "linux" é apenas o kernel.

    
por mat 04.12.2015 / 19:08

1 resposta

0

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.

    
por 04.12.2015 / 21:29