Configuring Trackpoint and Touchpad for Linux on a Thinkpad T550

Here is information for configuring the Trackpoint and Touchpad of a Thinkpad T550 in Linux.

List of input devices:

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Synaptics TM3053-003                      id=12   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ Integrated Camera: Integrated C           id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=11   [slave  keyboard (3)]

Default properties for the Touchpad:

$ xinput list-props 12
Device 'Synaptics TM3053-003':
        Device Enabled (153):   1
        Coordinate Transformation Matrix (155): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (285):     1
        Device Accel Constant Deceleration (286):       2.500000
        Device Accel Adaptive Deceleration (287):       1.000000
        Device Accel Velocity Scaling (288):    12.500000
        Synaptics Edges (289):  77, 1863, 57, 1005
        Synaptics Finger (290): 25, 30, 0
        Synaptics Tap Time (291):       180
        Synaptics Tap Move (292):       96
        Synaptics Tap Durations (293):  180, 180, 100
        Synaptics ClickPad (294):       1
        Synaptics Middle Button Timeout (295):  0
        Synaptics Two-Finger Pressure (296):    350
        Synaptics Two-Finger Width (297):       8
        Synaptics Scrolling Distance (298):     44, 44
        Synaptics Edge Scrolling (299): 0, 0, 0
        Synaptics Two-Finger Scrolling (300):   1, 0
        Synaptics Move Speed (301):     1.000000, 1.750000, 0.090457, 0.000000
        Synaptics Off (302):    2
        Synaptics Locked Drags (303):   0
        Synaptics Locked Drags Timeout (304):   5000
        Synaptics Tap Action (305):     0, 0, 0, 0, 0, 0, 0
        Synaptics Click Action (306):   1, 3, 2
        Synaptics Circular Scrolling (307):     0
        Synaptics Circular Scrolling Distance (308):    0.100007
        Synaptics Circular Scrolling Trigger (309):     0
        Synaptics Circular Pad (310):   0
        Synaptics Palm Detection (311): 1
        Synaptics Palm Dimensions (312):        3, 50
        Synaptics Coasting Speed (313): 20.000000, 50.000000
        Synaptics Pressure Motion (314):        30, 160
        Synaptics Pressure Motion Factor (315): 1.000000, 1.000000
        Synaptics Grab Event Device (316):      0
        Synaptics Gestures (317):       1
        Synaptics Capabilities (318):   1, 0, 0, 1, 1, 1, 0
        Synaptics Pad Resolution (319): 20, 20
        Synaptics Area (320):   0, 0, 0, 0
        Synaptics Soft Button Areas (321):      970, 0, 870, 0, 0, 0, 0, 0
        Synaptics Noise Cancellation (322):     11, 11
        Device Product ID (277):        1739, 0
        Device Node (276):      "/dev/input/event4"

My customization script. Note that the option to disable the Touchpad is current set.

$ cat /usr/local/bin/input_setup.sh 

#!/bin/bash -e

# Uncomment to disable this script
# exit 0

# TOUCHPAD SECTION
# see man synaptics(4) for touchpad

# Enable Touchpad
# boolean
xinput set-prop 12 153 0

# Touchpad finger
# 32 bit, 3 values, low, high, press 
# Low - When  finger  pressure  drops  below  this value, the driver
#      counts it as a release. Property: "Synaptics Finger"
# High - When finger pressure  goes  above  this  value,  the  driver
#              counts it as a touch. Property: "Synaptics Finger"
xinput set-prop 12 290 54 54 0

# Tap Move
# Synaptics Tap Move (292)
# Maximum movement of the finger for detecting a tap
xinput set-prop 12 292 122

# Increase two-finger pressure (less sensitivity)
xinput set-prop 12 296 350

# Two-finger width
# Synaptics Two-Finger Width (297)
# For  touchpads not capable of detecting multiple fingers but are capable
#  of detecting finger  width  and  pressure
# Width threshhold
# Works best with PalmDetect off
xinput set-prop 12 297 8

# Scrolling speed
# Synaptics Scrolling Distance (298)
# Vertical/horiz move  distance of finger for scroll event
xinput set-prop 12 298 -60 -60

# Mouse Click Emulation
# Synaptics Tap Action (305)
xinput set-prop 12 305 0 0 0 0 1 3 2

# Circular Scrolling
# Synaptics Circular Scrolling (307)
# boolean
xinput set-prop 12 307 1

# Circular scrolling distance (speed?)
# Synaptics Circular Scrolling Distance (308)
# Move  angle  (radians) of finger to generate a scroll event
xinput set-prop 12 308 0.100007

# Palm rejection
# Synaptics Palm Detection (311)
# See Two-finger width below
# If palm detection should be enabled
# boolean
xinput set-prop 12 311 1

# Touchpad palm rejection
# PalmMinWidth - Minimum finger width at which touch is  considered  a  palm
# PalmMinZ - Minimum finger pressure at which touch is considered a palm
# width, min z
xinput set-prop 12 312 3 50

# Minimum pressure motion
# Synaptics Pressure Motion (314)
# Finger pressure at which min/max pressure motion factor is applied
# min, max
xinput set-prop 12 314 55 160

# Tap-and-Drag
# Synaptics Gestures (317)
# TapAndDragGesture
# boolean
xinput set-prop 12 317 0


# TRACKPOINT SECTION
# see man libinput(4) for Trackpoint

# Trackpoint middle-button disable scrolling
xinput set-prop 13 330 0 0 0

# Acceleration
# libinput Accel Speed (336)
# float, range -1 - 1
xinput set-prop 13 336 -0.250000

# Acceleration profile
# libinput Accel Profile Enabled (339)
# flat, adaptive
xinput set-prop 13 339 1 0

# Trackpoint sensitivity
echo -n 230 |sudo tee /sys/bus/serio/devices/serio2/sensitivity

Getting the Touchpad to behave properly is especially tricky. It is very difficult to avoid triggering spurious tap and scroll events when typing on the keyboard or using the Trackpoint. These settings are the best I’ve come up with so far.

One other note about circular scrolling: With the Synaptics driver for Windows 10 circular scrolling works very nicely. You can initiate a circular scroll from the edge and then move the finger in a small circle adjacent to the edge for scrolling to work.

However if you do that with this Linux driver the scroll direction will oscillate between up and down directions. To perform a circular scroll with this driver you have to create a circle about 1.5 inches or more wide, the center of which is in the middle of the Touchpad. You have to draw your finger around this large center circle in order to scroll.