libei 在 XDG RemoteDesktop 和 InputCapture 门户中的集成

Lobsters Hottest 工具

摘要

libei(用于模拟输入的库)的最新进展:现已集成到 XDG Remote Desktop 和 Input Capture 门户中,为 Wayland 合成器和客户端提供标准化的输入传输。

<p><a href="https://lobste.rs/s/egdij3/libei_integrations_xdg_remotedesktop">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/22 10:20

# XDG RemoteDesktop 和 InputCapture 门户中的 libei 集成 来源:http://who-t.blogspot.com/2026/07/libei-integrations-in-xdg-remotedesktop.html 原来我谈论鸡蛋已经好几年了,所以让我们改变一下。libei 当然是用于模拟输入(Emulated Input)的库(https://who-t.blogspot.com/2020/08/libei-library-to-support-emulated-input.html)\[1\]。 这篇文章主要是个复习,因为太久没提了,同时简要总结一下我们目前完成的一些工作,为接下来几篇即将发布的文章做准备。 libei 是一个用于**逻辑**输入事件的传输层,而 libinput 是一个硬件抽象层。在 libinput 的情况下,设备的固件/内核传递的事件在某种程度的合理性范围内,libinput 尝试理解这些事件,然后将其转换为逻辑事件,供下一层(通常是 Wayland 合成器或 Xorg)消费。例如,这就是如何将“触摸按下位置 x1/y1,触摸抬起位置 x1/y2”转换为一个按钮点击事件(如果启用了触摸板点击)。或者,如果我们发现这是一次意外的掌触,则可能转换为无操作。 libei 纯粹在逻辑层面工作——作为 libei 客户端,你将逻辑事件传递给 EIS(模拟输入服务器)实现(通常是合成器)。没有猜测,你说按钮点击,EIS 就收到按钮点击。libei 支持“发送者”和“接收者”模式,取决于事件是发送给 EIS 实现(输入模拟)还是从 EIS 实现接收(输入捕获)。libei 是为 Wayland 栈设计的,但客户端或 EIS 实现都不要求使用 Wayland。 libei 设计的核心是 EIS 实现几乎控制一切,它决定哪些设备可供客户端使用,这些设备何时可以发送事件等等。就像合成器在物理设备方面负责一样——如果合成器决定某个物理设备不存在,Wayland 客户端就无法从中获取事件。 自最初提案(再次,\[1\]!)以来,我们一直像蜜蜂一样忙碌,现在 libei 已成为 XDG Remote Desktop 门户和 XDG Input Capture 的一部分(两者均从版本 1.17 开始,2023 年中期)。在这两种情况下,门户用于协商和初始协议,确定应该做什么,然后 libei 用作两个进程之间的传输层 \[2\]。 最近,我们还增加了会话持久性支持,这样你就不必在每次连接时都允许访问。实现这一功能的大部分工作由 Jonas Ådahl 完成,现在已包含在自 1.21.0 版本以来的门户中,并应出现在当前或下一版本的主要合成器中。 ## 管道铺设 将所有这一切落实到位,需要在栈的多个部分进行大量工作。这并不令人兴奋,就像铺设管道并不特别令人兴奋一样,但就像常规管道一样:一旦安装到位,你就可以改变你的饮食习惯,而不会再次严重影响所有人。现在试着把那个比喻从脑海中赶出去。不客气。 对于 libei 来说,这意味着三件事: - 如果你有一个使用 XDG 门户发送/接收事件的客户端,现在它们可以与任何实现该门户的合成器一起工作。无需 GNOME/KDE/... 特定的 API。 - 如果你有一个实现 EIS 的合成器,你就拥有了所有基础设施,可以在需要时与来自其他地方的 libei 客户端通信。这些用例尚未完全确定范围(辅助技术、虚拟键盘、触摸板等?),但管道已经就绪,可以(被滥用)使用。 - 由于实际的事件来回不影响中间的层,我们现在可以向 libei 添加新事件,而无需再次更改其他所有内容。 让我们看看这在实践中如何工作。 ## XWayland XTEST 使用案例 我们现在可以利用管道的一个例子是 Xwayland 对 XTEST 的支持。XTEST 是每个人在 X 下用来模拟输入的协议,但在 Wayland 中,它没有与任何东西连接,因此这些 API 根本无法工作。 但我们在 Xwayland 中可以做的,是将 XTEST 转换为 libei 事件,并促进门户交互。这意味着我们的栈大致如下: ``` +--------------------+ +------------------+ | Wayland compositor |---wayland---| Wayland client B | +--------------------+\ +------------------+ | libinput | EIS | \_wayland______ +----------+---------+ \ | | +-------+------------------+ /dev/input/ +-----------| libei | XWayland | +-------+------------------+ | | XTEST | +-----------+ | X client | +-----------+ ``` 如果该 X 客户端使用 XTEST 尝试模拟设备,Xwayland 将请求 Remote Desktop 门户的权限并设置会话,然后将 XTEST 事件作为 libei 事件传递,瞧——你的 20 年历史的 X 客户端可以通过 XDG Portal 发送指针和键盘事件,而无需知晓(并且用户可以禁止此操作,甚至获得一些关于谁在发送事件的信息,这在普通 XTEST 中是完全不可能的)。自 Xwayland 23.2.0 以来,这一功能已得到支持。合成器无需额外支持。 ## 下一步 因此,我们已经有了很多管道就位,或者换个比喻:我们有了锤子,让我们开始寻找钉子。而现在我们能看到的钉子包括发送文本、手势和平板支持。这些将是接下来几篇文章的主题。 \[1\]:6 年前?!哇…… \[2\]:在 Remote Desktop 的情况下,它取代了 DBus 模拟 API,后者是一个牛顿摆,每次事件至少会唤醒 4 个进程。

相似文章

多用户 Wayland 现状

Lobsters Hottest

对 Linux Wayland 合成器和库中多座位(多个鼠标/键盘)支持的深入调查,并提供了已发布的工具和补丁以改善多用户计算。

XLibre XServer 25.2 发布

Lobsters Hottest

社区管理的 X Window System 显示服务器 XLibre XServer 25.2 已发布,默认启用 TearFree 模式设置,支持 Nvidia 驱动程序,并通过 seatd 进行席位管理。

Xwayland 26.1.0 发布候选版1

Hacker News Top

Olivier Fourdan 宣布了 Xwayland 26.1.0 的首个发布候选版,包括更改如 EGLStream 移除、rootful 模式的剪贴板桥接、多座位支持以及各种错误修复,并请求进行测试。

我的无障碍技术栈与 Wayland 上的未来

Lobsters Hottest

一篇个人记述,讲述 Linux 桌面即将全面转向 Wayland 的未来将如何破坏依赖 Talon Voice 等输入工具的无障碍用户体验,并指出输入无障碍相较于输出无障碍受到的关注严重不足。