각 키에 대해 개별 자동 반복 속도 설정

각 키에 대해 개별 자동 반복 속도 설정

X11에서 다음과 같은 작업을 수행하십시오.

xset r rate 120 240

전체 키보드에 대한 반복 속도를 설정할 수 있습니다.

하지만 각 개별 키에 대해 동일한 작업을 수행할 수 있는지 궁금합니다. (즉, 키마다 반복률이 다릅니다.)

어쩌면 모호한 XKB 구성이나 XKB C API 또는 일부 evdev/ioctl 해킹을 사용할 수도 있습니다.

그렇지 않은 경우 키보드 펌웨어에 액세스할 수 있고 키보드에서 전송된 USB HID 코드를 제어할 수 있다면 어떻게 할 수 있습니까?

나는 그것이 가능해야 한다는 것을 안다.어떻게든수정자 키의 반복률은 0인 것처럼 보이지만 나머지 키의 반복률은 0이 아니기 때문입니다.


마음에 떠오르는 한 가지 아이디어는 서로 다른 키 세트를 서로 다른 USB 장치로 등록한 다음 서로 다른 장치에 대해 서로 다른 반복 속도를 설정하는 것입니다(USB 수준에서 수행할 수 있는 경우).

답변1

안타깝게도 이는 노력 없이는 불가능한 것 같습니다.

PS/2와 USB 키보드 통신 프로토콜의 모든 차이점을 잘 모르겠지만 아마도 매우 유사하게 작동할 것이라고 생각합니다. 이러한 가정을 고려할 때, 당신이 하려는 일은 실제로 하드웨어 수준에서는 불가능하고 운영 체제 수준에서는 매우 어렵습니다.

하드웨어 수준에서 문제는 자동 반복 속도가 다음과 같이 결정된다는 것입니다.명령을 보내다키보드에 대해 이 명령은 모든 중복 키에 작동합니다. 개별 키 입력에 대한 반복 속도를 설정하는 명령은 없습니다.

OS 수준에서는 커널의 직접적인 부분이거나 커널에 로드된 드라이버인 키보드 입력 핸들러를 재정의해야 합니다. 키보드는 키를 눌렀다가 놓을 때마다 인터럽트를 보내고 키를 누르고 있을 때마다 인터럽트를 전송하고 자동으로 반복합니다. 따라서 드라이버는 반복되는 키 누르기 인터럽트를 무시하고 키 해제 인터럽트가 수신될 때까지 해당 키 누르기에 필요한 속도로 키 누르기 이벤트를 인위적으로 생성해야 합니다.

또는 Xorg의 코드를 변경하여 사용자 수준에서 이 기능을 구현할 수 있습니다.

답변2

X11 키보드 모델은 다중 키 반복 속도를 지원하지 않습니다.

키를 눌렀다가 떼면 애플리케이션은 키 누르기 및 떼기 이벤트를 수신합니다. 키를 누르고 있고 해당 키가 수정자 키가 아닌 경우 키를 놓기 전에 여러 키 이벤트가 수신됩니다.

수정자 키는 다르게 처리됩니다. 응용 프로그램은 수정자 키 누르기 및 키 해제 이벤트(말한 대로 중복되지 않음)를 가져오지만 일반적으로 이러한 이벤트는 무시되고 대신 응용 프로그램은 다른 모든 키 누르기에 연결된 수정자 비트마스크를 확인합니다. 즉, 수정자 키 상태는 수정자 키가 아닌 모든 키 누름에 연결됩니다.

수정자 키에는 반복 속도가 다르며 반복을 전혀 지원하지 않습니다.

애플리케이션은 키 누르기 이벤트를 받기 때문에 애플리케이션에서 서로 다른 키 누름의 반복 속도를 다르게 하려는 경우 키 놓기 이벤트를 얻을 때까지 애플리케이션이 원하는 속도를 시뮬레이션하도록 할 수 있습니다.

관련 정보