跳转至内容

触摸板 Synaptics

来自 ArchWiki
(重定向自 Synaptics)

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

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

安装

可以使用软件包 xf86-input-synaptics安装 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。或者,请参阅 #键入时禁用触摸板
  • 最新版本包含一个默认启用的“惯性滚动”功能,它可能会产生不希望的效果,即几乎任何滚动都会持续到下次轻点或单击为止,即使您不再触摸触摸板。这意味着要滚动一点,您需要滚动 (通过边缘或多点触控选项),然后几乎立即轻点触摸板,否则滚动将无限持续。如果您想避免这种情况,请将 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 服务器或从另一个虚拟终端运行 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 启用自然滚动。只需为 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。这在大多数情况下会破坏掌压检测。在实际修复之前,您可以 修补 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 来完成。出于某些原因,用户可能会出现多个 authority 文件,因此需要这样的规则:

/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,将 Switch Method 更改为 Synclient,并在其首选项中启用 Automatically switch Touchpad On/Off

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}' 来获取有用的鼠标名称列表。选择您的触摸板对应的名称。

然后,当 USB 鼠标插入或拔出时,让 udev 运行此脚本,使用以下 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"

无按键触摸板 (又称 ClickPads)

越来越多的笔记本电脑采用了特殊的触摸板,它在轨迹板上有一个单一的鼠标按钮,而不是外部按钮。例如,2015 年的 Dell XPS 13、HP ProBook 4500 系列、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+F1F8 切换到控制台而无需使用鼠标。

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

MATE 中 xorg.conf.d/70-synaptics.conf 似乎不生效

MATE 默认会覆盖您的触摸板的各种选项。这包括 MATE 系统控制面板中没有图形化配置的可配置功能。这可能导致 /etc/X11/xorg.conf.d/70-synaptics.conf 看起来没有生效。请按照 #MATE 中的说明来阻止此行为。

触摸板不工作,Xorg.0.log 显示 "Query no Synaptics: 6003C8"

由于 Synaptics 当前的设置方式,Synaptics 模块被加载了两次。我们可以通过打开 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"

请注意,以两个不同名称加载了两个模块实例。在某些情况下,这会导致触摸板无法正常工作。

我们可以通过将 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 日志,错误应该消失,触摸板应该可以正常工作。

相关 bug 报告: FS#20830

相关论坛主题

触摸板被识别为 "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 触摸板没有多点触控

请参阅 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

本文章或章节需要扩充。

原因: TODO: 解释如何在 /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"

如果以上方法均无效,请检查相关 bug 跟踪器以查找可能的 bug,或通过论坛查看是否有人找到了更好的解决方案。

Synaptics 驱动在从 Windows 重启后丢失多点触控检测

许多驱动程序都包含一个固件,该固件在计算机启动时被加载到闪存中。这个固件在关机时并不一定会清除,并且并不总是与 Linux 驱动程序兼容。清除闪存的唯一方法是完全关机,而不是使用重启。通常来说,在操作系统之间切换时,永远不要使用重启被认为是最佳实践。

关机后触摸板未被识别

某些触摸板(尤其是 Elantech)在正常关机后将无法被识别为任何类型的设备。这个问题有多种可能的解决方案。

  • 启动到 Windows 分区/安装磁盘,然后从那里关机。
  • 关机后,在打开计算机之前等待大约 1 分钟。
  • 正如在 https://bugzilla.kernel.org/show_bug.cgi?id=81331#c186 中讨论的,一个补丁已被合并到稳定内核中,为 Elantech 触摸板提供了修复。Gigabyte P34、P35v2 和 X3 型号默认支持。对于其他型号(尤其是重新品牌的 Gigabyte 笔记本电脑,如 XMG 的),可以将 i8042.kbdreset=1 设置为内核参数。

指点杆和触摸板

较新的 Thinkpad 的指点杆不再有物理按钮,而是使用触摸板的上方区域作为按钮(左键、中键、右键)。除了人体工程学观点,这与当前的 Xorg 工作得相当好。不幸的是,使用中键的鼠标滚轮模拟尚未得到支持。如果您打算使用指点杆,请安装 xf86-input-evdev-trackpointAUR 以获得一个经过修补且配置正确的版本。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.