키보드를 비활성화하지만 여전히 키보드에서 읽기를 허용합니다.

키보드를 비활성화하지만 여전히 키보드에서 읽기를 허용합니다.

백그라운드에서 데몬으로 실행되는 특정 응용 프로그램을 제어하는 ​​데 사용하고 싶은 USB 숫자 키패드가 있습니다. 데몬은 Python으로 작성되었으며 현재 python-evdev이를 사용하여 입력을 읽는 중이며 훌륭하게 작동합니다.

그러나 키보드에 입력하는 모든 내용은 여전히 ​​정상적으로 처리됩니다. 즉, 키보드 입력을 처리하는 모든 응용 프로그램(컴퓨터가 시작될 때 표시되는 로그인 프롬프트 포함)에도 키 입력이 삽입된다는 의미입니다. 이것은 약간 짜증나는 일입니다.

키보드 이벤트의 "일반적인" 처리를 비활성화하고 키 누르기 상태를 수동으로 읽기만 허용하는 방법이 있습니까? X 실행에 의존하지 않기를 바랍니다.

지금까지 내가 찾은 모든 것은 키보드를 완전히 비활성화하거나 X를 사용하는 것과 관련이 있는 것 같습니다.

제가 가지고 있는 한 가지 아이디어는 모든 키를 데드 키에 매핑하는 키맵을 만드는 것입니다. 이렇게 하면 출력이 차단되지만 실제 키코드를 읽을 수는 있습니다. 그러나 이 문제에 대한 더 간단한 해결책이 있어야 할 것 같습니다.

답변1

커널 소스 코드를 직접 알고 있는 경우 전역 핸들러에서 특정 입력 장치의 연결을 끊을 수 있는 방법이 없습니다(참고자료 참조 /proc/bus/input/handlers). kbd핸들러는 항상 모든 입력 이벤트를 수신하고 키 누르기 이벤트를 키 누르기 이벤트로 변환합니다.

그러나 다음을 수행할 수 있습니다.잡다EVIOCGRAB프로그램에서 직접 또는 evtest --grab /dev/input/eventX테스트용과 같은 도구를 사용하여 장치 내 ioctrls와 함께 사용하도록 특별히 설계된 입력 장치입니다. 가져오기가 활성화되어 있는 한 이벤트는 다른 어떤 것에서도 처리되어서는 안 됩니다.

익숙하지는 않지만 python-evdevPython에서 Grab 모드를 지원하지 않더라도 ioctl을 수행하는 것은 어렵지 않습니다.

(나는 게으르고 X에서만 테스트했는데 작동하지만 X 없이는 작동하지 않는 이유를 알 수 없습니다).

관련 정보