引言

在 KDE Plasma Wayland 中开启“自然滚动”后,鼠标滚轮方向可能完全没有变化。

系统设置界面显示选项已经启用,配置文件中也可能存在:

NaturalScroll=true

但浏览器和文件管理器仍然按照传统方向滚动。

这种现象不一定是 KDE 没有保存配置,也不一定是 libinput 不支持自然滚动。更常见的原因是:设置写到了错误的逻辑设备节点。

一、一个鼠标不一定只有一个输入节点

Linux通过 /dev/input/event* 暴露输入设备。

一个普通USB鼠标可能只有一个指针节点,但无线鼠标、蓝牙鼠标和多功能接收器经常生成多个设备:

2.4G Mouse
2.4G Mouse Consumer Control
2.4G Wireless Mouse
Wireless Receiver Keyboard
System Control

这些名称看起来相似,但用途完全不同。

其中可能分别负责:

  • 鼠标移动
  • 滚轮
  • 多媒体按键
  • 电源键
  • 浏览器前进后退键
  • 键盘模拟输入

KDE会按设备名称、vendor ID、product ID保存设置。如果自然滚动配置写到了 Consumer Control 节点,而真正滚轮来自另一个 Mouse节点,实际滚动方向就不会变化。

二、为什么设置界面容易选错设备

系统设置通常会列出多个相似设备名称。用户看到“2.4G Mouse”后开启自然滚动,但当前真正产生滚轮事件的设备可能叫:

2.4G Wireless Mouse

两者甚至可能来自两个不同的USB接收器。

KWin保存的配置段类似:

[Libinput][厂商ID][产品ID][设备名称]
NaturalScroll=true

例如:

[Libinput][7847][102][2.4G Mouse]
NaturalScroll=true

如果实际鼠标对应:

vendor=12994
product=102
name=2.4G Wireless Mouse

前面的配置就不会应用到当前设备。

三、不要单独相信 libinput list-devices

常见检查方式是:

sudo libinput list-devices

输出中可能看到:

Nat.scrolling: disabled

但这并不能证明 KWin 当前没有启用自然滚动。

libinput list-devices 创建的是自己的 libinput 上下文,显示的是设备默认值或该上下文中的状态。KWin在Wayland会话中拥有独立的运行时配置。

因此应区分:

libinput默认值
≠ KWin当前运行值

KDE Wayland 下更有价值的是 KWin D-Bus 属性。

四、找到真正产生滚轮事件的节点

最可靠的方法是逐个监听候选设备:

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

移动鼠标并滚动滚轮。

如果看到:

POINTER_MOTION
POINTER_SCROLL_WHEEL

说明这个节点是真正的鼠标指针节点。

再检查另一个候选设备:

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

哪个节点产生实际滚轮事件,哪个才是需要修改的设备。

也可以查看设备的 udev 属性:

udevadm info \
  --query=property \
  --name=/dev/input/event11

重点关注:

ID_VENDOR_ID
ID_MODEL_ID
ID_INPUT_MOUSE
ID_INPUT_KEYBOARD
ID_PATH

五、读取KWin中的设备状态

列出 KWin 输入设备对象:

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

设备对象通常类似:

/org/kde/KWin/InputDevice/event11

读取自然滚动属性:

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

可能输出:

b false

这表示 KWin 当前确实没有为该节点启用自然滚动。

检查设备是否支持该功能:

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

如果返回:

b true

说明该设备具备自然滚动能力,只是当前没有开启。

六、修复运行时设置

可以通过 KDE系统设置重新选择正确设备,也可以直接修改KWin运行时属性:

busctl --user set-property \
  org.kde.KWin \
  /org/kde/KWin/InputDevice/event11 \
  org.kde.KWin.InputDevice \
  naturalScroll b true

随后验证:

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

预期:

b true

此时应立即在以下位置测试:

  • Dolphin长列表
  • 浏览器网页正文
  • 文本编辑器滚动区域

不要用音量图标、滑块或特殊控件判断,因为某些控件不会遵循普通滚动视图的自然滚动逻辑。

七、检查持久保存

运行时设置生效后,还需要检查:

~/.config/kcminputrc

搜索当前设备:

grep -A10 -B1 \
  '\[Libinput\].*2.4G Wireless Mouse' \
  ~/.config/kcminputrc

理想内容:

[Libinput][12994][102][2.4G Wireless Mouse]
NaturalScroll=true

如果只修改了运行时属性,但配置没有保存,重启后可能恢复原状。

八、event编号不是永久身份

即使本次确认 /dev/input/event11 是正确设备,也不能把 event11 当作永久不变的身份。

以下操作都可能导致编号变化:

  • 重启
  • 重新插拔USB接收器
  • 增加或删除其他输入设备
  • 从USB切换到蓝牙
  • 内核设备枚举顺序变化

长期排查时,应该使用:

设备名称
+vendor ID
+product ID
+udev路径

而不是只记住 event11

结语

KDE Wayland自然滚动不生效时,最关键的问题往往不是“设置有没有保存”,而是“设置保存到了哪个设备”。

完整排查链路应是:

确认真实滚轮节点
→ 读取KWin运行时属性
→ 开启naturalScroll
→ 检查kcminputrc持久配置
→ 重启后再次验证

Wayland下输入设备由KWin统一管理,过去依赖 xinput 的思路已经不再适用。

Leave a Reply

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