Estou interessado em saber como funciona um teclado com teclas extras. Então, por exemplo, digamos que eu tenha o seguinte teclado:
Você pode ver que ele possui chaves extras. Agora diga que eu pressionei omudochave, o que acontecerá neste caso?
Isto é o que eu acho que acontece:
- Um sinal será enviado ao computador.
- O driver do dispositivo de teclado receberá este sinal.
- O driver do dispositivo de teclado verá que este sinal é o sinal de mudo, portanto não o transmitirá ao sistema operacional, mas chamará uma função/chamada de sistema do sistema operacional que silenciará o som no computador.
Estou correcto?
Responder1
Visão geral muito breve sobre as camadas de entrada:
Seu teclado está conectado ao PC de alguma forma, por exemplo, via USB ou porta PS/2. Os drivers do kernel para esse mecanismo sabem como lidar com a comunicação quando uma tecla é pressionada no teclado.
Para um teclado USB, um padrão chamadoESCONDIDO(Dispositivo de Interface Humana). Isto não se aplica apenas a teclados, mas também a mouses, joysticks e outros dispositivos de entrada. Então o dispositivo terá umdescritorinformando ao kernel que tipo de sinais ele pode emitir e muitos códigos para chaves, incluindomudosão padronizados.
No entanto, alguns teclados possuem teclas que não são padronizadas (como Fnem alguns teclados), e cabe ao fabricante como ele sinaliza essas teclas.
Existe uma camada especial no kernel para lidar com dispositivos HID. Essa camada disponibiliza a comunicação HID bruta /dev/hidrawX
e depois traduz os eventos HID em eventos de entrada do kernel.
A camada de entrada do kernel levadigitalizar códigos(números correspondentes a uma chave física, exclusiva do dispositivo) e os converte emcódigos-chave(números correspondentes às chaves lógicas padronizadas em todos os dispositivos). Ambos são disponibilizados como eventos no /dev/input/eventX
. Você pode usar evdev
para ver esses eventos e showkey
, dumpkeys
etc. para ver a tabela de tradução.
O servidor X (ou Wayland) lê todos esses eventos e os traduz emsímbolos principais(como a
, á
etc., ou especiais como AudioMute
). Os aplicativos X podem receber esses símbolos e agir de acordo. Você pode usar see xev
application para ver essa camada e configurá-la com xmodmap
a xkbd
especificação em seu arquivo xorg.conf
.
Para reagir AudioMute
, é necessário algum aplicativo para isso. Freqüentemente, este é o Gerenciador de Janelas, mas se o seu Gerenciador de Janelas não fizer isso, um aplicativo separado também funcionará.
Portanto, não existe um único "driver de teclado", é muito mais complicado e não há uma chamada especial para "mudo".
Responder2
No entendimento geral, você está correto. Quando você pressiona uma tecla, o teclado envia um scancode, basicamente uma sequência de números que identifica cada tecla. Scancodes são mapeados para códigos-chave. Cada código de tecla corresponde a uma função que define como o programa deve reagir ao pressionar uma tecla específica. Observe que o Xorg e o console usam diferentes conjuntos de códigos-chave. Não sei muito sobre o Wayland, mas talvez ele também use seu próprio conjunto de códigos de acesso. Os códigos-chave são mapeados para símbolos-chave. Os símbolos principais permitem que os desenvolvedores trabalhem com o teclado em um nível mais alto de abstração.
Você pode ver os scancodes e keycodes no console executando showkey --scancode
e showkey --keycode
respectivamente. No Xorg você deve usar xev
para o último.
Esses níveis de abstração permitem criar esquemas de mapeamento flexíveis e complexos que influenciam diferentes partes do seu ambiente Linux. EsseArtigo do ArchWikicontém muitas informações sobre técnicas de mapeamento e você deve lê-lo se quiser saber mais.
Também há muitosartigosespalhados pela Internet que explicam como os teclados funcionam em baixo nível. Realmente não importa se o artigo foi escrito em 1999 ou 2010 - poucas coisas mudaram nos teclados desde então, mas tenha em mente que os dispositivos USB HID funcionam de maneira diferente dos teclados PS/2 'clássicos'.