将Unicode字符发送到X上的活动窗口

将Unicode字符发送到X上的活动窗口,unicode,input,x11,Unicode,Input,X11,我正在寻找一种将Unicode字符发送到活动窗口的方法。目前,我有一个我不满意的解决方案。下面是(Python中的): 在上述代码中,keycode是介于8和255之间的任意数字,ordchar是要发送的Unicode码点 我对上述代码有两个问题: 程序必须修改键映射。这绕过了只有cca的限制。可发送250个按键代码 我必须在发送两个字符之间插入延迟,否则它们之间的密钥映射更改可能无法注册。延迟0.05可以消除排放,但字符到达时会有明显的延迟 这是发送关键事件的唯一方法。最好完全消除发送事件的需

我正在寻找一种将Unicode字符发送到活动窗口的方法。目前,我有一个我不满意的解决方案。下面是(Python中的):

在上述代码中,
keycode
是介于8和255之间的任意数字,
ordchar
是要发送的Unicode码点

我对上述代码有两个问题:

  • 程序必须修改键映射。这绕过了只有cca的限制。可发送250个按键代码
  • 我必须在发送两个字符之间插入延迟,否则它们之间的密钥映射更改可能无法注册。延迟0.05可以消除排放,但字符到达时会有明显的延迟

  • 这是发送关键事件的唯一方法。最好完全消除发送事件的需要。@n.m.我很想消除这种需要,但我会详细说明一些,你会明白为什么不可能。其思想是,输入设备通过串行端口发送数据,串行端口被转换为可能包含Unicode字符的字符串,该字符串应到达活动窗口。可以为scim或uim制作一个模块,它们可以很好地处理Unicode输入,但是1。该解决方案应该可以合理地跨Linux、Windows和Mac进行移植,2。我描述的所有这些都已经用Python实现了,我不太喜欢移植它。FWIW,使用display的
    sync
    方法可以避免
    sleep
    。这就是
    xdocool type
    在无法找到其他方法模拟按键时所做的。
    Xlib.display.Display.change_keyboard_mapping(keycode, [{ordchar}])
    // send the keycode with KeyPress and KeyRelease
    sleep(0.05)