Linux:正在取消来自 /dev/input/event 的输入*

Linux: Canceling input from /dev/input/event*

在我一直在开发的程序中,我想独立于 window 我关注的任何内容来读取键盘笔画(因此,无论我专注于 Firefox 还是我正在玩 Minecraft,无需改变焦点)。到目前为止,使用 linux/input.h 库并从 /dev/input/event5 读取似乎工作得很好。

fd = open(argv[1], O_RDONLY);
struct input_event ev;
int len = read(fd, &ev, sizeof(struct input_event));

但是,我想添加的一项功能是在程序 运行 时取消此输入,防止我的击键到达 Firefox 或 Minecraft 或一般 OS。有什么好的方法吗?

警告:未经测试

  • 以模式O_RDWR打开字符设备(read/write)
  • 获取设备:ioctl(fd, EVIOCGRAB, 1)
  • 读取事件
  • 如果你想发送事件:
    • ungrab 设备 ioctl(fd, EVIOCGRAB, 0)
    • 写入事件

在 ungrab 和 write 之间,可能会发生其他事件,这些事件不会被过滤并分派给所有连接的文件句柄。不知道可不可以先写后取消抓取(或者根本不写,检查write的return值)。

提示: 你也可以修改libevdev.