【问题标题】:Inject Keysym (not keycode) into X11 Server将 Keysym(不是 keycode)注入 X11 Server
【发布时间】:2016-03-02 12:19:48
【问题描述】:

我需要知道如何使用xcbxtestxlibKeySym 注入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 个字段,都可以通过布局 + 修饰符访问)
  • 对不起,我的错误,您不能添加键码。

标签: c keyboard x11 inject


【解决方案1】:

使用xdotool 注入keysyms。要插入XKB_KEY_Arabic_0,请使用

xdotool key Arabic_0

独立于键盘映射。

【讨论】:

  • 只有当您不想将其合并到您自己的程序中时,它才使用xdotool 完成。如问题中所述,将使用 X11 C-Libraries。所以这不是这个问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2018-11-27
相关资源
最近更新 更多