我正在为 Linux 创建一个屏幕键盘,集成在一个简单的窗口管理器中。我目前正在使用 XCB,现在我想制作假击键。使用 xtest 扩展一切工作正常,除了我无法从我想要放置的键符中获取真正的键码的细节。
目前我正在使用 xcb_key_symbols_get_keycode,然后我使用 xcb_key_symbols_get_keysym 来了解我需要哪个修饰符来获取该符号。当配置的键盘是美国键盘时,此功能正常。但我有一个西类牙语键盘,这个调用仅返回美国配置。在西类牙语键盘中,可以通过正确的 alt (altgr) 获得多个符号,但以前的调用似乎不支持它。
那么,我怎样才能获得获得任何键符号所需的键码?我认为我需要 XKB 扩展,但我一直无法为 XCB 找到它们,而且我不想为 XLib 重写整个窗口管理器。
谢谢。
最佳答案
这可能是一个过时的问题,但我发现它仍然有效。
您可以通过 xcb 启用 xkb 扩展,然后通过 xcb API(或更具体地说,从 xkb 键映射的状态)获取键映射、布局以及该布局的相应键符号。
链接:
- libxkbcommon Quick Start
- X11 Support设置 xkb 扩展并获取设备 ID(请参阅前面的链接:您必须在尝试访问任何
xcb_x11
调用之前创建扩展)。 (使用设备 ID,您可以调用xkb_x11_keymap_new_from_device
以返回xkb_keymap
指针)。 - xkb_keymap struct
- Keyboard State (更重要的是
xkb_state_key_get_sym()
)在这里你可以使用 xkb_state 来获取相应 key 的符号。
我必须承认,我实际上并没有完全做到这一点(仅涉及键盘映射/布局/状态)。但这应该足以让您开始。 :)
关于keyboard - 使用 XCB 获取键盘布局和按键符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689863/