【发布时间】:2016-03-02 12:19:48
【问题描述】:
我需要知道如何使用xcb、xtest 或xlib 将KeySym 注入X 服务器。我可以注入键码,也可以获取键盘映射,在那里搜索键符并按下相应的键码,但是当键码未映射到当前布局时,我无法注入键码(例如XKB_KEY_Arabic_0)。
有什么办法可以做到吗?
我想到的是找到一个空键码并将其重新映射到所需的键符。问题:我的代码没有找到一个空键。这是我的代码:
uint32_t find_empty_key_for_remapping()
{
int keycode_low;
int keycode_high;
KeySym * keysyms = 0;
int empty_key = 0;
int num_keysym;
XDisplayKeycodes(display_, &keycode_low, &keycode_high);
keysyms = XGetKeyboardMapping(display_, keycode_low, keycode_high - keycode_low, &num_keysym);
for (int i = keycode_low; i <= keycode_high && !empty_key; ++i)
{
bool key_is_empty = true;
for (int j = 0; j < num_keysym; ++j)
{
int symindex = ((i - keycode_low) * num_keysym) + j;
if (keysyms[symindex] != 0)
{
key_is_empty = false;
}
}
if (key_is_empty)
{
return i;
}
}
return 0;
}
任何帮助将不胜感激!
【问题讨论】:
-
您可以使用 XChangeKeyboardMapping 并添加额外的键码。每次映射更改时,您都需要这样做。
-
我真的可以添加新的键码吗?我以为你可以重新映射现有的?
-
嗯,我不明白为什么不这样做。需要试验。
-
由于 keycode 是
uint8_t并且存在 256 (0 - 255) 个,我认为创建 keycode 256 不会成功。首先我试图寻找一个未设置的键码,但是当设置了多个键盘布局时,我不理解 X 中的映射(然后一个键码最多有 15 个字段,都可以通过布局 + 修饰符访问) -
对不起,我的错误,您不能添加键码。