임의의 문자 집합으로 가상 키보드를 시뮬레이션하는 방법은 무엇입니까?

임의의 문자 집합으로 가상 키보드를 시뮬레이션하는 방법은 무엇입니까?

키보드 작동 방식을 변경하기 위해 몇 가지 앱을 작성 중입니다. (하나는 코드를 누르는 것을 허용하고, 다른 하나는 음절을 크게 말하여 개별 문자를 입력할 수 있게 해줍니다.) 이러한 앱의 "레이아웃"이 처리되는 방식은 어떤 키보드나 유형과 관련이 없습니다. 프로그램을 실행할 때의 키보드 레이아웃은 사용자가 인쇄하도록 지시한 문자를 인쇄해야 합니다. 이것이 작동하도록 하려면 많은 어려움을 겪어야 했고 이제 일반적인 Linux 컴퓨터에서 키보드 입력이 일반적으로 어떻게 작동하는지 이해했다고 생각합니다.

  • 컴퓨터가 시작되면 XKB는 evdevXF86 키 코드에 해당하는 스캔 코드 테이블을 기억합니다.
  • 레이아웃을 로드할 때 XKB는 입력할 유니코드 문자에 해당하는 XF86 키 기호가 포함된 다른 테이블을 주로 읽어서 기억합니다 /usr/include/X11/keysymdef.h. 그런 다음 키 기호에 해당하는 XF86 키 코드의 다른 테이블("레이아웃")을 기억합니다. 이는 문자 매핑에 대한 키코드로 축소될 수 있습니다.
  • 이제 evdev키보드가 키 누르는 소리를 들을 때마다 스캔 코드가 XKB로 전송됩니다...
  • ...XKB는 X에게 특정 유니코드 문자를 입력하라고 지시합니다.

내 애플리케이션의 백엔드는 evdev이고 내가 정말로 원하는 것은 X가 하는 일이기 때문에 그 사이의 모든 것을 조롱해야 하기 때문에 매우 실망스럽습니다. X에게 무엇을 해야 할지 말해도 될까요? 분명히 해당 지역과 함께 제공되는 관리자 액세스가 필요하지 않습니다. 내 말은, XKB가 임의의 기하학적 구조로 키보드를 시뮬레이션할 수 있다면 왜 각 유니코드 문자에 대한 키가 있는 키보드인 것처럼 가장할 수 없습니까?

내 응용 프로그램은 Python으로 작성되었지만 다른 언어로도 작성할 수 있습니다.

편집: 키 입력 프로세스가 XLookupString()키 입력 호출로 생성된 보고서를 읽는 곳에 댐이 있는 것으로 보입니다. XKeyEvent이 프로세스는 키 누르기를 반환된 KeySym내용에 해당하는 것으로 해석합니다 XLookupString(). 이것은 나쁜 소식입니다. 왜냐하면 XLookupString()키코드-키심 대응에 대한 정보는 XKB의 레이아웃에서 얻어지기 때문입니다. 따라서 임의의 키 기호에 대한 입력을 위조하려면 XKB가 레이아웃에 대해 거짓말을 하거나 XLookupString()키 기호에 대해 거짓말을 해야 합니다 .

관련 정보