引言

长期使用Linux桌面的用户,对 xinput 通常并不陌生。

在X11环境中,可以使用它查看鼠标、触控板和键盘:

xinput list

也可以修改属性:

xinput set-prop ...

然而切换到Wayland后,原先有效的命令可能完全没有作用。即使 xinput list 仍能输出一些设备,它看到的也通常只是XWayland兼容层,而不是整个桌面的真实输入设备状态。

这种变化不是工具失效,而是输入架构发生了根本改变。

一、X11下的输入模型

在传统X11桌面中,X Server是整个图形会话的核心。

键盘和鼠标事件大致经过:

内核输入设备
→ X Server
→ X11应用

应用程序可以向X Server查询:

  • 当前输入设备
  • 鼠标位置
  • 窗口位置
  • 键盘状态
  • 设备属性

xinput 本质上就是一个X11客户端。它通过X Input Extension读取和修改X Server中的设备属性。

因此,X11下常见配置包括:

xinput set-prop <设备> "libinput Natural Scrolling Enabled" 1

或者:

xinput set-prop <设备> "Coordinate Transformation Matrix" ...

二、Wayland改变了控制边界

Wayland并不是一个替代X Server的单一程序,而是一套协议。

在Wayland桌面中,真正管理屏幕、窗口和输入设备的是合成器。

KDE Plasma中的合成器是:

KWin

输入事件大致经过:

内核输入设备
→ libinput
→ KWin
→ Wayland客户端

应用程序不能再像X11时代那样自由读取所有全局输入信息。

普通Wayland应用通常无法:

  • 获取其他窗口的键盘输入
  • 任意移动其他应用窗口
  • 读取全局鼠标位置
  • 修改整个桌面的输入设备
  • 模拟全局键盘和鼠标事件

这些限制是Wayland安全模型的一部分。

三、为什么Wayland下xinput仍然存在

Wayland桌面通常会启动XWayland,用于运行旧X11应用。

XWayland相当于在Wayland环境中提供一个兼容X Server。

因此可以形成两条路径:

原生Wayland应用
→ KWin直接管理

以及:

X11应用
→ XWayland
→ KWin

此时执行:

xinput list

看到的是XWayland内部的逻辑设备,而不是KWin直接管理的全部真实输入设备。

修改XWayland中的属性,最多只影响X11兼容应用,通常无法改变原生Wayland应用中的鼠标行为。

四、libinput也不是统一配置中心

另一个常见误解是:Wayland使用libinput,所以直接修改libinput即可。

libinput主要负责:

  • 识别输入设备
  • 标准化事件
  • 提供设备能力
  • 处理触控板手势
  • 处理滚轮和加速度

但libinput本身不负责维护整个桌面的用户配置文件。

不同桌面合成器会分别决定:

  • 如何保存设置
  • 在何时应用设置
  • 向用户暴露哪些选项
  • 是否提供D-Bus接口

在KDE Plasma中,用户配置最终由KWin应用。

因此:

libinput能力
≠ KWin当前配置

五、KDE Wayland下应该检查什么

1. 内核设备

ls -l /dev/input/by-id/
ls -l /dev/input/by-path/

以及:

sudo libinput list-devices

用于确认:

  • 设备名称
  • event节点
  • vendor和product
  • 设备类型
  • 支持的滚动方式
  • 是否支持自然滚动

2. KWin输入对象

qdbus6 org.kde.KWin |
grep '^/org/kde/KWin/InputDevice/'

每个设备通常对应:

/org/kde/KWin/InputDevice/eventN

3. KWin运行时属性

例如自然滚动:

busctl --user get-property \
  org.kde.KWin \
  /org/kde/KWin/InputDevice/event11 \
  org.kde.KWin.InputDevice \
  naturalScroll

也可以检查:

  • enabled
  • pointerAcceleration
  • leftHanded
  • scrollFactor
  • supportsNaturalScroll
  • touchpad
  • mouse
  • tabletTool

4. KDE持久配置

主要文件为:

~/.config/kcminputrc

配置通常按设备保存:

[Libinput][vendor][product][设备名称]
NaturalScroll=true

六、为什么同一个鼠标会出现多个设备

无线接收器经常提供复合HID接口。

一个物理设备可能生成:

  • 鼠标指针接口
  • 多媒体控制接口
  • 键盘接口
  • 系统控制接口
  • 电池状态接口

因此,KWin中可能同时看到:

Wireless Mouse
Wireless Mouse Consumer Control
Wireless Receiver Keyboard

不能仅凭名称中出现“Mouse”就判断它是实际滚轮设备。

需要使用:

sudo libinput debug-events --device /dev/input/eventN

确认哪个节点真正产生:

POINTER_MOTION
POINTER_SCROLL_WHEEL

七、旧X11命令在Wayland中的替代思路

X11工具Wayland下的思路
xinputKDE系统设置或KWin D-Bus
xrandrkscreen-doctor
xsetwacomKDE绘图板设置/KWin
xdotoolPortal、桌面快捷键或受限自动化工具
wmctrlKWin窗口规则或KWin脚本
xpropKDE检测窗口属性
xwininfoKWin调试信息

Wayland下通常没有一个完全等价的全局替代工具,因为很多X11能力本身就是Wayland刻意限制的。

八、为什么这种变化是必要的

X11允许任何普通应用轻易:

  • 监听其他应用键盘输入
  • 获取全局剪贴板
  • 截取整个屏幕
  • 模拟键盘输入
  • 移动其他窗口

这使自动化非常方便,但也意味着任何被入侵的普通应用都可能获得过大的权限。

Wayland将这些能力交给:

  • 合成器
  • Portal
  • 用户授权界面
  • 受控协议

虽然迁移过程更加复杂,但安全边界更加明确。

结语

Wayland下,xinput并没有被另一个同名工具简单替代。

真正发生的是:

输入设备控制权
从X Server
转移到了桌面合成器

在KDE Plasma中,排查输入问题应以:

内核event节点
+libinput能力
+KWin运行时状态
+kcminputrc

为核心。

继续使用X11时代的命令,不仅可能无效,还可能只修改XWayland兼容层,从而造成“命令成功,但桌面行为完全不变”的假象。

Leave a Reply

Your email address will not be published. Required fields are marked *