TrackPoint

来自 ArchWiki

TrackPoint 是联想的键盘中间指点杆的商标。它由 xf86-input-evdevxf86-input-libinput 支持。

默认 Xorg 行为支持点击和指向。对于 evdev 驱动程序,中键点击和滚动需要额外的配置。

GUI 配置

安装 gpointing-device-settingsAUR 软件包。

注意: 此软件不再维护(上次发布于 2013 年)。当使用 xf86-input-libinput 时,它可能不允许深入配置。

中键滚动

当使用 xf86-input-libinput 时,默认启用中键滚动。

当使用 xf86-input-evdev 时,通过来自 xorg-xinput 软件包的 xinput 支持中键滚动。例如

~/.xinitrc
xinput set-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 1
xinput set-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 2
xinput set-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 200
xinput set-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Axes" 6 7 4 5
注意
  • 设备名称可以使用 xinput --listhwinfo 列出。
  • "Device Accel Constant Deceleration" 行配置 Trackpoint 的灵敏度。

Xorg 配置

作为 ~/.xinitrc 配置的替代方案,您还可以为 evdev(4) 驱动程序创建一个 Xorg#Configuration。例如,作为 /etc/X11/xorg.conf.d/20-thinkpad.conf,将 TPPS/2 IBM TrackPoint 替换为来自 xinput 的设备名称

Section "InputClass"
    Identifier	"Trackpoint Wheel Emulation"
    Driver "evdev"
    MatchProduct	"TPPS/2 IBM TrackPoint"
    MatchDevicePath	"/dev/input/event*"
    Option		"EmulateWheel"		"true"
    Option		"EmulateWheelButton"	"2"
    Option		"Emulate3Buttons"	"false"
    Option		"XAxisMapping"		"6 7"
    Option		"YAxisMapping"		"4 5"
EndSection

双键 Trackpoint

在双键 Trackpoint 上,使用 xf86-input-libinput,滚动按钮可以设置为右键单击按钮而不会移除功能。

device 替换为来自 xinput 的设备名称

$ xinput set-prop "device" "libinput Button Scrolling Button" 3

Sysfs 属性

TrackPoint 将其属性作为文件暴露在 /sys/devices/platform/i8042/serio1/ 中。例如,要手动启用点击即选功能

# echo -n 1 > /sys/devices/platform/i8042/serio1/press_to_select
注意: 属性文件的位置可能因您使用的设备而异。同时具有 TrackPoint 和触摸板设备的系统将使用 /sys/devices/platform/i8042/serio1/serio2//sys/devices/platform/i8042/serio1/serio3/ 路径,而仅具有 TrackPoint 设备的系统将使用 /sys/devices/platform/i8042/serio1/ 路径。

启动时配置

udev 规则

此规则在启动时增加 Trackpoint 的速度并启用点击选择(见上文)。

/etc/udev/rules.d/10-trackpoint.rules
ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/sensitivity}="240", ATTR{device/press_to_select}="1"

systemd.path 单元

论坛上有 报告 指出 /sys/devices/platform/i8042/serio1/serio2/ 下的属性/文件在启动过程中出现得太晚,以至于上述(或类似的)udev 规则对它们不起作用。相反,可以使用 systemd.path 单元来配置 TrackPoint 的属性。

首先创建一个可执行脚本,例如名为 /usr/local/bin/trackpoint_configuration.sh,它按照 #Sysfs 属性 部分所示设置 TrackPoint 属性。

以下示例禁用了某些笔记本电脑上的 Trackpoint,但保留了 Trackpoint 的左右按钮(触摸板上方的按钮)正常工作(但是,如果直接从 UEFI/BIOS 设置中禁用 TrackPoint,则 Trackpoint 的左右按钮必然会被禁用)。

/usr/local/bin/trackpoint_configuration.sh
#!/bin/bash
echo -n 0 > /sys/devices/platform/i8042/serio1/serio2/sensitivity
echo -n 0 > /sys/devices/platform/i8042/serio1/serio2/speed

之后,创建以下 systemd 单元。确保由脚本修改的所有属性都使用 PathExists 列出。

/etc/systemd/system/trackpoint_parameters.path
[Unit]
Description=Watch for, and modify, Trackpoint attributes

[Path]
PathExists=/sys/devices/platform/i8042/serio1/press_to_select

[Install]
WantedBy=default.target
/etc/systemd/system/trackpoint_parameters.service
[Unit]
Description=Set TrackPoint attributes

[Service]
ExecStart=/usr/local/bin/trackpoint_configuration.sh

最后,启用启动 trackpoint_parameters.path systemd 单元。

udev hwdb 条目

本文或章节已过时。

原因: 自大约 1.12 版本 以来,libinput 停止使用 udev hwdb 进行设备特定的覆盖,并转移到独立于 hwdb 的 ini 样式文件(参见 #device-quirks)。(在 Talk:TrackPoint 中讨论)

Libinput 根据 udev 硬件数据库 中的条目将其自己的参数应用于 sysfs。这是运行 Wayland 合成器的系统上的行为,因为 libinput 是该环境中唯一受支持的输入接口。在 Wayland 合成器或 X 会话启动之前所做的更改将被覆盖。

要覆盖 libinput 的默认设置,请添加本地 hwdb 条目

/etc/udev/hwdb.d/99-trackpoint.hwdb
evdev:name:TPPS/2 IBM TrackPoint:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*:pvrThinkPad??60?:*
  POINTINGSTICK_SENSITIVITY=250

您可以在 udev 硬件数据库 中找到各种供应商/型号键。请注意,自从 此提交 以来,libinput 忽略了 POINTINGSTICK_CONST_ACCEL 参数,而使用 POINTINGSTICK_SENSITIVITY。范围是 0-255。

更新硬件数据库索引,然后在重新启动合成器或 X 会话之前测试更改,首先使用以下命令找到您的设备输入节点 /dev/input/eventX

# libinput list-devices

运行以下命令生成一些调试输出

# udevadm trigger /sys/class/input/eventX
# udevadm test /sys/class/input/eventX
注意: 这实际上不会应用来自 hwdb 的参数,但您可以在 udevadm test 命令的输出中验证更改。

最后,重新启动您的 Wayland 合成器或 X 会话以应用更改。

device-quirks

通过 libinput 切换到新的 device-quirks .ini 样式配置文件,您可以通过 /etc/libinput/ 中的本地覆盖调整 trackpoint 参数。

例如,要覆盖指向速度,请创建以下文件

/etc/libinput/local-overrides.quirks
[Trackpoint Override]
MatchUdevType=pointingstick
AttrTrackpointMultiplier=0.75

有关更多信息,请参阅 libinput:安装临时的本地设备 quirks

注意: 型号 quirks 是内部 API,可能随时更改。不保证向后兼容性。本地覆盖应仅在发行版更新 libinput 软件包之前使用。

故障排除

Trackpoint 未被检测到或在 X 分钟后被检测到

这似乎是一个内核错误。[1]

一种解决方法是将 proto=bare 作为 内核模块参数 传递给 psmouse 模块。但是,这会禁用使用点击板和双指中键的滚动。

psmouse proto=bare

对于某些带有 Elantech 触摸板的 ThinkPad 型号,Trackpoint 和相应的硬件按钮无法被识别。上述命令确实有效,但会禁用触摸板上的双指滚动。为了保持双指交互的可能性,请使用以下内核模块参数

psmouse elantech_smbus=0

Trackpoint 按钮并非总是有效

如果您发现禁用 BIOS 中的触摸板会禁用错误的按钮和/或 Trackpoint 按钮非常不可靠,一种解决方法是将 proto=imps 作为 内核模块参数 传递给 psmouse 模块。

双指滚动在休眠后停止工作

在某些笔记本电脑上,psmouse 似乎在启动时或休眠后失败

psmouse serio1: synaptics: Unable to initialize device

一种解决方法是将 synaptics_intertouch=0 添加到 psmouse 作为 内核模块参数

Trackpoint 自行移动

在某些 ThinkPad 上,TrackPoint 光标在释放后自发移动并且不会停止。这是由于 drift_time 参数的值较低(例如 5)造成的,您需要将其更改为 2530 以解决此问题。这可以使用 udev 规则完成

/etc/udev/rules.d/10-trackpoint.rules
ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/drift_time}="25"

如果此方法无法解决您的问题,请将 psmouse 协议更改为 bare(即,将 psmouse.proto=bare 添加到您的 内核参数)。这样,Trackpoint 将被识别为“PS/2 通用鼠标”,而不是使用专用的内核驱动程序。

如果您不需要光标,您可以使用 libinput quirks 覆盖来禁用光标事件。按钮事件将继续工作。

/etc/libinput/local-overrides.quirks
[Trackpoint Buttons Only]
MatchName=*TPPS/2 IBM TrackPoint
AttrEventCode=-REL_X;-REL_Y

滚动时触发中键粘贴

默认情况下,单击鼠标中键会从 PRIMARY 选择 粘贴,这在使用鼠标中键与 TrackPoint 滚动时很不方便。请参阅 Clipboard#禁用中键粘贴 以禁用此行为。

参见