CでXTestFakeKeyEventを使用してXvfbディスプレイにキーを押すことはできません。

CでXTestFakeKeyEventを使用してXvfbディスプレイにキーを押すことはできません。

この短いコードスニペットを使用すると、キーボード(/dev/input/event1)からイベントをキャプチャして正しく印刷できます。ただし、XTestFakeKeyEventを使用してXvfbディスプレイに送信することは、XTestFakeKeyEventが正常に返されても効果はありません。

        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の間の互換性だと思いますが、XTestFakeKeyEventを使用するシェルのxdotoolプログラムを使用してモニタにキーストロークを送信できます。私が何か間違っているのかもしれません。私はX11プログラミングに慣れていません。よろしくお願いします。

ベストアンサー1

おすすめ記事