X11: Detect general Mouse and Keyboard events
有没有办法检测鼠标是否已在 X 服务器上的任何地方移动或是否发生了键盘事件?我需要对用户使用 X11 输入设备进行任何操作做出反应。
我只设法使用 GTK 在我自己的窗口中检测到事件。
感谢所有信息(不必是完整的代码,一个入口点就足够了!)
是的,您可以使用 Xinput2 扩展来执行此操作。可以在此处找到一个完整但相当小的工具,用于处理光标事件(unclutter-xfixes)。作为免责声明,我是该工具的作者。
可以在这里找到另一个很好的教程形式的资源。
使用 XInput2 有很多好处:
- 无需不断轮询位置(资源高效)
- 不会干扰/破坏应用程序,例如在所有窗口上选择鼠标事件。
使用Xinput2不容易得到的是准确的位置(但需要的时候可以查询),但我的理解是反正你也不需要。
一旦你加载了我不会在这里展示的扩展,你可以像这样选择所有事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | XIEventMask masks[1]; unsigned char mask[(XI_LASTEVENT + 7)/8]; memset(mask, 0, sizeof(mask)); XISetMask(mask, XI_RawMotion); XISetMask(mask, XI_RawButtonPress); XISetMask(mask, XI_RawKeyPress); masks[0].deviceid = XIAllMasterDevices; masks[0].mask_len = sizeof(mask); masks[0].mask = mask; XISelectEvents(display, DefaultRootWindow(display), masks, 1); XFlush(display); |
在您的事件队列中,您现在可以查找相应的事件。