Touchpad Synaptics
本文详细介绍了 Synaptics 输入驱动的安装和配置过程,该驱动用于大多数笔记本电脑上的 Synaptics (和 ALPS) 触摸板。
安装
Synaptics 驱动可以使用软件包 xf86-input-synaptics 安装。
配置
触摸板的主要配置方法是通过 Xorg 服务器配置文件。安装 xf86-input-synaptics 后,默认配置文件位于 /usr/share/X11/xorg.conf.d/70-synaptics.conf
。用户可以将此文件复制到 /etc/X11/xorg.conf.d/
并编辑它以配置各种可用的驱动程序选项。请参阅 synaptics(4) 手册页以获取可用选项的完整列表。可以使用 #Synclient 发现特定于机器的选项。
常用选项
以下示例文件配置了一些常用选项,包括垂直、水平和圆形滚动以及点击即点。
/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass" Identifier "touchpad" Driver "synaptics" MatchIsTouchpad "on" Option "TapButton1" "1" Option "TapButton2" "3" Option "TapButton3" "2" Option "VertEdgeScroll" "on" Option "VertTwoFingerScroll" "on" Option "HorizEdgeScroll" "on" Option "HorizTwoFingerScroll" "on" Option "CircularScrolling" "on" Option "CircScrollTrigger" "2" Option "EmulateTwoFingerMinZ" "40" Option "EmulateTwoFingerMinW" "8" Option "CoastingSpeed" "0" Option "FingerLow" "30" Option "FingerHigh" "50" Option "MaxTapTime" "125" ... EndSection
- TapButton1
- (整数)配置在非角落的单指点击时报告哪个鼠标按钮。
- TapButton2
- (整数)配置在非角落的双指点击时报告哪个鼠标按钮。
- TapButton3
- (整数)配置在非角落的三指点击时报告哪个鼠标按钮。
- RBCornerButton
- (整数)配置在右下角单指点击时报告哪个鼠标按钮(使用
Option "RBCornerButton" "3"
以实现 Ubuntu 风格的右下角右键点击行为)。 - RTCornerButton
- (整数)与上述相同,但用于右上角单指点击。
- VertEdgeScroll
- (布尔值)启用在触摸板右边缘拖动时垂直滚动。
- HorizEdgeScroll
- (布尔值)启用在触摸板底部边缘拖动时水平滚动。
- VertTwoFingerScroll
- (布尔值)启用使用两根手指垂直滚动。
- HorizTwoFingerScroll
- (布尔值)启用使用两根手指水平滚动。
- EmulateTwoFingerMinZ/W
- (整数)调整此值以设置双指滚动的精度。
- FingerLow
- (整数)当手指压力降至此值以下时,驱动程序将其计为释放。
- FingerHigh
- (整数)当手指压力升至此值以上时,驱动程序将其计为触摸。
- MaxTapTime
- 确定点击必须有多“清脆”才能被视为真正的点击。减小该值会要求更清脆的点击。正确调整此参数可以减少手悬停在触摸板上方或轻触触摸板时的误报。
- VertScrollDelta 和 HorizScrollDelta
- (整数)配置滚动速度,这有点违反直觉,因为较高的值产生更高的精度,从而导致较慢的滚动。负值会导致像 macOS 中一样的自然滚动。
- 如果您发现您的手经常刷到触摸板,导致
TapButton2
选项被触发(这很可能会从您的剪贴板粘贴内容),并且您不介意失去双指点击功能,请将TapButton2
设置为0
。或者,请参阅 #打字时禁用触摸板。 - 最新版本包含默认启用的“Coasting”功能,这可能会产生不良影响,即几乎任何滚动都会持续到下一次点击,即使您不再触摸触摸板。这意味着要稍微滚动一下,您需要滚动(通过使用边缘或多点触控选项),然后几乎立即点击触摸板,否则滚动将永远持续下去。如果希望避免这种情况,请将
CoastingSpeed
设置为0
。 - 如果您的触摸板太敏感,请为
FingerLow
和FingerHigh
使用更高的值,反之亦然。请记住,FingerLow
应小于FingerHigh
。
运行时配置
除了传统的配置方法外,Synaptics 驱动程序还支持运行时配置。这意味着用户可以通过软件应用程序设置某些选项,这些选项会立即应用,而无需重启 Xorg。这对于在将配置选项包含在配置文件或脚本中之前测试配置选项很有用。请注意,运行时配置不是持久的,仅在 Xorg 服务器存在期间有效。
控制台工具
- Synclient — 用于配置和查询 Synaptics 驱动程序设置的命令行实用程序。
- xinput — 用于配置 X 输入设备的通用实用程序。
图形工具
- GPointing Device Settings — 为连接到系统的多个指点设备(包括您的 Synaptics 触摸板)提供图形化的运行时配置。此应用程序取代 GSynaptics 成为通过 Synaptics 驱动程序进行图形化触摸板配置的首选工具。
- kcm_touchpad — KDE Plasma 5 的新配置工具。它在系统设置的输入设备下提供了一个模块。它被认为是 synaptiks 和旧的 kcm-touchpad 模块的替代品。
Xfce
要在 Xfce 中更改这些设置
- 打开系统设置。
- 点击鼠标和触摸板。
- 在触摸板选项卡上更改设置。
Cinnamon
要在 Cinnamon 中更改这些设置
- 打开Cinnamon 系统设置。
- 点击鼠标和触摸板。
- 在触摸板选项卡上更改设置。
MATE
可以配置 MATE 处理触摸板的方式
- 运行
dconf-editor
。 - 编辑
org.mate.desktop.peripherals.touchpad
文件夹中的键。
要防止 Mate 设置守护程序覆盖现有设置,请执行以下操作
- 运行
dconf-editor
。 - 编辑
org.mate.SettingsDaemon.plugins.mouse
。 - 取消选中 active 设置。
高级配置
使用 xinput 确定触摸板功能
根据您的型号,Synaptics 触摸板可能具有或缺少某些功能。我们可以使用 xinput(1) 确定您的硬件支持哪些功能。
- 左、中和右硬件按钮
- 双指检测
- 三指检测
- 可配置分辨率
首先,找到您的触摸板的名称
$ xinput list
现在您可以使用 xinput 查找触摸板的功能
$ xinput list-props "SynPS/2 Synaptics TouchPad" | grep Capabilities
Synaptics Capabilities (309): 1, 0, 1, 0, 0, 1, 1
从左到右,这显示了
1
:设备具有物理左键0
:设备没有物理中键1
:设备具有物理右键0
:设备不支持双指检测0
:设备不支持三指检测1
:设备可以配置垂直分辨率1
:设备可以配置水平分辨率
使用 xinput list-props "SynPS/2 Synaptics TouchPad"
列出所有设备属性。有关 Synaptics 属性的完整文档,请参阅 synaptics(4)。
Synclient
Synclient 可以配置用户可用的每个选项,如 synaptics(4) 中所述。可以调出当前用户设置的完整列表
$ synclient -l
每个列出的配置选项都可以通过 synclient 控制,例如
- 启用手掌检测
$ synclient PalmDetect=1
- 配置按钮事件(此处为双指点击的右键事件)
$ synclient TapButton2=3
- 禁用触摸板
$ synclient TouchpadOff=1
在您通过 synclient 成功尝试和测试您的选项后,您可以通过将它们添加到 /etc/X11/xorg.conf.d/70-synaptics.conf
来使这些更改永久生效。
evtest
工具 evtest 可以实时显示触摸板上的压力和位置,从而进一步改进默认的 Synaptics 设置。可以使用以下命令启动 evtest 监控:
$ evtest /dev/input/eventX
X 表示触摸板的 ID。可以通过查看 cat /proc/bus/input/devices
的输出来找到它。
evtest 需要对设备的独占访问权,这意味着它不能与 X 服务器实例一起运行。您可以终止 X 服务器或从不同的虚拟终端(例如,按 Ctrl+Alt+F2
)运行 evtest。
xev
工具 xorg-xev 可以实时显示点击、单击、压力、位置和其他测量参数,从而进一步改进默认的 Synaptics 设置。xev 可以在 X 中运行,无需任何特定设置。使用 -event
参数,可以限制报告的事件类型。
圆形滚动
圆形滚动是 Synaptics 提供的一项功能,它非常类似于 iPod 的行为。您可以进行圆形滚动,而不是(或除了)水平或垂直滚动。一些用户发现这更快更精确。要启用圆形滚动,请将以下选项添加到 /etc/X11/xorg.conf.d/70-synaptics.conf
的触摸板设备部分
/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass" ... Option "CircularScrolling" "on" Option "CircScrollTrigger" "0" ... EndSection
选项 CircScrollTrigger
可以是以下值之一,确定圆形滚动应从哪个边缘开始
0 All Edges 1 Top Edge 2 Top Right Corner 3 Right Edge 4 Bottom Right Corner 5 Bottom Edge 6 Bottom Left Corner 7 Left Edge 8 Top Left Corner
如果您想将圆形滚动与水平和/或垂直滚动结合使用,则指定非零值可能很有用。如果您这样做,滚动的类型将由您开始的边缘决定。
要快速滚动,请在触摸板中心绘制小圆圈。要缓慢而更精确地滚动,请绘制大圆圈。
自然滚动
可以通过 Synaptics 启用自然滚动。只需为 VertScrollDelta
和 HorizScrollDelta
使用负值,如下所示
/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass" ... Option "VertScrollDelta" "-111" Option "HorizScrollDelta" "-111" ... EndSection
软件切换
您可能希望通过简单的按钮点击或快捷方式打开和关闭触摸板。这可以通过绑定以下基于 xinput 的脚本来完成
/usr/local/bin/touchpad_toggle.sh
#!/bin/bash declare -i ID ID=$(xinput list | grep -Eio '(touchpad|glidepoint)\s*id=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}') declare -i STATE STATE=$(xinput list-props "$ID" | grep 'Device Enabled' | awk '{print $4}') if [ "$STATE" -eq 1 ] then xinput disable "$ID" # echo "Touchpad disabled." # notify-send -a 'Touchpad' 'Touchpad Disabled' -i input-touchpad else xinput enable "$ID" # echo "Touchpad enabled." # notify-send -a 'Touchpad' 'Touchpad Enabled' -i input-touchpad fi
DISPLAY=:8
在第二个 X 服务器上配置触摸板。或者,可以使用 synclient 来切换触摸板。但是,它只能关闭触摸事件,而不能关闭物理 ClickPad 按钮的使用。
/usr/local/bin/touchpad.sh
#!/bin/bash synclient TouchpadOff=$(synclient -l | grep -c 'TouchpadOff.*=.*0')
打字时禁用触摸板
使用驱动程序的自动手掌检测
首先,您应该测试它是否为您的触摸板正常工作以及设置是否准确。使用以下命令启用手掌检测:
$ synclient PalmDetect=1
然后测试打字。您可以通过设置触摸被视为手掌的最小宽度来调整检测,例如
$ synclient PalmMinWidth=8
您可以调整触摸被视为手掌所需的最小压力,例如
$ synclient PalmMinZ=100
找到正确的设置后,您可以将它们添加到您的 配置文件 中。
Option "PalmDetect" "1" Option "PalmMinWidth" "8" Option "PalmMinZ" "100"
使用 syndaemon
syndaemon(1) 监视键盘活动并在打字时禁用触摸板。它有几个选项来控制禁用的发生时间。使用以下命令查看它们:
$ syndaemon -?
例如,要在每次按键后禁用点击和滚动 0.5 秒(忽略像 Ctrl
这样的修饰键),请使用
$ syndaemon -i 0.5 -t -K -R
确定您喜欢的选项后,您应该使用您的登录管理器或 xinitrc 以使其在 X 启动时自动运行。-d
选项将使其在后台作为守护程序启动。
检测到鼠标时禁用触摸板
借助 udev,如果插入了外部鼠标,则可以自动禁用触摸板。要实现此目的,请使用以下规则之一。
基本桌面
这是一般用于非“桌面环境”会话的基本规则
/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=1" SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=0"
如果触摸板在启动时始终处于停用状态,即使没有插入鼠标,请尝试在上面的 KERNEL
和 ACTION
参数之间添加以下条件
ATTRS{name}!="*TouchPad", ATTRS{name}!="*Stick",
GDM
GDM 将 Xauthority 文件存储在 /var/run/gdm
中的随机命名目录中。您应该找到 Xauthority 文件的实际路径,可以使用 ps ax
完成。由于某种原因,用户的多个授权文件可能会出现,因此需要像这样的规则
/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name username -print0 -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=1" SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="remove", PROGRAM="/usr/bin/find /var/run/gdm -name username -print0 -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=0"
此外,您应该验证您的 udev 脚本是否正常运行。您可以通过使用 root 权限运行 udevadm monitor -p
来检查条件。
在 syndaemon 运行时
syndaemon 无论是通过 用户 还是桌面环境启动,都可能与 synclient 冲突,并且需要禁用。将需要像这样的规则
/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name username -print -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/bin/sh -c '/usr/bin/synclient TouchpadOff=1 ; sleep 1; /bin/killall syndaemon; '"
touchpad-state
围绕 #在 syndaemon 运行时 中的 udev 规则创建的 touchpad-state-gitAUR 软件包可用。它包括一个 udev 规则和脚本
touchpad-state [--off] [--on]
GNOME
GNOME 用户可以安装 GNOME Shell 扩展 Touchpad Indicator,将切换方法更改为Synclient,并在其首选项中启用自动打开/关闭触摸板。
KDE
如果使用 Plasma,则可以使用 plasma-desktop 软件包来管理触摸板。
具有多个 X 会话的系统
对于存在多个用户的环境,需要稍微不同的方法来检测当前用户的 X 环境。此脚本将有助于实现此目的
/usr/bin/mouse-pnp-event-handler.sh
#!/bin/sh ## $1 = "add" / "remove" ## $2 = %k from udev ## Set TRACKPAD_NAME according to your configuration. ## Check your trackpad name with: ## find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}' TRACKPAD_NAME="SynPS/2 Synaptics TouchPad" USERLIST=$(w -h | cut -d' ' -f1 | sort | uniq) MOUSELIST=$(find /sys/class/input/ -name mouse*) for CUR_USER in ${USERLIST}; do CUR_USER_XAUTH="$(sudo -Hiu ${CUR_USER} env | grep -e "^HOME=" | cut -d'=' -f2)/.Xauthority" ## Can't find a way to get another users DISPLAY variable from an isolated root environment. Have to set it manually. #CUR_USER_DISPL="$(sudo -Hiu ${CUR_USER} env | grep -e "^DISPLAY=" | cut -d'=' -f2)" CUR_USER_DISPL=":0" export XAUTHORITY="${CUR_USER_XAUTH}" export DISPLAY="${CUR_USER_DISPL}" if [ -f "${CUR_USER_XAUTH}" ]; then case "$1" in "add") /usr/bin/synclient TouchpadOff=1 /usr/bin/logger "USB mouse plugged. Disabling touchpad for $CUR_USER. ($XAUTHORITY - $DISPLAY)" ;; "remove") ## Only execute synclient if there are no external USB mice connected to the system. EXT_MOUSE_FOUND="0" for CUR_MOUSE in ${MOUSELIST}; do if [ "$(cat ${CUR_MOUSE}/device/name)" != "${TRACKPAD_NAME}" ]; then EXT_MOUSE_FOUND="1" fi done if [ "${EXT_MOUSE_FOUND}" == "0" ]; then /usr/bin/synclient TouchpadOff=0 /usr/bin/logger "No additional external mice found. Enabling touchpad for $CUR_USER." else logger "Additional external mice found. Won't enable touchpad yet for $CUR_USER." fi ;; esac fi done
更新 TRACKPAD_NAME
变量以进行系统配置。运行 find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}'
以获取有用的鼠标名称列表。选择您的触控板的名称。
然后让 udev 在插入或拔出 USB 鼠标时运行此脚本,并使用以下 udev 规则
/etc/udev/rules.d/01-touchpad.rules
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", RUN+="/usr/bin/mouse-pnp-event-handler.sh add %k" SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", RUN+="/usr/bin/mouse-pnp-event-handler.sh remove %k"
无按钮触摸板(又名 ClickPad)
越来越多的笔记本电脑具有一种特殊的触摸板,其单个鼠标按钮是跟踪板的一部分,而不是外部按钮。例如,2015 年的 Dell XPS 13、HP 4500 ProBooks 系列、ThinkPad X220 和 X1 ThinkPad 系列都具有这种触摸板。默认情况下,整个按钮区域都被检测为左键,因此右键单击和中键单击功能以及单击 + 拖动将不起作用。可以将双指和三指单击定义为右键和中键单击,和/或将单击板表面的部分定义为右键和中键。请注意,虽然驱动程序注册了多次触摸,但它不跟踪单个手指(截至 1.7.1 版本),这导致在使用 clickpad 的物理按钮进行拖放和其他手势时出现令人困惑的行为:您必须用两根或三根手指单击,然后只移动其中一根手指,同时用另一根手指按住按钮。您可以研究 xf86-input-mtrackAUR 驱动程序以获得更好的多点触控支持。
一些桌面环境(至少 KDE 和 GNOME)为 clickpad 定义了合理且有用的默认配置,在触摸板的右下方提供了一个右键,将触摸板上任何位置的双指和三指点击识别为右键和中键单击,并提供配置选项以将双指和三指点击定义为右键和中键单击。如果您的桌面没有这样做,或者如果您想要更多控制,则可以修改 /etc/X11/xorg.conf.d/70-synaptics.conf
中的触摸板部分(或者更好的是,使用更高编号前缀的自定义 synaptics 配置文件)。例如
/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass" Identifier "touchpad" Driver "synaptics" MatchIsTouchpad "on" # Enable clickpad/multitouch support Option "ClickPad" "true" # Middle-button emulation is not supported Option "EmulateMidButtonTime" "0" # Define right soft button at the bottom Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0" EndSection
SoftButtonAreas
选项的格式为(来自 synaptics(4))
RightButtonAreaLeft RightButtonAreaRight RightButtonAreaTop RightButtonAreaBottom MiddleButtonAreaLeft MiddleButtonAreaRight MiddleButtonAreaTop MiddleButtonAreaBottom
上面的 SoftButtonAreas
选项在文档或 synaptics 软件包中很常见,它将触摸板底部 18% 的右半部分定义为右键。没有定义中键。如果您想定义一个中键,请记住手册中的一个关键信息;设置为 0 的边缘在该方向上延伸到无穷大。
在以下示例中,右键将占据按钮区域最右边的 40%,中键将占据按钮区域中心 20% 的区域。最左边的 40% 仍然是左键(clickpad 的其余部分也是如此)
... Option "SoftButtonAreas" "60% 0 82% 0 40% 59% 82% 0" ...
您可以使用 synclient 检查软按钮区域
$ synclient -l | grep -i ButtonArea
RightButtonAreaLeft = 3914 RightButtonAreaRight = 0 RightButtonAreaTop = 3918 RightButtonAreaBottom = 0 MiddleButtonAreaLeft = 3100 MiddleButtonAreaRight = 3873 MiddleButtonAreaTop = 3918 MiddleButtonAreaBottom = 0
如果您的按钮不起作用,软按钮区域没有变化,请确保您没有软件包分发的 synaptics 配置文件覆盖了您的自定义设置(即,某些 AUR 软件包分发的配置前缀编号非常高)。
这些设置无法使用 synclient 运行时修改,但是,xinput 可以。
xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Soft Button Areas" 4000 0 4063 0 3000 4000 4063 0
您不能在此命令中使用百分比,因此请查看 /var/log/Xorg.0.log
以确定触摸板的 x 和 y 轴范围。
底部边缘校正
在某些情况下,例如 Toshiba Satellite P50,一切都开箱即用,但通常您的点击被视为鼠标移动,并且光标会在注册点击之前跳开。这可以通过运行以下命令轻松解决
$ synclient -l | grep BottomEdge
获取 BottomEdge 值并减去您想要的按钮高度,然后使用以下命令临时应用
$ synclient AreaBottomEdge=4000
找到一个好的值后,使用以下命令使其成为固定校正
/etc/X11/xorg.conf.d/70-synaptics.conf
... Option "AreaBottomEdge" "4000" ...
故障排除
从休眠/睡眠状态恢复后触摸板无法工作
偶尔,当计算机从睡眠或休眠状态恢复时,触摸板会无法工作。这通常可以通过以下方法在不重启的情况下纠正:
- 切换到控制台然后再切换回来,
- 再次进入睡眠模式,然后再次恢复,
- 找到正确的内核模块,然后移除并重新插入,可能需要使用特定参数 (例如
modprobe -r psmouse && modprobe psmouse proto=imps
), - 将内核模块
psmouse
列入黑名单可能是一个永久性的选项 (当触摸板由另一个模块处理时,例如i2c_designware_platform
), - 添加
psmouse.synaptics_intertouch=0
内核参数 可以永久解决此问题。
Ctrl+Alt+F1
到 F8
切换到控制台而无需使用鼠标。如果您使用的是笔记本电脑,并且在合上笔记本电脑盖子后触摸板无法工作,您可以更改电源管理策略:合上盖子时,“关闭屏幕”而不是“挂起”(或“休眠”)。 这对某些笔记本电脑很有用。
xorg.conf.d/70-synaptics.conf 在 MATE 中似乎未应用
MATE 默认会覆盖触摸板的各种选项。 这包括 MATE 系统控制面板中没有图形配置的可配置功能。 这可能会导致 /etc/X11/xorg.conf.d/70-synaptics.conf
似乎未被应用。 请按照 #MATE 预防此行为。
触摸板无法工作,Xorg.0.log 显示 "Query no Synaptics: 6003C8"
由于 Synaptics 当前的设置方式,Synaptics 模块加载了 2 个实例。 我们可以通过打开 xorg 日志文件 (/var/log/Xorg.0.log
) 并注意到以下内容来识别这种情况
/var/log/Xorg.0.log
[ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "evdev touchpad catchall" [ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "touchpad catchall"
请注意如何加载模块的 2 个不同命名的实例。 在某些情况下,这会导致触摸板变得无法工作。
我们可以通过将 MatchDevicePath "/dev/input/event*"
添加到我们的 /etc/X11/xorg.conf.d/70-synaptics.conf
文件中来防止这种双重加载
/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass" Identifier "touchpad catchall" Driver "synaptics" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Option "TapButton1" "1" Option "TapButton2" "2" Option "TapButton3" "3" EndSection
重启 X 并再次检查 xorg 日志,错误应该消失,触摸板应该可以正常工作。
相关错误报告: FS#20830
相关论坛主题
- https://bbs.archlinux.org/viewtopic.php?id=104769
- https://bbs.archlinux.org/viewtopic.php?pid=825690
触摸板被检测为 "PS/2 Generic Mouse" 或 "Logitech PS/2 mouse"
这可能是由许多问题引起的;
带有触摸屏和触摸板的笔记本电脑
具有触摸屏和触摸板的笔记本电脑(例如 Dell XPS 12 或 Dell XPS 13)似乎也存在问题。 为了解决这个问题,您可以禁用 i2c_hid
驱动程序,但这确实会产生禁用触摸屏的副作用。
在 kernel 3.15 之后,禁用模块可能会导致触摸板完全停止工作。 删除黑名单应该允许它开始工作,但功能有限,请参阅 FS#40921。
Synaptics 特殊功能无法工作(多点触控、滚动等)
在某些情况下,Synaptics 触摸板仅部分工作。 即使正确启用,两指滚动或两指中键单击等功能也无法工作。 这可能与上面提到的触摸板无法工作问题有关。 解决方法是相同的,防止模块重复加载。
如果防止模块加载两次不能解决您的问题,请尝试注释掉切换 MatchIsTouchpad
(现在默认包含在 Synaptics 配置中)。
某些 Elantech 触摸板中没有多点触控
光标跳动
一些用户的光标会莫名其妙地在屏幕上跳动。 目前还没有针对此问题的补丁,但开发人员已经意识到了这个问题,并且正在努力解决。
另一种可能性是您遇到了与 i8042 控制器(此设备处理许多笔记本电脑的键盘和触摸板)相关的 IRQ 丢失,因此您有两种可能性:
rmmod && insmod
psmouse
模块。- 将
i8042.nomux=1
附加到您的 内核参数 并重启您的机器。
触摸板设备未位于 /dev/input/*
如果是这种情况,您可以使用此命令显示有关您的输入设备的信息
$ cat /proc/bus/input/devices
搜索名称为 "SynPS/2 Synaptics TouchPad" 的输入设备。 输出的 "Handlers" 部分指定了您需要指定的设备。
示例输出
$ cat /proc/bus/input/devices
I: Bus=0011 Vendor=0002 Product=0007 Version=0000 N: Name="SynPS/2 Synaptics TouchPad" P: Phys=isa0060/serio4/input0 S: Sysfs=/class/input/input1 H: Handlers=mouse0 event1 B: EV=b B: KEY=6420 0 7000f 0
在这种情况下,Handlers
是 mouse0
和 event1
,因此将使用 /dev/input/mouse0
。
Firefox 和特殊的触摸板事件
您可以通过编辑这些操作的设置来启用/禁用 Firefox 在点击或滚动触摸板的某些部分时处理的一些特殊事件。 在您的 Firefox 地址栏中键入 about:config
。 要更改选项,请双击有问题的行。
Firefox 17.0 及更高版本
默认情况下,水平滚动现在将滚动浏览页面,而不是浏览您的历史记录。 要重新启用 Mac 风格的前进/后退双指滑动,请编辑
mousewheel.default.action.override_x = 2
您可能会在垂直滚动时遇到意外的前进/后退。 要更改 Firefox 对水平滑动的灵敏度,请编辑
mousewheel.default.delta_multiplier_x
最佳值将取决于您的触摸板以及您如何使用它,尝试从 10
开始。 负值将反转滑动方向。
LG 笔记本电脑上的 Synaptics 滚动和多重操作
这些问题似乎发生在多个型号的 LG 笔记本电脑上。 症状包括:当按下鼠标按钮 1 时,Synaptics 将其解释为 ScrollUP 和常规按钮 1 单击; 按钮 2 也是如此。
滚动问题可以通过在 xorg.conf
中输入以下内容来解决
/etc/X11/xorg.conf.d/xorg.conf
Option "UpDownScrolling" "0"
显然,当尝试针对最新版本的 Synaptics 编译此补丁时,它会失败。 解决此问题的方法是使用 Synaptics 的 Git 存储库 [5]。
要在下载 tarball 并解压缩后构建软件包,请执行
$ cd synaptics-git $ makepkg
其他外部鼠标问题
首先,确保描述外部鼠标的部分包含以下行(或该行看起来像这样)
/etc/X11/xorg.conf.d/xorg.conf
Option "Device" "/dev/input/mice"
如果 "Device"
行不同,请将其更改为上述内容并尝试重启 X。 如果这不能解决您的问题,请将您的触摸板设为 "Server Layout" 部分中的 CorePointer
/etc/X11/xorg.conf.d/xorg.conf
InputDevice "Touchpad" "CorePointer"
并将您的外部设备设为 "SendCoreEvents"
/etc/X11/xorg.conf.d/xorg.conf
InputDevice "USB Mouse" "SendCoreEvents"
最后,将此添加到您的外部设备的部分
/etc/X11/xorg.conf.d/xorg.conf
Option "SendCoreEvents" "true"
如果以上所有方法都对您不起作用,请检查相关的错误跟踪器以查找可能的错误,或浏览论坛以查看是否有人找到了更好的解决方案。
Xorg.log.0 显示 SynPS/2 Synaptics 触摸板无法抓取事件设备,errno=16
如果您使用的是 Xorg 7.4,您可能会从 /var/log/Xorg.0.log
收到这样的警告。 这是因为在使用 Linux 2.6 事件协议时,驱动程序将抓取事件设备以供独占使用。 当它失败时,X 将返回此错误消息。
抓取事件设备意味着没有其他用户空间或内核空间程序可以看到触摸板事件。 如果 X 配置文件包含 /dev/input/mice
作为输入设备,这是可取的,但如果您想从用户空间监控设备,则这是不可取的。
如果您想控制它,请在 /etc/X11/xorg.conf.d/70-synaptics.conf
中的触摸板部分添加或修改 "GrabEventDevice"
选项
/etc/X11/xorg.conf.d/70-synaptics.conf
... Option "GrabEventDevice" "boolean" ...
这将在重启 X 时生效,尽管您也可以使用 synclient 更改它。 当使用 synclient 程序更改此参数时,更改将不会生效,直到 Synaptics 驱动程序被禁用并重新启用。 这可以通过切换到文本控制台,然后再切换回 X 来实现。
从 Windows 重启后,Synaptics 丢失多点触控检测
许多驱动程序都包含一个固件,该固件在计算机启动时加载到闪存中。 此固件不一定在关机时清除,并且并非始终与 Linux 驱动程序兼容。 清除闪存的唯一方法是完全关机而不是使用重启。 通常认为,在操作系统之间切换时,最好永远不要使用重启。
关机后触摸板无法识别
某些触摸板(尤其是 Elantech)在标准关机后将无法识别为任何类型的设备。 此问题有多种可能的解决方案:
- 启动到 Windows 分区/安装盘并从中关机。
- 关机后等待约 1 分钟再打开计算机。
- 正如 https://bugzilla.kernel.org/show_bug.cgi?id=81331#c186 中讨论的那样,一个补丁已合并到稳定内核中,为 Elantech 触摸板提供了修复。 默认情况下支持 Gigabyte P34、P35v2 和 X3 型号。 对于其他型号(尤其是重新命名的 Gigabyte 笔记本电脑,如 XMG),可以将
i8042.kbdreset=1
设置为内核参数。
Trackpoint 和 Clickpad
较新的 Thinkpad 不再为 Trackpoint 配备物理按钮,而是使用 Clickpad 的上部区域作为按钮(左键、中键、右键)。 除了人体工程学观点外,这在当前的 Xorg 中运行良好。 不幸的是,尚不支持使用中键的鼠标滚轮模拟。 如果您打算使用 Trackpoint,请安装 xf86-input-evdev-trackpointAUR 以获得修补且正确配置的版本。