0

所以我想构建一个内核模块(我想),它会在按下键盘键后插入一点延迟(比如说 500 毫秒)。我设法通过钩子在 Windows 中做到了这一点,但在 Linux 中似乎有所不同。请注意,我不希望使用 x11 方法,因为我希望它也可以从 linux 控制台工作(即使没有运行 X 服务器)。据我所知,它需要构建一个内核模块并使用 insmod 将其动态插入内核。我设法构建了一个按键记录器,它将每个按下的按键转储到内核日志中,但是插入延迟需要将处理键盘中断处理程序的线程发送到睡眠状态,这是一个非常糟糕的主意,并且还要重写整个 USB_KBD驱动程序,因为当前脚本调用设置了 IRQF_SHARED 标志的 request_irq 函数,

我目前正在请求这样的中断处理程序

request_irq (1, (irq_handler_t) irq_handler, IRQF_SHARED, "keyboard_stats_irq", (void *)(irq_handler));

关于如何处理这个(任何其他方式)的任何建议?

4

1 回答 1

1

您可以编写一个用户空间守护程序,它从(无论键盘设备是什么)读取输入事件/dev/input/input*,同时抓取设备以阻止事件通过系统的其余部分(ioctl(fd, EVIOCGRAB, 1))。

然后,守护进程可以创建一个虚拟输入设备,/dev/uinput在延迟一段时间后在其中使用和写入输入事件。由于延迟将在用户空间中实现,这将非常容易。

启动你的守护进程相当于热插拔虚拟键盘,现代 X 服务器(不到 10 年?)能够应对热插拔输入设备。vconsole 驱动程序也适用于这些。

于 2018-01-02T23:39:20.170 回答