Tengo un control remoto G7BTS, que tiene teclado y botones multimedia. La mayoría de sus botones funcionan bien excepto el botón "OK".
El botón Aceptar tiene un código clave 353, que significa KEY_SELECT. Pero mi ubuntu 20.04 no lo reconoce.
A continuación se muestran algunas investigaciones que he realizado:
sudo evtest
producción:
/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/*
producción:
/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
producción:
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
Intenté reasignar el botón Aceptar para "entrar".
Contenido del archivo 60-keyboard.hwdb:
# G7BTS
evdev:input:b0005v045Ep0041*
KEYBOARD_KEY_c0041=enter
sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'
producción:
KEYBOARD_KEY_c0041=enter
Hasta ahora, todavía no puedo ver ningún resultado en xev cuando presiono el botón OK.
Cualquier sugerencia y ayuda será apreciada.
Respuesta1
Gracias a todos.
Me tomó varios días encontrar la solución, finalmente encontré el camino correcto.
Referencia
Asignar códigos de escaneo a códigos clave
Fondo
La versión 11 del protocolo X solo admite códigos clave de un solo byte. Por lo tanto, los códigos clave superiores a 255 se ignoran. Ubuntu 20.04 LTS, hasta ahora, todavía usa la versión 11 del protocolo X.
Mi teclado remoto G7BTS tiene un botón "OK". Este botón tiene un código clave de 353. Dentro de “xev”, no sucede nada cuando se presiona este botón.
Solución
Brevemente, la solución es crear un archivo de configuración hwdb, que se utiliza para reasignar ciertas claves a otras claves.
udev
udev proporciona una función incorporada llamada hwdb para mantener el índice de la base de datos de hardware en /etc/udev/hwdb.bin. La base de datos se compila a partir de archivos con extensión .hwdb ubicados en los directorios /usr/lib/udev/hwdb.d/, /run/udev/hwdb.d/ y /etc/udev/hwdb.d/. El archivo de mapeo predeterminado de códigos de escaneo a códigos clave es /usr/lib/udev/hwdb.d/60-keyboard.hwdb.
Dispositivos de entrada genéricos (también teclados USB) identificados por las modalidades del kernel USB:
evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
donde <bus_id>, <vendor_id> y <version_id> son los ID de versión, producto y proveedor en mayúsculas hexadecimales de 4 dígitos
Cómo encontrar esos identificadores anteriores es la clave
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
Otra cosa de importación es obtener el código de escaneo del botón "Aceptar".
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 atención a "/dev/input/event11"
sudo evtest /dev/input/event11
Luego presione el botón "OK" y la salida estará debajo
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 atención al "valor c0041". Este valor c0041 es el código de escaneo del botón "OK".
Crea el archivo hwdb
Ahora tenemos los identificadores y el código de escaneo que necesitamos. Colóquelos en los “Dispositivos de entrada genéricos (también teclados USB) identificados por los modalias del kernel USB” arriba, y finalmente tenemos el archivo de configuración G7BTS.hwdb a continuación:
evdev:input:b0005v045Ep0041e0300*
KEYBOARD_KEY_c0041=enter
En el contexto, el botón "Aceptar" se asigna a la tecla "Intro". Puede asignarlo a cualquier clave que desee.
Poner archivo en destino
sudo mv G7BTS.hwdb /etc/udev/hwdb.d/
Actualizar
sudo udevadm hwdb --update
sudo udevadm trigger --verbose
Prueba
sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'
el resultado es
KEYBOARD_KEY_c0041=enter
El fin
Esos son todos los pasos para reasignar claves. Esas reasignaciones aún funcionan después del reinicio.
Respuesta2
Obtuve un teclado externo funcionando en Ubuntu 20.04 usando la información dehttps://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/
- Úselo
sudo evtest
para encontrar información sobre su 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"
- utilícelo
sudo evemu-describe
para encontrar las propiedades del teclado, incluidos los ceros iniciales. En la salida puedes encontrar algo como:
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
- cree el archivo .hwdb como lo hizo peroincluir todos los 000 principales, yponer cualquier símbolo hexadecimal en mayú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*
- No es necesario que reinicies tu sistema, solo haz:
$ sudo systemd-hwdb update
$ sudo udevadm trigger
- puedes verificar si tu teclado se ha asignado correctamente usando
$ udevadm info /dev/input/event20
(reemplaza event20 con el evento de tu teclado)