Linux를 사용하는 경우 입력 장치를 구별하는 가장 좋은 방법은 Linux Event Interface 를 사용하는 것 입니다. 장치의 하드웨어 특정 입력이 디코딩 된 후에는 중간 Linux 특정 이벤트 구조로 변환되고 아래에있는 하나 이상의 문자 장치를 읽어서 사용할 수 있습니다 /dev/input/. 그건 그렇고, 이것은 사용하는 프로그래밍 언어와 완전히 독립적입니다.
각 하드웨어 장치에는 고유 한 /dev/input/eventX장치가 있으며 집계도 있습니다 (예 : /dev/input/mice시스템에있는 모든 마우스의 움직임을 나타냄). 시스템은 또한있을 수 있습니다 /dev/input/by-path와 /dev/input/by-id.
장치의 이름을 사람이 읽을 수있는 문자열로 반환 하는 ioctl호출 EVIOCGNAME이 있습니다 /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse. 또는 같은 것을 사용할 수 있습니다 .
장치를 열고 입력 하드웨어에서 이벤트가 도착할 때마다 데이터 패킷을받습니다. C를 읽을 수 있다면, /usr/include/linux/input.h이 것들이 어떻게 작동하는지 정확하게 보여주는 파일 을 연구 할 수 있습니다 . 그렇지 않은 경우 필요한 모든 정보를 제공하는 이 질문 을 읽을 수 있습니다.
이벤트 인터페이스의 좋은 점은 필요한 장치를 찾고 다른 입력 장치를 모두 무시하고 해당 입력 장치 에서만 입력을 읽을 수 있다는 것입니다. 또한 터미널에서 '요리 된'문자 스트림을 읽는 것만으로는 일반적으로하지 않는 키, 버튼 및 컨트롤에 대한 알림을받습니다 Shift.
나쁜 점은 이벤트 인터페이스가 '요리 된'문자를 반환하지 않고 키의 숫자 코드 만 사용한다는 것입니다 (각 키에 해당하는 코드는 앞에서 언급 한 헤더 파일뿐만 아니라 Python.event.py 소스에서도 찾을 수 있습니다). 입력 장치에 비정상적인 키 / 버튼이있는 경우 올바른 숫자를 얻을 때까지 조금 실험해야 할 수도 있습니다.