X에서 단독으로 사용되는 USB 키보드

X에서 단독으로 사용되는 USB 키보드

키보드를 시뮬레이트하는 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을 이용하세요.

관련 정보