Histórico: o teclado é um dispositivo USB HID , e o kernel reconhece corretamente os eventos USB da HID para as teclas deslizantes e os converte em códigos de tecla ( KEY_ZOOMIN
e KEY_ZOOMOUT
). Então, a esse respeito, já está "trabalhando": você pode receber os eventos e fazer algo útil com isso.
No entanto, as traduções para teclado X suportam apenas códigos de teclas até 255 (consulte esta resposta , é uma limitação do protocolo X). Então você não pode convertê-los em keyyms X. (E talvez não seja isso o que você quer, porque o zoom geralmente é feito pelos eventos de botão do mouse nos aplicativos, ou seja, os botões 4 e 5. Assim, mesmo que você o convertesse em keyfitters, eles não aumentariam ou diminuiriam). / p>
Mas a partir do que você tentou fazer, parece que você deseja remapear para as teclas acima e para baixo , idênticas às teclas de seta para cima e para baixo que já estão disponível como outras teclas no teclado.
-
Como mencionado no answer já vinculado, para habilitar o X a remapear códigos de teclas maiores que 255, alguém criou uma variante corrigida do driver X
evdev
. Então você precisa compilar e instalar esta variante corrigida, e então a opçãoevent_key_remap
será reconhecida. Ele não será reconhecido pelo driver padrãoevdev
, por isso não é surpresa que sua entradaxorg.conf
não tenha feito nada.Esse é provavelmente o método mais limpo.
-
No processo de assumir todo o Linux,
systemd
aparentemente também possui seu próprio banco de dados de hardware e pode sobrescrever mapeamentos de teclado. Eu não tenho certeza em qual nível do kernel isso está funcionando, então eu não sei se isso ajudará, e o formato para o "banco de dados de hardware" não parece estar documentado. Então eu não posso te ajudar muito a esse respeito.No entanto, o formato de correspondência parece ter mudado , então talvez você tenha mais sorte se incluir o número do barramento, conforme descrito.
Editar : Lendo o código-fonte do kernel, descobri que cada dispositivo de entrada tem seu próprio scancode (dependente do hardware, até 8 bytes, embora em muitos lugares apenas 1/2/4 bytes no kernel são transferidos) para mapeamentos de conversão de código de chamada (o que você vê com
evtest
). Valores de código grandes podem ser definidos e obter comEVIOCGKEYCODE_V2
eEVIOCSKEYCODE_V2
ioctls no dispositivo. Uma ferramenta geral semelhante axmodmap
ouloadkeys/dumpkeys
parece não existir, embora algumas ferramentas relacionadas ao receptor de IR aparentemente usem esses ioctls. Se é assim que funciona o banco de dadossystemd
, uma alternativa mais flexível seria usar essa ferramenta em uma regraudev
(também mais simples para testes). Eu escrevi um programa C rápido para descarregar o mapeamento, talvez eu devesse colocá-lo no github ... -
Em princípio, você já pode processar os eventos com seus próprios programas ou scripts e fazer o que quiser. Por exemplo, execute
evtest
, analise a saída com um script bash e invoquexdotool
com o pressionamento de botão de 4 ou 5 para obter o mesmo efeito que uma roda de rolagem do mouse para os botões do controle deslizante. Etc., pp. (Houve uma questão de troca de pilha com um script rudimentar para um propósito semelhante, mas não posso encontrá-lo agora. Se necessário, posso pesquisar um pouco mais).