如何排查启动时Synaptics触控板自然滚动设置被覆盖的问题
这种启动时手动设置的触控板参数被莫名覆盖的情况确实挺闹心的,我结合经验给你几个排查方向,一步步来定位问题:
先检查桌面环境的自带触控板设置
几乎所有主流桌面环境(GNOME、KDE、Xfce等)都有自己的触控板配置工具,这些工具往往会在桌面完全加载后,自动应用存储的设置,很可能覆盖了你提前执行的脚本。比如GNOME可以打开「优化」(gnome-tweaks)的触控板选项,看看有没有「自然滚动」的开关;KDE去系统设置的「输入设备」里找触控板配置。如果这里有相关选项,直接开启它,可能比脚本更靠谱,也不会被覆盖。排查其他启动脚本/程序
看看有没有其他和触控板相关的启动项抢先或延后修改了设置:- 检查用户级启动项:
ls ~/.config/autostart/,看看有没有带synaptics、touchpad关键词的.desktop文件,打开看看Exec字段的命令是不是会重置滚动参数。 - 检查系统级启动项:
ls /etc/xdg/autostart/,同样找相关的配置文件。
另外,有些系统会在Xorg启动时加载默认的触控板配置脚本,也可能和你的脚本冲突。
- 检查用户级启动项:
调整脚本的执行时机
你的脚本可能执行得太早了,桌面环境的初始化进程在它之后运行,把设置改了回去。试试把脚本放到桌面环境的启动项里,而不是系统级的启动路径(比如rc.local、/etc/profile.d):- 比如在GNOME里,打开「启动应用程序」,添加你的脚本路径;
- 或者手动在
~/.config/autostart/创建一个touchpad-natural-scroll.desktop文件,内容大概是:
加个[Desktop Entry] Type=Application Name=Touchpad Natural Scroll Exec=bash -c "sleep 5 && /path/to/your/script.sh" Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=truesleep 5是为了等桌面环境完全加载后再执行,避免被后续进程覆盖。
实时追踪属性变化,定位元凶
可以用命令实时监控触控板属性的变化,看具体是哪个程序在修改参数:- 先拿到你的触控板ID(就是脚本里的
$TPAD_ID),比如假设是12; - 在终端运行:
xinput watch-props 12,这个命令会实时输出该设备的属性变化; - 保持终端打开,重新登录桌面或者重启系统,看什么时候「Synaptics Scrolling Distance」被改回正值。输出里会显示修改属性的客户端ID,比如
client 10; - 用
xinput list --long或者xwininfo -root -tree(需要安装xorg-xwininfo)来对应这个客户端ID到具体的程序,这样就能找到是谁在改你的设置了。
- 先拿到你的触控板ID(就是脚本里的
检查Synaptics的系统配置文件
有些系统会在Xorg的配置目录里存放Synaptics的默认配置,比如/etc/X11/xorg.conf.d/50-synaptics.conf(文件名可能略有不同)。打开这个文件,看看有没有VertScrollDelta相关的配置项,如果有,直接把它改成-112,这样Xorg启动时就会直接应用正确的设置,不需要额外脚本了。如果没有,也可以手动添加:Section "InputClass" Identifier "touchpad catchall" Driver "synaptics" MatchIsTouchpad "on" Option "VertScrollDelta" "-112" Option "HorizScrollDelta" "-112" EndSection检查桌面环境的配置数据库
比如GNOME用dconf存储配置,KDE用kconfig,这些数据库里的设置优先级很高:- GNOME下,终端运行
dconf list /org/gnome/desktop/peripherals/touchpad/,看看有没有natural-scroll项,如果有,用dconf write /org/gnome/desktop/peripherals/touchpad/natural-scroll true开启自然滚动,这样桌面环境会自动应用这个设置,不会再覆盖你的脚本。 - KDE下可以用
kwriteconfig5命令或者直接在系统设置里修改,效果是一样的。
- GNOME下,终端运行
备注:内容来源于stack exchange,提问作者Niko Senkov

