我有以下问题:
为此,我知道两种方法:
我的问题是,这种方法都没有考虑键盘映射。我的意思是,当我选择AZERTY映射时,我有一个“z”字符,正如我所期望的,当我选择QWERTY映射时,我得到一个“w”,并且我心爱的BÉPO映射我得到一个“é”。
如何独立于键盘映射获得相同的字符?
我在Unity下使用Ubuntu 12.10。
这里是我的XTestFakeKeyEvent代码:
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
#include <iostream>
// The key code to be sent.
// A full list of available codes can be found in /usr/include/X11/keysymdef.h
/* g++ -o XFakeKey tst.c -L/usr/X11R6/lib -lX11 -lXtst */
char *text = "z";
main()
{
// Obtain the X11 display.
Display *display = XOpenDisplay(0);
if(display == NULL)
return -1;
Window focusWindow;
int revert;
XGetInputFocus(display, &focusWindow, &revert);
KeyCode code = XKeysymToKeycode(display, XStringToKeysym(text));
XTestFakeKeyEvent(display, code, True, CurrentTime);
XTestFakeKeyEvent(display, code, False, CurrentTime);
XCloseDisplay(display);
return 0;
}
答案 0 :(得分:0)
使用XChangeKeyboardMapping
API将unicode Keysym绑定到未使用的Keycode。
然后,您发送重新映射的密钥代码(使用XTestFakeKeyEvent
或XSendEvent
),使用XKeycodeToKeysym
的应用程序将获得您想要的符号,与当前键盘/ IME无关。
未经测试,但似乎根据this comment工作。