Eu tenho um controle remoto G7BTS, que possui teclado e botões multimídia. A maioria dos botões funciona bem, exceto o botão "OK".
O botão OK possui um código de acesso 353, que significa KEY_SELECT. Mas meu Ubuntu 20.04 não o reconhece.
Abaixo estão algumas pesquisas que fiz:
sudo evtest
saída:
/dev/input/event9: G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
grep "" /sys/class/input/event11/device/id/*
saída:
/sys/class/input/event11/device/id/bustype:0005
/sys/class/input/event11/device/id/product:0041
/sys/class/input/event11/device/id/vendor:045e
/sys/class/input/event11/device/id/version:0300
sudo evtest /dev/input/event11
saída:
Testing ... (interrupt to exit)
Event: time 1640250050.701930, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640250050.701930, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1
Event: time 1640250050.701930, -------------- SYN_REPORT ------------
/etc/udev/hwdb.d/60-keyboard.hwdb
Tentei remapear o botão OK para 'entrar'.
Conteúdo do arquivo 60-keyboard.hwdb:
# G7BTS
evdev:input:b0005v045Ep0041*
KEYBOARD_KEY_c0041=enter
sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'
saída:
KEYBOARD_KEY_c0041=enter
Até agora, ainda não consigo ver nenhuma saída no xev quando pressiono o botão OK.
Qualquer sugestão e ajuda serão apreciadas.
Responder1
Obrigado a todos.
Levei vários dias para descobrir a solução, finalmente encontrei o caminho certo.
Referência
Mapear scancodes para códigos-chave
Fundo
A versão 11 do protocolo X suporta apenas códigos de chave de byte único. Portanto, os códigos-chave acima de 255 são ignorados. O Ubuntu 20.04 LTS, até agora, ainda usa a versão 11 do protocolo X.
Meu teclado remoto G7BTS possui um botão “OK”. Este botão possui um código de chave 353. Dentro de “xev”, nada acontece quando este botão é pressionado.
Solução
Resumindo, a solução é criar um arquivo de configuração hwdb, que é usado para remapear certas chaves para outras chaves.
udev
O udev fornece uma função integrada chamada hwdb para manter o índice do banco de dados de hardware em /etc/udev/hwdb.bin. O banco de dados é compilado a partir de arquivos com extensão .hwdb localizados nos diretórios /usr/lib/udev/hwdb.d/, /run/udev/hwdb.d/ e /etc/udev/hwdb.d/. O arquivo de mapeamento padrão de scancodes para keycodes é /usr/lib/udev/hwdb.d/60-keyboard.hwdb.
Dispositivos de entrada genéricos (também teclados USB) identificados pelas modalias do kernel usb:
evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
onde <bus_id>, <vendor_id> e <version_id> são os IDs de fornecedor, produto e versão em letras maiúsculas hexadecimais de 4 dígitos
Como encontrar os IDs acima é a chave
install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer Control
Device Information
Name G7BTS Comsumer Control
Type keyboard
Bus 0x0005
Vender 0x045e
Product 0x0041
Version 0x0300
Outra coisa importante é obter o código de digitalização do botão “OK”.
install evtest
sudo apt-get install evtest
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Sleep Button
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
/dev/input/event4: SynPS/2 Synaptics TouchPad
/dev/input/event5: TPPS/2 IBM TrackPoint
/dev/input/event6: ThinkPad Extra Buttons
/dev/input/event7: Video Bus
/dev/input/event8: Integrated Camera: Integrated C
/dev/input/event9: G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
/dev/input/event13: HDA Intel PCH Mic
/dev/input/event14: HDA Intel PCH Dock Mic
/dev/input/event15: HDA Intel PCH Headphone
/dev/input/event16: HDA Intel PCH Dock Headphone
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19: HDA Intel PCH HDMI/DP,pcm=8
Select the device event number [0-19]: ^C
Preste atenção em “/dev/input/event11”
sudo evtest /dev/input/event11
Em seguida, pressione o botão “OK” e a saída estará abaixo
Event: time 1640238746.775220, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640238746.775220, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0
Event: time 1640238746.775220, -------------- SYN_REPORT ------------
Preste atenção ao “valor c0041“. Este valor c0041 é o código de digitalização do botão “OK”.
Faça o arquivo hwdb
Agora temos os IDs e o código de verificação de que precisamos. Coloque-os em “Dispositivos de entrada genéricos (também teclados USB) identificados pelas modalias do kernel usb” acima, e por fim temos o arquivo de configuração G7BTS.hwdb abaixo:
evdev:input:b0005v045Ep0041e0300*
KEYBOARD_KEY_c0041=enter
No contexto, o botão “OK” é mapeado na tecla “enter”. Você pode mapeá-lo em qualquer chave que desejar.
Coloque o arquivo no destino
sudo mv G7BTS.hwdb /etc/udev/hwdb.d/
Atualizar
sudo udevadm hwdb --update
sudo udevadm trigger --verbose
Teste
sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'
o resultado é
KEYBOARD_KEY_c0041=enter
O fim
Essas são todas as etapas para remapear as chaves. Esses remapeamentos ainda funcionam após a reinicialização.
Responder2
Eu tenho um teclado externo funcionando no Ubuntu 20.04 usando as informações dehttps://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/
- use
sudo evtest
para encontrar informações sobre o seu teclado, como:
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
Input device name: "Keychron K6 Keyboard"
- use
sudo evemu-describe
para encontrar as propriedades do teclado, incluindo os zeros à esquerda. Na saída você pode encontrar algo como:
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
- crie o arquivo .hwdb como você fez, masincluir todos os 000 principais, ecoloque quaisquer símbolos hexadecimais em maiúsculascomo:
# Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
# evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
evdev:input:b0005v05ACp024F*
- você não precisa reiniciar o sistema, apenas faça:
$ sudo systemd-hwdb update
$ sudo udevadm trigger
- você pode verificar se o seu teclado foi mapeado corretamente usando
$ udevadm info /dev/input/event20
(substitua event20 pelo evento do seu teclado)