The clickpad device or driver on my thinkpad x250 omits position updates on slow movements, leading to jumps, imprecise motion, temporally stuck cursor. This is especially infuriating for precision cursor adjustments.
Symptoms:
- When moving the finger too slowly, cursor stops moving and resumes after enough distance travelled, resulting in a jump.
- This is a threshold-, not a resolution problem. Movement is smooth above threshold.
- While it works, evtest shows events for ABS_MT_POSITION_X, ABS_MT_POSITION_Y, ABS_X, ABS_Y, ABS_PRESSURE, ABS_MT_PRESSURE.
- While stuck, the device keeps sending updates but only ABS_PRESSURE and ABS_MT_PRESSURE.
The amount of jumpiness depends on driver settings. Proposed solution change driver settings to reduce jumps from this erratic behaviour by vastly reducing the useable resolution and acceleration profiles. This does not address the threshold but reduces the jump symptom.
Andrew.punnett links such a bug report. Example videos from that bug report: https://www.youtube.com/watch?v=oTgaf8tTNEc, https://i.stack.imgur.com/qgM0U.jpg
System: Ubuntu 16.04, currently on 4.4.0-92-generic x86_64. xinput lists the device as "SynPS/2 Synaptics TouchPad". I have observed the behaviour on two X250s and on T-??? thinkpad.
My driver configuration is adjusted via synclient and xinput. I found no parameter to change this behaviour. See output of synclient, xinput below:
~$ synclient
Parameter settings:
LeftEdge = 1545
RightEdge = 5399
TopEdge = 1333
BottomEdge = 4521
FingerLow = 25
FingerHigh = 30
MaxTapTime = 180
MaxTapMove = 255
MaxDoubleTapTime = 100
SingleTapTimeout = 180
ClickTime = 100
EmulateMidButtonTime = 0
EmulateTwoFingerMinZ = 282
EmulateTwoFingerMinW = 7
VertScrollDelta = 116
HorizScrollDelta = 116
VertEdgeScroll = 0
HorizEdgeScroll = 0
CornerCoasting = 0
VertTwoFingerScroll = 1
HorizTwoFingerScroll = 1
MinSpeed = 1
MaxSpeed = 1
AccelFactor = 0.0343997
TouchpadOff = 0
LockedDrags = 0
LockedDragTimeout = 5000
RTCornerButton = 2
RBCornerButton = 3
LTCornerButton = 0
LBCornerButton = 0
TapButton1 = 1
TapButton2 = 3
TapButton3 = 2
ClickFinger1 = 1
ClickFinger2 = 3
ClickFinger3 = 2
CircularScrolling = 1
CircScrollDelta = 0.1
CircScrollTrigger = 0
CircularPad = 0
PalmDetect = 0
PalmMinWidth = 10
PalmMinZ = 200
CoastingSpeed = 20
CoastingFriction = 50
PressureMotionMinZ = 30
PressureMotionMaxZ = 160
PressureMotionMinFactor = 1
PressureMotionMaxFactor = 1
ResolutionDetect = 1
GrabEventDevice = 0
TapAndDragGesture = 1
AreaLeftEdge = 2000
AreaRightEdge = 5000
AreaTopEdge = 0
AreaBottomEdge = 0
HorizHysteresis = 0
VertHysteresis = 0
ClickPad = 1
RightButtonAreaLeft = 3472
RightButtonAreaRight = 0
RightButtonAreaTop = 4112
RightButtonAreaBottom = 0
MiddleButtonAreaLeft = 0
MiddleButtonAreaRight = 0
MiddleButtonAreaTop = 0
MiddleButtonAreaBottom = 0
~$ xinput list-props "SynPS/2 Synaptics TouchPad"
Device 'SynPS/2 Synaptics TouchPad':
Device Enabled (139): 1
Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (270): 1
Device Accel Constant Deceleration (271): 1.000000
Device Accel Adaptive Deceleration (272): 1.000000
Device Accel Velocity Scaling (273): 1.000000
Synaptics Edges (295): 1545, 5399, 1333, 4521
Synaptics Finger (296): 25, 30, 0
Synaptics Tap Time (297): 180
Synaptics Tap Move (298): 255
Synaptics Tap Durations (299): 180, 100, 100
Synaptics ClickPad (300): 1
Synaptics Middle Button Timeout (301): 0
Synaptics Two-Finger Pressure (302): 282
Synaptics Two-Finger Width (303): 7
Synaptics Scrolling Distance (304): 116, 116
Synaptics Edge Scrolling (305): 0, 0, 0
Synaptics Two-Finger Scrolling (306): 1, 1
Synaptics Move Speed (307): 1.000000, 1.000000, 0.034400, 0.000000
Synaptics Off (308): 0
Synaptics Locked Drags (309): 0
Synaptics Locked Drags Timeout (310): 5000
Synaptics Tap Action (311): 2, 3, 0, 0, 1, 3, 2
Synaptics Click Action (312): 1, 3, 2
Synaptics Circular Scrolling (313): 1
Synaptics Circular Scrolling Distance (314): 0.100000
Synaptics Circular Scrolling Trigger (315): 0
Synaptics Circular Pad (316): 0
Synaptics Palm Detection (317): 0
Synaptics Palm Dimensions (318): 10, 200
Synaptics Coasting Speed (319): 20.000000, 50.000000
Synaptics Pressure Motion (320): 30, 160
Synaptics Pressure Motion Factor (321): 1.000000, 1.000000
Synaptics Resolution Detect (322): 1
Synaptics Grab Event Device (323): 0
Synaptics Gestures (324): 1
Synaptics Capabilities (325): 1, 0, 0, 1, 1, 1, 1
Synaptics Pad Resolution (326): 73, 53
Synaptics Area (327): 2000, 5000, 0, 0
Synaptics Soft Button Areas (328): 3472, 0, 4112, 0, 0, 0, 0, 0
Synaptics Noise Cancellation (329): 0, 0
Device Product ID (260): 2, 7
Device Node (261): "/dev/input/event5"