首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内核模块中拦截X11输入的键盘

在内核模块中拦截X11输入的键盘
EN

Unix & Linux用户
提问于 2021-11-25 18:32:47
回答 1查看 516关注 0票数 0

我正在构建一个覆盖读取系统调用的内核模块。在那里,我想更换键盘上的按键。通过替换文件descriptor=0的扫描代码,我成功地完成了对终端输入的操作。但是,GUI应用程序在ubuntu中使用X11,并且它不使用stdin输入来读取键盘。在键压到达X11服务器之前,我如何拦截和替换它们?X11是否使用特定的文件描述符?

EN

回答 1

Unix & Linux用户

发布于 2021-11-25 18:49:43

Linux上的Xorg X11服务器读取来自/dev/input/event*埃夫德夫设备的输入。每个read()调用至少返回一个结构输入_事件

您不需要一个自定义内核模块来替换事件--您可以只使用用户空间工具来读取它们,根据需要进行更改,并将它们转发到现有的“uinput”模块,该模块允许您创建自定义的evdev设备(非常像FUSE或CUSE),并以某种方式告诉Xorg忽略原始设备。拦截工具工具包可以做到这一点。

此外,目前大多数系统上的Xorg都使用libinput库来预处理来自键盘和鼠标的事件。(大多数Wayland显示服务器也只使用libinput。)您可以将这个库修补到

最后,如果您只想重新映射单个键(或扫描代码),则evdev子系统已经对此提供了内置支持。Systemd已经提供了一个助手,它允许udev规则定义自定义扫描代码到密钥的映射,就像在这个数据库中所看到的那样。

实际上,如果您仍然想修补内核,那么最好还是不使用read(),在evdev层执行转换。(毕竟,文件描述符0并不总是键盘--你真的不想把另一个程序中的数据弄乱。)

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/679080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档