Linux가 USB 입력 장치를 키보드로 듣지 못하게하면서 프로그램으로 이벤트를 캡처 할 수 있습니까?


11

/dev/input/event0( /dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd)에 USB 바코드 스캐너가 있는데 바코드를 스캔하면 키 누르기 이벤트가 전송됩니다. libdevinput Ruby 라이브러리를 사용하여 이러한 키 누르기를 캡처하고 있습니다 . 문제는 각 바코드가 사용자 이름으로 입력되고 그 후에 Raspberry Pi에서 암호로 입력되어 로그인 시도가 많이 실패한다는 것입니다. (라즈베리 파이는 헤드리스이며 전자 레인지 안에 있습니다.)

Linux가 바코드 스캐너를 입력 장치로 보지 못하게하려면 어떻게해야합니까? 아니면 다른 더 나은 해결책이 있습니까?


4
전자 제품을 전자 레인지에 넣지 않는 것이 좋습니다. 확실히 실행중인 것은 아닙니다.
이그나시오 바스케스-아 브람스

1
그것은 분명히이 질문의 가장 "wtf"부분입니다.
Bratchley

1
패러데이 케이지가 저렴합니까? 이 지역에는 많은 RF가있을 수 있습니다.
찰스 브리지

4
하하, 전자 렌지가 아닙니다. 모든 것이 전자 레인지의 컨트롤러 PCB 뒤에 있으며 라즈베리 파이를 요리하려고하지 않습니다. 요리 지침, 음성 제어 및 재 설계된 터치 패드를위한 바코드 스캐너를 추가하고 있습니다.
ndbroadbent

답변:


6

EVIOCGRAB ioctl을 장치 로 보내야한다는 것을 알았습니다.이 장치는 독점적으로 사용 합니다.

Ruby에서이를 수행하는 방법은 다음과 같습니다.

#!/usr/bin/env ruby
BARCODE_SCANNER = "/dev/input/by-id/usb-Metrologic_Metrologic_Scanner-event-kbd"

require 'rubygems'
require 'libdevinput'
require 'ffi'
require 'ffi/tools/const_generator'

# We need access to the file
DevInput.class_eval { attr_reader :dev }

# Look up value of EVIOCGRAB constant
cg = FFI::ConstGenerator.new('input') do |gen|
  gen.include('linux/input.h')
  gen.const(:EVIOCGRAB, '%u', '(unsigned)')
end
EVIOCGRAB = cg['EVIOCGRAB'].to_i

scanner = DevInput.new(BARCODE_SCANNER)
# Send EVIOCGRAB to scanner, which grabs it for exclusive use by our process
scanner.dev.ioctl(EVIOCGRAB, 1)


puts "Waiting for events..."
scanner.each do |event|
  # Ignore everything except key press events
  next unless event.type == 1 && event.value == 1
  puts "Key: #{event.code_str}"
end

참고 : libdevinputgem ffi, 및 Linux 헤더 를 설치해야합니다 . 3.2.0및 사이에 Linux 버전을 사용하는 경우 부품을로 3.6.11대체 할 수 있으며 Linux 헤더 가 필요하지 않습니다 .FFI::ConstGeneratorEVIOCGRAB = 1074021776ffi


2

어떻게 든 이 문제 와 비슷한 소리가 들리 므로이 해결책을 시도해보십시오  . 문제를 올바르게 이해하면 바코드 스캐너가 수행 할 때 "가상 코어 키보드"의 슬레이브 포인터로 나타납니다

xinput --list

그런 다음 ID를 가져 와서 플로팅하도록 강제하면 도움이 될 수 있습니다.

xinput float <id>

나는 OP가 X가 아닌 콘솔에서 이것을보고 있다고 생각하지만 X에서는 이것이 작동해야합니다.
derobert

아 맞아 게다가 그는 이미 ... 해결책을 발견했다
스키 피 르 그랜드 Gourou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.