내 목표는 Linux에서 마우스 입력을 얻는 것입니다. 이제 파일에서 입력을 얻으려고 합니다 /dev/input
. 내 특정 시스템에서는 이 파일이 /dev/input/event10
내 마우스에 해당하고 마우스 입력에 대해 EV_REL 및 EV_KEY 이벤트를 반환한다는 것을 알고 있습니다 . 그러나 나는 이것이 보편적이지 않으며 다른 /dev/input/event#
파일이 다른 장치에 해당한다는 것을 알고 있습니다. 나는 이 파일에 대해 알고 있지만 /dev/input/mice
분명히 이 파일은"레거시 시스템 해킹"이므로 사용이 권장되지 않는다고 가정합니다. 내 문제의 핵심은 어떤 입력 이벤트 파일이 마우스에 해당하는지 결정하는 것입니다. /proc/bus/input/devices
해당 장치에 해당하는 이벤트 파일을 검색해 보았지만 , 장치 이름에 '마우스'라는 단어 외에는 무엇을 위한 것인지 표시가 없는 것 같았습니다. 예를 들어. 마우스와 키보드. 제가 시도한 것은 이 파일을 통해 입력을 얻는 것뿐이었습니다. 그러나 입력을 얻기 위한 대체 시스템이 있다면 기꺼이 듣고 싶습니다.
답변1
답변이 늦었지만 나중에 누군가가 이 문제를 우연히 발견할 경우를 대비해 Linux 시스템에서 특정 유형의 장치를 (알고리즘적으로) 찾는 방법에 대한 요약이 있습니다.
Linux는 마우스, 키보드, 게임 컨트롤러 등을 구분하지 않습니다. 이론적으로 입력 장치는 모든 유형의 이벤트 데이터를 보낼 수 있으며 특정 유형의 제한 사항을 "준수"할 필요가 없습니다.하지만, 대부분의 실제 장치는 분명히 이와 같지 않습니다. 이것이 바로 sysfs가 장치의 "기능"이라고 하는 장치가 eventX 파일에 쓰는 데이터 유형에 대한 정보를 제공하는 이유입니다. 다음은 장치 기능에 대한 정보를 요약한 것입니다.
/sys/class/input/eventX/device/capabilities
9개의 텍스트 파일이 포함되어 있습니다. abs
, ff
, key
, led
, msc
, rel
, snd
및 sw
는 기록된 "이벤트 유형"에 해당합니다.여기. ev
기본적으로 0이 아닌 데이터가 포함된 다른 파일을 설명합니다.
각 파일에는 공백으로 구분된 16개 영역으로 구분된 ASCII 16진수 문자가 포함되어 있습니다. 16진수 문자를 읽고 이를 바이너리로 디코딩해야 합니다.오른쪽에서 왼쪽으로. 그룹에 16자 미만이 포함된 경우 누락된 문자는 암시적으로 0이므로 생성된 바이너리에 수동으로 추가해야 합니다. 이진 데이터의 각 비트는 장치가 특정 비트를 생성할 수 있는지 여부를 나타내는 부울 플래그입니다.이벤트 코드.
예:기기 X가 KEY_ESC(Escape 키) 이벤트를 생성할 수 있나요?
/sys/class/input/eventX/device/capabilities/key
ASCII로 읽기- 문자를 바이너리로 디코딩합니다(위와 같이).
- 0부터 시작하는 인덱스 KEY_ESC에서 비트를 확인합니다(다음에 따름).이벤트 코드를 입력하세요.h, KEY_ESC = 1)
- 이 비트가 1이면 장치는가능한KEY_ESC 이벤트를 보냅니다(즉, 마우스 후보에서 제거할 수 있는 키보드일 수 있음). 이 비트가 0이면안 돼요이러한 이벤트를 보냅니다.
마우스 버튼도 로 인코딩되어 있지만 key
해당 매크로에는 접두사가 붙으므로 BTN
방법은 기본적으로 동일합니다. 귀하의 경우와 관련된 것은 일반적으로 마우스가 REL_<...>
이벤트를 보낼 수 있는 유일한 장치라는 사실입니다 . 이에 대한 자세한 내용은 이전에 링크된 Linux 커널 문서에서 확인할 수 있습니다.
예, 많은 작업이 필요하지만 일반적이며 하드웨어와 그 기능에 대한 많은 단서를 제공할 수 있습니다.
마침내,내 GitHub에 더 자세한 문서가 있습니다.누구든지 관심이 있다면.