Tengo un escáner de código de barras USB en /dev/input/event0
( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd
), y escanear un código de barras hace que envíe eventos de pulsación de tecla. Estoy capturando estas pulsaciones de teclas usando la biblioteca libdevinput Ruby, que funciona muy bien. El problema es que cada código de barras también se ingresa como nombre de usuario y, posteriormente, como contraseña en la Raspberry Pi, lo que provoca muchos intentos fallidos de inicio de sesión. (La Raspberry Pi estará sin cabeza y dentro de un microondas).
¿Cómo puedo evitar que Linux vea el escáner de código de barras como un dispositivo de entrada y que mi programa sea el único consumidor del evento? ¿O hay una solución diferente y mejor?
Respuestas:
Descubrí que necesito enviar un EVIOCGRAB ioctl al dispositivo, que lo toma para uso exclusivo .
Aquí se explica cómo hacerlo en Ruby:
Nota : Deberá instalar la
libdevinput
gemaffi
y los encabezados de Linux. Si está utilizando una versión de Linux entre3.2.0
y3.6.11
, puede reemplazar laFFI::ConstGenerator
parte conEVIOCGRAB = 1074021776
, y luego no necesitaffi
encabezados de Linux.fuente
Suena de alguna manera similar a este problema , así que probaría esta solución : si entiendo correctamente su problema, el escáner de código de barras debería aparecer como un puntero esclavo del "Teclado de núcleo virtual" cuando lo haga
Entonces, tal vez obtener su ID y obligarlo a flotar podría ayudar:
fuente