Como funcionam as teclas Fn?

26

Eu gosto de saber como as Fnchaves funcionam no meu laptop. Eu acho que existe um módulo do kernel que pega a Fnchave e chama alguns scripts para fazer alguma coisa. No meu laptop, Fn+ F2alterna a energia do fio sem fio e do dente azul.

isso é resultado de acpi_listen, quando eu pressiono Fn+F2

hotkey ATKD 0000005d 00000019
hotkey ATKD 0000007e 00000009

e, folloing é saída de xevpara Fn+F2

keycode 238 press
keycode 238 release
keycode 237 press
keycode 237 release

Eu acho que sempre que eu pressionei Fn+ F2dois eventos são pulados. Tentei encontrar quais ações são executadas para essas chaves. qualquer idéia apreciada;)

soroosh
fonte

Respostas:

26

A Synetech fornece uma explicação muito legível sobre as Fnchaves aqui

Detalhes técnicos

Quando você pressiona uma tecla do teclado, o controlador do teclado (um pequeno chip de IC dentro do teclado) detecta o circuito elétrico e o processa para decodificar qual tecla foi pressionada e depois envia o scancode para a placa - mãe . O sistema operacional recebe o scancode do BIOS e, em seguida, executa qualquer ação necessária para processar o pressionamento de tecla.

Com a maioria das chaves, isso é bastante simples. Se você pressionar a A tecla, o controlador do teclado envia o scancode para a placa-mãe, que passa para o sistema operacional que, por sua vez, normalmente imprime 'A'. (Se o sistema operacional detectar que uma das teclas modificadoras está pressionada no momento, poderá fazer algo diferente. Na verdade, você pode configurá-lo para fazer o que quiser quando a Atecla for pressionada com ou sem modificadores.)

Agora a Fnchave é especial. Quando você pressiona por si só, nada acontece porque é exclusivamente uma tecla modificadora e não se destina (geralmente) a fazer algo por si só. Quando você o pressiona e pressiona outra tecla, o controlador do teclado detecta isso e olha em sua tabela interna para ver se é uma combinação conhecida. Se o combo não estiver na tabela, ele será ignorado, mas se o combo estiver na tabela, ele pesquisará o scancode associado e o enviará.

O que o sistema operacional acaba vendo? Ele não vê o scancode para a Fnchave e o scancode para a outra chave. Em vez disso, ele vê um único scancode associado a qualquer função que o Fn-combo tenha sido definido. Por exemplo, se o fabricante do laptop configurou o Fn+ Down Arrowcombo para reduzir o volume, o sistema operacional verá o scancode associado ao Volume Down, que alguns teclados realmente possuem.

Observe também que a Fnchave funciona independentemente do sistema operacional.

Além disso, este artigo pode ajudar a apontar na direção certa:

O kernel tem o seu próprio scancodea keycodetabela de mapeamento, por isso mapeia um certo scancode a um código de acesso. Você pode olhar em /usr/include/linux/input.h para ver o que seu kernel usa para o scancode no mapeamento de código de chave - é chamado de keymap.


Postscript

Talvez eu precise renegar um pouco a afirmação anterior de que as Fnchaves funcionam totalmente independentemente do sistema operacional; sem entrar em mais detalhes técnicos aqui, parece que o seu sistema operacional pode não "suportar" todas ou algumas das teclas do Fnteclado, veja, por exemplo:

noz sobre natty
fonte
1
Obrigado, informações interessantes sobre as teclas Fn. Na verdade, eu quero encontrar com que parte do SO lidar scancodecom, por exemplo, "keycode 238".
soroosh
3
Talvez este artigo possa ajudar você a apontar na direção certa? "O kernel tem o seu próprio scancodea keycodetabela de mapeamento, por isso mapeia um certo scancode a um código de acesso Você pode olhar para /usr/include/linux/input.h para ver o que seus usos do kernel para scancode para o mapeamento de código de acesso -. Ele é chamado de keymap. "
noz sobre natty
1
Esse artigo é perfeito, Isso é o que eu estou procurando
soroosh