Remapeamento de teclado multimídia

Remapeamento de teclado multimídia

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:

  1. 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
  1. 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
  1. 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 ------------
  1. /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
  1. 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/

  1. use sudo evtestpara 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"
  1. use sudo evemu-describepara 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
  1. 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*

  1. você não precisa reiniciar o sistema, apenas faça:
$ sudo systemd-hwdb update
$ sudo udevadm trigger
  1. você pode verificar se o seu teclado foi mapeado corretamente usando $ udevadm info /dev/input/event20(substitua event20 pelo evento do seu teclado)

informação relacionada