无法使用 C 中的 XTestFakeKeyEvent 将按键发送到 Xvfb 显示

无法使用 C 中的 XTestFakeKeyEvent 将按键发送到 Xvfb 显示

使用这段简短的代码片段,我可以从键盘(/dev/input/event1)捕获事件并正确打印它们。但是,即使 XTestFakeKeyEvent 返回成功,使用 XTestFakeKeyEvent 将它们发送到 Xvfb 显示也不起作用。

        char devname[] = "/dev/input/event1";
        int device = open(devname, O_RDONLY);
        struct input_event ev;
        signal(SIGINT, INThandler);
        Display *dpy = XOpenDisplay(NULL);
        if (!dpy) {fprintf(stderr, "unable to connect to display");return 7;}
        while(1)
        {
                read(device,&ev, sizeof(ev));
                printf("Key: %i State: %i\n",ev.code,ev.value);
                if(ev.code!=4)
                        if(!(XTestFakeKeyEvent(dpy, ev.code, ev.value, 0)))
                                {fprintf(stderr, "unable to send keystroke\n");return 7;};
        }

我认为问题在于 Xvfb 和 XTestFakeKeyEvent 之间的兼容性,但我可以使用 shell 中的 xdotool 程序将击键发送到显示器,该程序使用 XTestFakeKeyEvent。我可能做错了,我不熟悉 X11 编程。先感谢您。

相关内容