Difference between revisions of "TrackPoint"

From ArchWiki
Jump to navigation Jump to search
m (→‎udev hwdb entry: remove utm_* parameters from URL)
(→‎udev hwdb entry: Update for newer libinput versions which use quirks files instead of udev hwdb)
Line 101: Line 101:
  
 
==== udev hwdb entry ====
 
==== udev hwdb entry ====
 +
{{Warning|1=Since around [https://who-t.blogspot.com/2018/06/libinput-and-its-device-quirks-files.html version 1.12] libinput stopped using udev hwdb for device-specific overrides and moved to ini-style files independent of hwdb(see below). This section is kept for reference.}}
 +
 
Libinput applies its own parameters to sysfs based on entries in the [https://github.com/systemd/systemd/blob/master/hwdb/70-pointingstick.hwdb udev hardware database]. This is the behavior on systems running a Wayland compositor, as libinput is the only supported input interface in that environment. Changes made prior to the start of a Wayland compositor or X session will be overwritten.
 
Libinput applies its own parameters to sysfs based on entries in the [https://github.com/systemd/systemd/blob/master/hwdb/70-pointingstick.hwdb udev hardware database]. This is the behavior on systems running a Wayland compositor, as libinput is the only supported input interface in that environment. Changes made prior to the start of a Wayland compositor or X session will be overwritten.
  
Line 129: Line 131:
 
Finally, restart your Wayland compositor or X session to apply the changes.
 
Finally, restart your Wayland compositor or X session to apply the changes.
  
{{Note|1=It is planned that [https://who-t.blogspot.com/2018/06/libinput-and-its-device-quirks-files.html libinput 1.12] will stop using udev hwdb for device-specific overrides and move to ini-style files independent of hwdb.}}
+
==== device-quirks ====
 +
 
 +
With the {{ic|libinput}} switch to the new device-quirks {{ic|.ini}}-style configuration files, you can adjust trackpoint parameters via local overrides in {{ic|/etc/libinput/}}.
 +
 
 +
For example, to override the pointing speed, create {{ic|/etc/libinput/local-overrides.quirks}}:
 +
[Trackpoint Override]
 +
MatchUdevType=pointingstick
 +
AttrTrackpointMultiplier=0.75
 +
 
 +
For more information, see [https://wayland.freedesktop.org/libinput/doc/latest/device-quirks.html#installing-temporary-local-device-quirks libinput: Installing temporary local device quirks]
 +
 
 +
{{Warning|Model quirks are internal API and may change at any time. No backwards-compatibility is guaranteed. Local overrides should only be used until the distribution updates the libinput packages.}}
  
 
== Troubleshooting ==
 
== Troubleshooting ==

Revision as of 22:03, 12 March 2019

The TrackPoint is Lenovo's trademark for the pointing-stick in the middle of the keyboard. It is supported by xf86-input-evdev and xf86-input-libinput.

Default Xorg behavior supports click and point. For the evdev driver middle-click and scrolling requires extra configuration.

GUI configuration

Install the gpointing-device-settingsAUR package.

Note: This software is not maintained anymore (last release in 2013). It may not allow deep configuration when xf86-input-libinput is used.

Middle button scroll

When using xf86-input-libinput, middle-button scrolling is enabled by default.

When using xf86-input-evdev, middle-button scrolling is supported via xinput from the xorg-xinput package. For example:

~/.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
Note:
  • Devices names can be listed with xinput --list or hwinfo.
  • The "Device Accel Constant Deceleration" line configures the sensitivity of the trackpoint.

Xorg configuration

Alternative to an ~/.xinitrc configuration, you can also create an Xorg#Configuration for the evdev(4)driver. For example, as /etc/X11/xorg.conf.d/20-thinkpad.conf, replacing TPPS/2 IBM TrackPoint with the device name from 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

Two-button trackpoints

On two-button trackpoints, using xf86-input-libinput, the scroll button can be set to right-click button without removing functionality.

Replacing device with the device name from xinput:

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

Sysfs attributes

TrackPoints expose their attributes as files in /sys/devices/platform/i8042/serio1/. For example, to manually enable the tap-to-click functionality:

# echo -n 1 > /sys/devices/platform/i8042/serio1/press_to_select
Note: The location of the attribute files may be different depending on the device you are using. Systems with both a TrackPoint and a touchpad device will use either /sys/devices/platform/i8042/serio1/serio2/ or /sys/devices/platform/i8042/serio1/serio3/ for the path, whereas systems with only a TrackPoint device will use the /sys/devices/platform/i8042/serio1/ path.

Configuration at boot

udev rule

This rule increases the trackpoint speed and enables tap to select (see above) on boot.

/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 unit

There have been reports on the forums that the attributes/files under /sys/devices/platform/i8042/serio1/serio2/ appear too late in the boot process for the above (or similar) udev rule(s) to have an effect on them. Instead, a systemd.path unit can be used to configure attributes of the TrackPoint.

First create an executable script named e.g. /usr/local/bin/trackpoint_configuration.sh that sets the TrackPoint attributes as shown in the #Sysfs attributes section. Then create the following systemd units. Make sure that all attributes modified by the script are listed with 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

Finally, enable and start the trackpoint_parameters.path systemd unit.

udev hwdb entry

Warning: Since around version 1.12 libinput stopped using udev hwdb for device-specific overrides and moved to ini-style files independent of hwdb(see below). This section is kept for reference.

Libinput applies its own parameters to sysfs based on entries in the udev hardware database. This is the behavior on systems running a Wayland compositor, as libinput is the only supported input interface in that environment. Changes made prior to the start of a Wayland compositor or X session will be overwritten.

To override libinput's default settings, add a local hwdb entry:

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

You can find various vendor/model keys in the udev hardware database. Note that since this commit libinput ignores the POINTINGSTICK_CONST_ACCEL parameter and uses POINTINGSTICK_SENSITIVITY. The range is 0-255.

Reload udev's hwdb to apply the changes:

# udevadm hwdb --update

To test the changes prior to restarting your compositor or X session, first find your device input node /dev/input/eventX using:

# libinput-list-devices

Run the following to generate some debug output:

# udevadm trigger /sys/class/input/eventX
# udevadm test /sys/class/input/eventX
Note: This will not actually apply the parameters from hwdb, but you can verify the changes in the output of the udevadm test command.

Finally, restart your Wayland compositor or X session to apply the changes.

device-quirks

With the libinput switch to the new device-quirks .ini-style configuration files, you can adjust trackpoint parameters via local overrides in /etc/libinput/.

For example, to override the pointing speed, create /etc/libinput/local-overrides.quirks:

[Trackpoint Override]
MatchUdevType=pointingstick
AttrTrackpointMultiplier=0.75

For more information, see libinput: Installing temporary local device quirks

Warning: Model quirks are internal API and may change at any time. No backwards-compatibility is guaranteed. Local overrides should only be used until the distribution updates the libinput packages.

Troubleshooting

Trackpoint is not detected or is detected after X minutes

This appears to be a kernel bug. See: https://bugzilla.kernel.org/show_bug.cgi?id=33292

A workaround is passing proto=bare to the psmouse module. However, this disables scrolling with the clickpad and the two-finger middle click:

# modprobe psmouse proto=bare

Trackpoint buttons do not always work

If you discover that disabling the touchpad in the BIOS disables the wrong buttons and/or that the trackpoint buttons work very unreliable a workaround is to pass proto=imps to the psmouse module.

# rmmode psmouse; modprobe psmouse proto=imps

See also