Mam skaner kodów kreskowych USB w /dev/input/event0
( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd
), a zeskanowanie kodu kreskowego powoduje wysłanie zdarzenia naciśnięcia klawisza. Rejestruję te naciśnięcia klawiszy za pomocą biblioteki Ruby libdevinput , która działa świetnie. Problem polega na tym, że każdy kod kreskowy jest również wprowadzany jako nazwa użytkownika, a następnie hasło do Raspberry Pi, co powoduje wiele nieudanych prób logowania. (Raspberry Pi będzie bezgłowy i będzie w kuchence mikrofalowej.)
Jak mogę powstrzymać Linuksa przed postrzeganiem skanera kodów kreskowych jako urządzenia wejściowego i pozwolić, aby mój program był jedynym konsumentem zdarzeń? A może istnieje inne, lepsze rozwiązanie?
Odpowiedzi:
Dowiedziałem się, że muszę wysłać ioctl EVIOCGRAB do urządzenia, które pobiera je do wyłącznego użytku .
Oto jak to zrobić w Ruby:
Uwaga : musisz zainstalować nagłówki
libdevinput
gemffi
i Linux. Jeśli używasz wersji Linux między3.2.0
i3.6.11
, możesz zamienićFFI::ConstGenerator
część naEVIOCGRAB = 1074021776
, a następnie nie potrzebujeszffi
nagłówków Linux.źródło
Brzmi trochę podobnie do tego problemu , więc wypróbuję to rozwiązanie : jeśli dobrze rozumiem twój problem, skaner kodów kreskowych powinien pojawić się jako wskaźnik slave „Wirtualnej klawiatury rdzenia”, kiedy to zrobisz
Wtedy może uzyskanie jego identyfikatora i zmuszenie go do unoszenia się na wodzie może pomóc:
źródło