키보드를 시뮬레이트하는 USB 바코드 스캐너가 있습니다. 일단 연결되면 X는 제어권을 얻고 이를 일반 키보드처럼 처리하여 현재 초점이 맞춰진 창에 키보드 이벤트를 보냅니다.
이것은 내가 하고 싶은 일이 아니다. ASCII 입력 스트림에서 바코드를 읽고 처리하는 프로그램이 있습니다. 프로그램은 백그라운드에서 실행되며 사용자 인터페이스가 전혀 없습니다.
X에서 이 USB 키보드를 사용하지 않고 ASCII 스트림 장치로 매핑하도록 Linux를 구성하는 방법입니다. 이렇게 하면 이를 프로그램의 입력 장치로 리디렉션하고 입력 포커스 변경에 관계없이 바코드 판독 기능을 제공할 수 있습니다. 그리고 바코드는 현재 초점이 맞춰진 창으로 전혀 전달되어서는 안 됩니다.
또한 바코드 처리기를 루트로 실행하지 않는 것이 가장 좋습니다. 따라서 키보드 장치에는 모든 사람에 대한 읽기 권한이 있어야 합니다.
답변1
1) 키보드를 무시하도록 X를 구성하는 방법
바코드 스캐너를 조회 하는 데 사용되는 ID입니다 lsusb
(형식 0123:4567
). xorg.conf
파일을 생성하거나 수정합니다 (일반적으로 에서 /etc/X11/
). InputClass
방금 찾은 ID가 포함된 섹션을 추가합니다 .
Section "InputClass"
Identifier "barcode"
MatchUSBID "0123:4567"
Option "Ignore" "true"
EndSection
X를 다시 시작하고 Xorg.log
이 섹션에서 장치가 인식되고 무시되는지 확인하십시오.
2) 키 입력에서 ASCII(또는 기타) 코드로의 변환은 다양한 키보드 레이아웃, 데드 키, 사용자 정의 등을 허용하기 때문에 매우 복잡합니다. 이제 X 변환 레이어를 비활성화했으므로 해당 장치에서 키 누르기 및 키 놓기 /dev/input/eventX
이벤트를 수신할 수 있습니다. 숫자는 변경될 수 있습니다. 바코드 리더에는 /dev/input/by-id/
변경되지 않는 기호 링크가 있습니다 . 따라서 심볼릭 링크를 사용하십시오.
이 파일을 실행하면 evtest
생성되는 이벤트 유형을 확인할 수 있습니다. 바코드 판독기에 대한 매핑은 간단하므로 keyym에서 ASCII 코드로의 테이블 조회만으로 충분합니다. 자신의 프로그램에서 이러한 이벤트를 처리하거나, evtest
소스 코드를 보거나, 예를 들어여기. 장치를 읽고 표준 출력에서 ASCII를 생성한 다음 파이프 등을 사용하여 응용 프로그램에 통합하는 작은 C 프로그램을 작성할 수도 있습니다.
"ASCII 스트림 장치로 매핑"은 불가능합니다. Linux 커널에는 그러한 장치가 없습니다.
3) 권한 설정
udev
입력 장치에 대한 권한을 설정하려면 사용자 정의 규칙을 작성해야 합니다 . SUBSYSTEM
필수 일치 input
, ACTION
필수 일치 ADD
, 환경에는 ENV
장치와 일치하는 정보(세부 정보를 찾는 데 사용됨)가 포함되어야 하며 udevadm
새로 생성된 장치에 대해 을 OWNER
설정할 수 있습니다 GROUP
. 이건 좀 일반적인데MODE
/dev/input/eventX
어떻게, 더 구체적인 내용을 찾을 수 없습니다. 더 나은 튜토리얼을 보려면 Google을 이용하세요.