从 xinput 到 KWin:Wayland 下 Linux 输入设备管理发生了什么
引言 长期使用Linux桌面的用户,对 xinput 通常并不陌生。 在X11环境中,可以使用它查看鼠标、触控板和键盘: 也可以修改属性: 然而切换到Wayland后,原先有效的命令可能完全没有作用。即使 xinput list 仍能输出一些设备,它看到的也通常只是XWayland兼容层,而不是整个桌面的真实输入设备状态。 这种变化不是工具失效,而是输入架构发生了根本改变。 一、X11下的输入模型 在传统X11桌面中,X Server是整个图形会话的核心。 键盘和鼠标事件大致经过: 应用程序可以向X Server查询: xinput 本质上就是一个X11客户端。它通过X Input Extension读取和修改X Server中的设备属性。 因此,X11下常见配置包括: 或者: 二、Wayland改变了控制边界 Wayland并不是一个替代X Server的单一程序,而是一套协议。 在Wayland桌面中,真正管理屏幕、窗口和输入设备的是合成器。 KDE Plasma中的合成器是: 输入事件大致经过: 应用程序不能再像X11时代那样自由读取所有全局输入信息。 普通Wayland应用通常无法: 这些限制是Wayland安全模型的一部分。 三、为什么Wayland下xinput仍然存在 Wayland桌面通常会启动XWayland,用于运行旧X11应用。 XWayland相当于在Wayland环境中提供一个兼容X Server。 因此可以形成两条路径: 以及: 此时执行: 看到的是XWayland内部的逻辑设备,而不是KWin直接管理的全部真实输入设备。 修改XWayland中的属性,最多只影响X11兼容应用,通常无法改变原生Wayland应用中的鼠标行为。 四、libinput也不是统一配置中心 另一个常见误解是:Wayland使用libinput,所以直接修改libinput即可。 libinput主要负责: 但libinput本身不负责维护整个桌面的用户配置文件。 不同桌面合成器会分别决定: 在KDE Plasma中,用户配置最终由KWin应用。 …