GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo distinguir la entrada de diferentes teclados?

Si usa Linux, la mejor manera de distinguir entre dispositivos de entrada es usar la interfaz de eventos de Linux. Una vez que se descodifica la entrada específica del hardware de un dispositivo, se convierte en una estructura de evento intermedia específica de Linux y está disponible al leer uno o más de los dispositivos de caracteres en /dev/input/ . Por cierto, esto es completamente independiente del lenguaje de programación que utilices.

Cada dispositivo de hardware obtiene su propio /dev/input/eventX dispositivo, y también hay agregados (por ejemplo, /dev/input/mice que representa el movimiento de todos los ratones en el sistema). Su sistema también puede tener /dev/input/by-path y /dev/input/by-id .

Hay un ioctl llamado EVIOCGNAME que devuelve el nombre del dispositivo como una cadena legible por humanos, o puede usar algo como /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse .

Abres el dispositivo y cada vez que llega un evento desde el hardware de entrada, obtendrás un paquete de datos. Si puede leer C, puede estudiar el archivo /usr/include/linux/input.h que muestra exactamente cómo funciona esto. Si no lo hace, puede leer esta pregunta que proporciona toda la información que necesita.

Lo bueno de la interfaz de eventos es que simplemente descubre qué dispositivo necesita y puede leer la entrada de ese dispositivo de entrada solo , ignorando todos los demás. También recibirá notificaciones sobre teclas, botones y controles que normalmente no recibiría simplemente leyendo el flujo de caracteres 'cocinados' desde una terminal:incluso teclas inactivas como Shift , etc.

Lo malo es que la interfaz de eventos no devuelve caracteres 'cocinados', solo usa códigos numéricos para las teclas (los códigos correspondientes a cada tecla se encuentran en el archivo de encabezado antes mencionado, pero también en la fuente de Python de event.py. Si su dispositivo de entrada tiene teclas/botones inusuales, es posible que deba experimentar un poco hasta obtener los números correctos.


Un enfoque alternativo (si su "teclado" no tiene muchas teclas, muchos dispositivos fingen ser teclados) es aplicar una asignación de teclas a cada teclado específicamente y asegurarse de que las teclas se distingan.

Esto se describe aquí:https://superuser.com/questions/760602/how-to-remap-keys-under-linux-for-a-specific-keyboard-only. El punto principal es el setxkbmap toma un argumento de dispositivo.

Si está utilizando el enfoque de entrada sin procesar, lsinput encontrará su dispositivo sin procesar por usted.


Linux
  1. ¿Cómo hacer que `date` genere la hora de una zona horaria diferente?

  2. Linux:¿cómo ejecutar un gestor de arranque desde Linux?

  3. Linux:¿cómo cambiar de forma robusta el dispositivo de salida Pulseaudio desde la línea de comandos?

  4. ¿En qué se diferencia Ubuntu de Debian?

  5. Cómo actualizar de Fedora 32 a Fedora 33

Cómo escribir emoji en Linux

Telnet frente a SSH:¿En qué se diferencia SSH de Telnet?

Cómo actualizar Ubuntu Server a 20.04 desde 18.04

¿Cómo evitar que se abran las ventanas emergentes de Unable to open MTP device?

¿Cómo montar un dispositivo en Linux?

¿Cómo elimino el dispositivo de caché de bcache?