У меня есть сканер штрих-кода USB в /dev/input/event0
( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd
), и сканирование штрих-кода заставляет его отправлять события нажатия клавиш. Я фиксирую эти нажатия клавиш с помощью библиотеки Ruby libdevinput , которая прекрасно работает. Проблема заключается в том, что каждый штрих-код также вводится как имя пользователя, а затем пароль на Raspberry Pi, что вызывает множество неудачных попыток входа в систему. (Raspberry Pi будет без головы и внутри микроволновки.)
Как я могу запретить Linux видеть сканер штрих-кода в качестве устройства ввода, и чтобы моя программа была единственным потребителем событий? Или есть другое, лучшее решение?
Ответы:
Я обнаружил, что мне нужно отправить EVIOCGRAB ioctl на устройство, которое захватывает его для эксклюзивного использования .
Вот как это сделать в Ruby:
Примечание : вам нужно установить
libdevinput
гемffi
и заголовки Linux. Если вы используете версию Linux между3.2.0
и3.6.11
, вы можете заменитьFFI::ConstGenerator
деталь наEVIOCGRAB = 1074021776
, и тогда вам не нужныffi
заголовки Linux или.источник
Звучит как-то похоже на эту проблему , поэтому я бы попробовал это решение : если я правильно понимаю вашу проблему, сканер штрих-кода должен появиться как ведомый указатель «Виртуальная клавиатура ядра», когда вы делаете
Тогда, возможно, получение его идентификатора и принудительное плавание может помочь:
источник