J'ai un lecteur de codes-barres USB sur /dev/input/event0
( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd
), et la numérisation d'un code-barres provoque l'envoi d'événements de pression de touche. Je capture ces touches à l'aide de la bibliothèque Libdevinput Ruby, qui fonctionne très bien. Le problème est que chaque code-barres est également entré en tant que nom d'utilisateur, puis mot de passe sur le Raspberry Pi, ce qui entraîne de nombreuses tentatives de connexion infructueuses. (Le Raspberry Pi sera sans tête et à l'intérieur d'un micro-ondes.)
Comment puis-je empêcher Linux de voir le scanner de codes-barres comme un périphérique d'entrée et que mon programme soit le seul consommateur d'événements? Ou existe-t-il une solution différente et meilleure?
Réponses:
J'ai découvert que je devais envoyer un ioctl EVIOCGRAB à l'appareil, qui le saisit pour un usage exclusif .
Voici comment le faire dans Ruby:
Remarque : vous devrez installer les en- têtes
libdevinput
gemffi
, et Linux. Si vous utilisez une version Linux entre3.2.0
et3.6.11
, vous pouvez remplacer laFFI::ConstGenerator
pièce parEVIOCGRAB = 1074021776
, puis vous n'avez pas besoin d'enffi
-têtes Linux.la source
Cela ressemble quelque peu à ce problème , alors j'essaierais cette solution : si je comprends bien votre problème, le scanner de code-barres devrait apparaître comme un pointeur esclave du "clavier virtuel" lorsque vous le faites.
Alors peut-être obtenir son ID et le forcer à flotter pourrait aider:
la source