Ich habe einen USB-Barcode-Scanner unter /dev/input/event0
( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd
), und beim Scannen eines Barcodes werden Tastendruckereignisse gesendet. Ich nehme diese Tastendrücke mit der libdevinput Ruby-Bibliothek auf, die hervorragend funktioniert. Das Problem ist, dass jeder Barcode auch als Benutzername und anschließend als Passwort auf dem Raspberry Pi eingegeben wird, was zu vielen fehlgeschlagenen Anmeldeversuchen führt. (Der Raspberry Pi ist kopflos und befindet sich in einer Mikrowelle.)
Wie kann ich verhindern, dass Linux den Barcode-Scanner als Eingabegerät sieht, und mein Programm ist der einzige Event-Konsument? Oder gibt es eine andere, bessere Lösung?
Antworten:
Ich habe herausgefunden, dass ich ein EVIOCGRAB ioctl an das Gerät senden muss, das es zur ausschließlichen Verwendung abruft .
So geht's in Ruby:
Hinweis : Sie müssen die
libdevinput
gem-ffi
und Linux-Header installieren . Wenn Sie eine Linux-Version zwischen3.2.0
und verwenden3.6.11
, können Sie dasFFI::ConstGenerator
Teil durch ersetzenEVIOCGRAB = 1074021776
, und dann benötigen Sie keineffi
Linux-Header.quelle
Klingt irgendwie ähnlich wie dieses Problem , daher würde ich diese Lösung ausprobieren : Wenn ich Ihr Problem richtig verstehe, sollte der Barcode-Scanner in diesem Fall als Slave-Zeiger auf "Virtual Core Keyboard" angezeigt werden
Dann könnte es vielleicht helfen, seine ID zu erhalten und sie zum Schweben zu zwingen:
quelle