Eu tenho um scanner de código de barras USB em /dev/input/event0
( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd
) e a digitalização de um código de barras faz com que ele envie eventos de pressionamento de tecla. Estou capturando essas teclas pressionadas usando a biblioteca libdevinput Ruby, que funciona muito bem. O problema é que cada código de barras também é inserido como um nome de usuário e, posteriormente, uma senha no Raspberry Pi, causando muitas tentativas falhas de login. (O Raspberry Pi ficará sem cabeça e dentro de um microondas.)
Como posso impedir que o Linux veja o scanner de código de barras como um dispositivo de entrada e que meu programa seja o único consumidor de eventos? Ou existe uma solução diferente e melhor?
Respostas:
Descobri que preciso enviar um ioctl EVIOCGRAB para o dispositivo, que o agarra para uso exclusivo .
Veja como fazer isso em Ruby:
Nota : Você precisará instalar os cabeçalhos
libdevinput
gemffi
, e Linux. Se você estiver usando uma versão do Linux entre3.2.0
e3.6.11
, poderá substituir aFFI::ConstGenerator
peça eEVIOCGRAB = 1074021776
, em seguida, não precisará deffi
cabeçalhos ou Linux.fonte
Parece algo semelhante a esse problema , então eu tentaria esta solução : se eu entendi corretamente o seu problema, o scanner de código de barras deve aparecer como um ponteiro escravo do "Virtual core keyboard" quando você o faz
Então, talvez obter seu ID e forçá-lo a flutuar poderia ajudar:
fonte