Linux 桌面上基于 X11 和 Wayland 的环境使用的 libinput 输入处理库正准备引入基于 Lua 的插件系统。通过 Lua 脚本,可以修改 evdev 输入事件/输入设备行为,以处理古怪/损坏的输入设备,并更好地解决目前不容易解决的其他问题。
在决定基于 Rust 的 WASM 或 Lua 之后,libinput 开发人员决定使用 Lua 插件系统,因为很容易对脚本进行沙箱化以确保安全的输入处理。基于 Lua 的插件系统可以修改内核与 libinput 库随后看到输入之间的事件。
Red Hat 的首席 Linux 输入专家 Peter Hutter 在一篇博文中详细解释了这个插件系统的动机和需求:
“这样做的动机是一些无法解决的问题 – 我们知道如何解决的问题,但我们无法在不破坏其他设备的情况下实际实施和/或交付修复程序。这方面的一个例子是倒置的罗技 MX Master 3S 水平轮。libinput 为 USB/蓝牙连接提供怪癖,但不为 Bolt 接收器提供怪癖。与 Unifying 接收器不同,Bolt 接收器不会向内核提供足够的信息来了解当前连接的设备。这意味着我们的怪癖仅适用于 Bolt 接收器(以及连接到它的任何鼠标)——不过这是一个相当糟糕的主意,我们会用同一个接收器打破所有其他鼠标。另一个例子是鼠标按钮磨损的问题 – 在该设备上,行为是可以预测的,但任何启发式方法都会捕获大量合法按钮。当您知道您的鼠标略微损坏并且至少它可以再次工作时,这很好。但这不是我们可以作为通用解决方案提供的东西。还有更多类似的例子 – 自定义指针减速、不同的键入时禁用等。
libinput 有一些怪癖,但它们是内部 API,随时可能更改,恕不另行通知。它们绝对不是用于配置设备的,libinput 解析的本地怪癖文件只是为了在 libinput 发布(希望是上游的)怪癖之前桥接时间。
所以显而易见的解决方案是:让用户自己修复它。这就是插件的用武之地。它们不是对 libinput 的完全访问权限,它们更接近用户空间中的 udev-hid-bpf。从逻辑上讲,它们位于内核事件设备和 libinput 之间:输入事件从内核设备读取,传递给插件,然后传递给 libinput。插件可以查看和修改设备(例如添加/删除按钮),并查看和修改来自内核设备的事件流。
用于引入插件系统的待处理 libinput 合并请求包括一个用于交换鼠标左键和右键的 Lua 脚本示例:

目前的想法是,新的插件系统应该在即将到来的 libinput 1.29 版本中合并。
转自 libinput Preparing To Introduce A Lua-Based Plugin System For Modifying Devices/Events – Phoronix
Linuxeden开源社区