Resposta parcial: o mapeamento xmodmap
funciona corretamente. Como mostra xev
, você recebe keysym 0xffbe
, que é F1
, como deveria ser.
Então a questão é (1) porque ainda muda o brilho e (2) porque retorna o código de tecla 232 (para KEY_BRIGHTNESSDOWN
) ao invés daquele para a tecla F1 (67).
Para (1), eu suspeito que o Ubuntu rode algo por padrão, o lê diretamente de /dev/input
ao invés de processar eventos X, e isso está processando a chave não importa o que xmodmap
diga. Você não disse qual ambiente de área de trabalho você executa (Gnome?). Você pode procurar com lsof
para um processo que leia diretamente a /dev/input/eventX
source (você obteve o número X de evtest
, os números podem mudar entre as inicializações). Você também pode testar essa teoria executando evtest --grab /dev/input/eventX
: Isso tornará evtest
o programa exclusivo para processar os eventos, então quando você pressionar Fn + F1, ele ainda deverá mostrar KEY_BRIGHTNESSDOWN
, mas o brilho do seu PC / Laptop tela deve permanecer o mesmo.
Quanto a (2), pesquisando o nome da marca mostra que é um teclado Bluetooth. Isso significa que é provável que seja um dispositivo HID. Você pode depurar o analisando dmesg
para identificar o arquivo de dispositivo hidraw
correspondente e o identificador bluetooth. Então faça
mount -t debugfs none /sys/kernel/debug
como root e dê uma olhada em sys/kernel/debug/hid/*/rdesc
para o dispositivo correto (veja os subdiretórios disponíveis). Se você não conseguir entender, coloque-o em um pastebin e edite a pergunta com o link. Além disso, despeje eventos HID brutos usando hexdump -C /dev/hidrawX
, pressionando Fn e F1, F2, etc. várias vezes. Isso deve lhe dar uma ideia do motivo pelo qual o kernel traduz isso da maneira como funciona.
Editar
Olhando para o dump do hidraw, o teclado produz corretamente os scancodes 3a
, 3b
etc. para as teclas de função, conforme descrito no descritor HID.
Portanto, o problema deve estar na camada de conversão HID para entrada.
Você pode interrogar essa camada via ioctls. Não há nenhuma ferramenta pública para isso, mas posso colocar uma no github quando estiver pronto.
A ica maneira de definir este mapeamento que eu conheo via o banco de dados udev hwdb
como descrito, e. aqui .
Então, eu diria quem tem algum pacote instalado que fornece uma entrada de banco de dados para mapear F1 para controle de brilho, e que também fornece um programa para reagir a isso monitorando diretamente /dev/input/event*
. Tente ver se você pode encontrá-lo em seu sistema. lsof
pode ajudar.