Touchpad Synaptics

来自 ArchWiki

本文详细介绍了 Synaptics 输入驱动的安装和配置过程,该驱动用于大多数笔记本电脑上的 Synaptics (和 ALPS) 触摸板。

警告: xf86-input-synaptics 已不再积极更新。如果可能,请使用 libinput。 有关您可能仍然偏好 xf86-input-synaptics 的一些原因,请参阅 [1][2]
注意: 如果您想通过 GNOME 设置配置触摸板,则需要使用 libinput 驱动。[3]

安装

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
  • 如果您的触摸板太敏感,请为 FingerLowFingerHigh 使用更高的值,反之亦然。请记住,FingerLow 应小于 FingerHigh

运行时配置

除了传统的配置方法外,Synaptics 驱动程序还支持运行时配置。这意味着用户可以通过软件应用程序设置某些选项,这些选项会立即应用,而无需重启 Xorg。这对于在将配置选项包含在配置文件或脚本中之前测试配置选项很有用。请注意,运行时配置不是持久的,仅在 Xorg 服务器存在期间有效。

控制台工具

  • Synclient — 用于配置和查询 Synaptics 驱动程序设置的命令行实用程序。
https://xorg.freedesktop.org/ || xf86-input-synaptics
  • xinput — 用于配置 X 输入设备的通用实用程序。
https://xorg.freedesktop.org/ || xorg-xinput

图形工具

  • GPointing Device Settings — 为连接到系统的多个指点设备(包括您的 Synaptics 触摸板)提供图形化的运行时配置。此应用程序取代 GSynaptics 成为通过 Synaptics 驱动程序进行图形化触摸板配置的首选工具。
https://wiki.gnome.org/Attic/GPointingDeviceSettings || gpointing-device-settingsAUR
  • kcm_touchpadKDE Plasma 5 的新配置工具。它在系统设置的输入设备下提供了一个模块。它被认为是 synaptiks 和旧的 kcm-touchpad 模块的替代品。
https://invent.kde.org/plasma/plasma-desktop/-/tree/master/kcms/touchpad || plasma-desktop

Xfce

要在 Xfce 中更改这些设置

  1. 打开系统设置
  2. 点击鼠标和触摸板
  3. 触摸板选项卡上更改设置。

Cinnamon

要在 Cinnamon 中更改这些设置

  1. 打开Cinnamon 系统设置
  2. 点击鼠标和触摸板
  3. 触摸板选项卡上更改设置。

MATE

可以配置 MATE 处理触摸板的方式

  1. 运行 dconf-editor
  2. 编辑 org.mate.desktop.peripherals.touchpad 文件夹中的键。

要防止 Mate 设置守护程序覆盖现有设置,请执行以下操作

  1. 运行 dconf-editor
  2. 编辑 org.mate.SettingsDaemon.plugins.mouse
  3. 取消选中 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 启用自然滚动。只需为 VertScrollDeltaHorizScrollDelta 使用负值,如下所示

/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
提示: 当将外部显示器与 bumblebee 一起使用时,可以通过在命令前添加 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
提示: 为了帮助找到手掌检测的最佳值,您可以使用 evtest 来查看触摸板使用期间报告的宽度和 Z 值。

找到正确的设置后,您可以将它们添加到您的 配置文件 中。

Option "PalmDetect" "1"
Option "PalmMinWidth" "8"
Option "PalmMinZ" "100"
警告: 对于某些触摸板,内核的 问题 可能会导致手掌宽度始终报告为 0。这会在大多数情况下破坏手掌检测。在实际修复之前,您可以 patch synaptics 软件包以仅使用 Z 进行手掌检测。
提示: 如果您在硬件上遇到手掌检测不一致的问题,可以尝试的替代方案是 libinput

使用 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"

如果触摸板在启动时始终处于停用状态,即使没有插入鼠标,请尝试在上面的 KERNELACTION 参数之间添加以下条件

ATTRS{name}!="*TouchPad", ATTRS{name}!="*Stick",

GDM

本文或章节已过时。

原因: GDM 将 Xauthority 文件存储在 /run/user/uid/gdm/Xauthority 中。(在 Talk:Touchpad Synaptics 中讨论)

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

本文或章节需要语言、wiki 语法或样式改进。请参阅 Help:Style 以供参考。

原因: 命令块需要提示符。(在 Talk:Touchpad Synaptics 中讨论)

围绕 #在 syndaemon 运行时 中的 udev 规则创建的 touchpad-state-gitAUR 软件包可用。它包括一个 udev 规则和脚本

touchpad-state [--off] [--on]

GNOME

GNOME 用户可以安装 GNOME Shell 扩展 Touchpad Indicator,将切换方法更改为Synclient,并在其首选项中启用自动打开/关闭触摸板

KDE

如果使用 Plasma,则可以使用 plasma-desktop 软件包来管理触摸板。

具有多个 X 会话的系统

本文或章节的事实准确性存在争议。

原因: 硬编码的 DISPLAY 变量不适用于多个 X 会话。(在 Talk:Touchpad Synaptics 中讨论)

对于存在多个用户的环境,需要稍微不同的方法来检测当前用户的 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+F1F8 切换到控制台而无需使用鼠标。

如果您使用的是笔记本电脑,并且在合上笔记本电脑盖子后触摸板无法工作,您可以更改电源管理策略:合上盖子时,“关闭屏幕”而不是“挂起”(或“休眠”)。 这对某些笔记本电脑很有用。

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

相关论坛主题

触摸板被检测为 "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 触摸板中没有多点触控

请参阅 https://unix.stackexchange.com/questions/28736/what-does-the-i8042-nomux-1-kernel-option-do-during-booting-of-ubuntu

光标跳动

一些用户的光标会莫名其妙地在屏幕上跳动。 目前还没有针对此问题的补丁,但开发人员已经意识到了这个问题,并且正在努力解决。

另一种可能性是您遇到了与 i8042 控制器(此设备处理许多笔记本电脑的键盘和触摸板)相关的 IRQ 丢失,因此您有两种可能性:

  1. rmmod && insmod psmouse 模块。
  2. 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

在这种情况下,Handlersmouse0event1,因此将使用 /dev/input/mouse0

本文或章节需要扩充。

原因: 待办事项:解释如何在 /etc/X11/xorg.conf.d/70-synaptics.conf 中应用此操作。(在 Talk:Touchpad Synaptics 中讨论)

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 将一次按钮按下解释为三次。 Oskar Sandberg 编写了一个补丁 [4],用于删除这些点击。

显然,当尝试针对最新版本的 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 于 2008 年发布。(在 Talk:Touchpad Synaptics 中讨论)

如果您使用的是 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 以获得修补且正确配置的版本。

另请参阅