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 settings daemon 覆盖现有设置,请执行以下操作
- 运行
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 服务器,也可以从不同的虚拟终端运行 evtest(例如,按 Ctrl+Alt+F2
)。
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 系列都具有这种触摸板。默认情况下,整个按钮区域都被检测为左键,因此右键和中键功能以及单击 + 拖动将无法正常工作。可以将双指和三指单击定义为右键和中键单击,和/或将 ClickPad 表面的部分区域定义为右键和中键。请注意,尽管驱动程序注册了多次触摸,但它不跟踪单个手指(截至版本 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
驱动程序,但这确实会产生禁用触摸屏的副作用。
这似乎是一个已知的问题。另请参阅这个帖子。
在内核 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 将其解释为向上滚动以及常规的按键 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 型号默认受支持。对于其他型号(尤其是重新贴牌的技嘉笔记本电脑,如 XMG 的),可以将
i8042.kbdreset=1
设置为内核参数。
Trackpoint 和 Clickpad
较新的 Thinkpad 不再为它们的 Trackpoint 配备物理按键,而是使用 Clickpad 的上部区域作为按键(左键、中键、右键)。除了人体工程学观点之外,这在当前的 Xorg 中运行良好。不幸的是,尚不支持使用中键的鼠标滚轮模拟。如果您打算使用 Trackpoint,请安装 xf86-input-evdev-trackpointAUR 以获得修补和正确配置的版本。