Saya memiliki pemindai kode batang USB di /dev/input/event0
( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd
), dan pemindaian kode batang menyebabkannya mengirim acara yang menekan tombol. Saya menangkap penekanan tombol ini menggunakan pustaka Ruby libdevinput , yang bekerja sangat baik. Masalahnya adalah bahwa setiap barcode juga dimasukkan sebagai nama pengguna, dan selanjutnya kata sandi pada Raspberry Pi, menyebabkan banyak upaya login yang gagal. (The Raspberry Pi akan tanpa kepala, dan di dalam microwave.)
Bagaimana saya bisa menghentikan Linux dari melihat pemindai barcode sebagai perangkat input, dan program saya menjadi konsumen acara tunggal? Atau adakah solusi yang berbeda dan lebih baik?
Jawaban:
Saya mengetahui bahwa saya perlu mengirim EVIOCGRAB ioctl ke perangkat, yang mengambilnya untuk penggunaan eksklusif .
Berikut cara melakukannya di Ruby:
Catatan : Anda harus menginstal
libdevinput
gemffi
,, dan header Linux. Jika Anda menggunakan versi Linux antara3.2.0
dan3.6.11
, Anda dapat menggantiFFI::ConstGenerator
bagian denganEVIOCGRAB = 1074021776
, dan kemudian Anda tidak perluffi
atau header Linux.sumber
Kedengarannya mirip dengan masalah ini , jadi saya akan mencoba solusi ini : jika saya memahami dengan benar masalah Anda, pemindai barcode akan muncul sebagai penunjuk slave "Virtual core keyboard" ketika Anda melakukannya.
Maka mungkin mendapatkan ID-nya dan memaksanya mengapung dapat membantu:
sumber