Bug 92931

Summary: Trackpoint recalibration blocks touchpad
Product: Wayland Reporter: Janis Goldschmidt <janis.beckert>
Component: libinputAssignee: Wayland bug list <wayland-bugs>
Status: RESOLVED INVALID QA Contact:
Severity: major    
Priority: medium CC: janis.beckert, peter.hutterer
Version: unspecified   
Hardware: Other   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: evemu-record output showing vigorous movement of trackpoint and resulting recalibration

Description Janis Goldschmidt 2015-11-12 23:44:44 UTC
Created attachment 119612 [details]
evemu-record output showing vigorous movement of trackpoint and resulting recalibration

Using libinput 1.1.0 with xf86-input-libinput 0.15.0 on Archlinux Kernel 4.2.5 on a Thinkpad W550s, I notice that when vigorously using the trackpoint and then changing to the touchpad immediately after, sometimes the touchpad is blocked. Neither moving the cursor nor multifinger gestures like scrolling works.

I believe this is due to the trackpoint being recalibrated. When using the trackpoint, you often notice that it keeps moving slightly even after you have stopped pushing it. After a while the firmware detects that there is no longer actively manipulated and recalibrates its position to the inert one.

In the evemu report I have attached you can notice that from about 6.74 onwards there is barely any change. If I replay it, I see a barely moving cursor, which is exactly after I have stopped pushing the trackpoint and am waiting until the cursor stops moving. Only once this happens is the touchpad usable again.


Any way of fixing this? Below you will find, in this order:

+ the contents of /sys/class/dmi/id/modalias
+ the output of $ xinput list-props "SynPS/2 Synaptics TouchPad"
+ the output of $ xinput list-props "TPPS/2 IBM TrackPoint"
+ the output of $ sudo evemu-record (as an attachment)


dmi:bvnLENOVO:bvrN11ET29W(1.05):bd12/26/2014:svnLENOVO:pn20E1S00N00:pvrThinkPadT550:rvnLENOVO:rn20E1S00N00:rvrNODPK:cvnLENOVO:ct10:cvrNone:


Device 'SynPS/2 Synaptics TouchPad':
	Device Enabled (138):	1
	Coordinate Transformation Matrix (140):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Tapping Enabled (274):	0
	libinput Tapping Enabled Default (275):	0
	libinput Tapping Drag Lock Enabled (276):	0
	libinput Tapping Drag Lock Enabled Default (277):	0
	libinput Accel Speed (278):	0.000000
	libinput Accel Speed Default (279):	0.000000
	libinput Natural Scrolling Enabled (280):	0
	libinput Natural Scrolling Enabled Default (281):	0
	libinput Send Events Modes Available (258):	1, 1
	libinput Send Events Mode Enabled (259):	0, 0
	libinput Send Events Mode Enabled Default (260):	0, 0
	libinput Left Handed Enabled (282):	0
	libinput Left Handed Enabled Default (283):	0
	libinput Scroll Methods Available (284):	1, 1, 0
	libinput Scroll Method Enabled (285):	1, 0, 0
	libinput Scroll Method Enabled Default (286):	1, 0, 0
	libinput Click Methods Available (287):	1, 1
	libinput Click Method Enabled (288):	1, 0
	libinput Click Method Enabled Default (289):	1, 0
	libinput Disable While Typing Enabled (290):	1
	libinput Disable While Typing Enabled Default (291):	1
	Device Node (261):	"/dev/input/event7"
	Device Product ID (262):	2, 7
	libinput Drag Lock Buttons (292):	<no items>
	libinput Horizonal Scroll Enabled (263):	1


Device 'TPPS/2 IBM TrackPoint':
	Device Enabled (138):	1
	Coordinate Transformation Matrix (140):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Accel Speed (278):	0.000000
	libinput Accel Speed Default (279):	0.000000
	libinput Accel Profiles Available (293):	1, 1
	libinput Accel Profile Enabled (294):	1, 0
	libinput Accel Profile Enabled Default (295):	1, 0
	libinput Natural Scrolling Enabled (280):	0
	libinput Natural Scrolling Enabled Default (281):	0
	libinput Send Events Modes Available (258):	1, 0
	libinput Send Events Mode Enabled (259):	0, 0
	libinput Send Events Mode Enabled Default (260):	0, 0
	libinput Left Handed Enabled (282):	0
	libinput Left Handed Enabled Default (283):	0
	libinput Scroll Methods Available (284):	0, 0, 1
	libinput Scroll Method Enabled (285):	0, 0, 1
	libinput Scroll Method Enabled Default (286):	0, 0, 1
	libinput Button Scrolling Button (296):	2
	libinput Button Scrolling Button Default (297):	274
	libinput Middle Emulation Enabled (298):	0
	libinput Middle Emulation Enabled Default (299):	0
	Device Node (261):	"/dev/input/event17"
	Device Product ID (262):	2, 10
	libinput Drag Lock Buttons (292):	<no items>
	libinput Horizonal Scroll Enabled (263):	1
Comment 1 Peter Hutterer 2015-11-16 03:32:03 UTC
I think you're seeing the results of this:
http://wayland.freedesktop.org/libinput/doc/latest/palm_detection.html#trackpoint-disabling

does that sound about right? If so, that's a feature and the behaviour is intentional. In some cases like yours it can be a problem but there is a large number of cases where without palm detection we'd see erratic pointer movement during trackpoint usage. We also found that generally users don't tend to switch much between the two devices, so having a bias towards using either device hasn't been much of a problem.
Comment 2 Janis Goldschmidt 2015-11-18 11:13:13 UTC
Yeah, this reads like it is causing it - I was aware of this behaviour and do, in general, appreciate it. :-) I think we should absolutely keep it! But maybe one could introduce:

+ either a threshold value for the trackpoint movement below which the touchpad is not disabled;
+ or disable the touchpad for cursor movement only, but not for multi-finger gestures?

(Note: sometimes the trackpoint has very large momentum, noticably moving over the screen by itself. This happens quite rarely and recalibration happens rather quickly in this case. Much more frequent are micromovements which tend to be fixed slower by the firmware.)

My usecase is the following: I mainly use the trackpoint to move the cursor, but at times I use two-finger gestures to scroll on websites or documents with large amounts of text (button 2 + trackpoint requires an unnatural way of holding your hand and is quite exhausting).

The recalibration of the trackpoint movement sometimes takes 20, 30 seconds, during which the touchpad is not usable in any way.
Comment 3 Peter Hutterer 2015-11-18 22:30:50 UTC
(In reply to Janis Goldschmidt from comment #2)
> + either a threshold value for the trackpoint movement below which the
> touchpad is not disabled;

I'm worried that this would make it less reliable and predictable. If the value is really really low that may be interesting to avoid disabling the touchpad caused by accidental bumps of the trackpoint. But the flipside of this is that it would require more movement to disable it when intentionally using the trackpoint, so a user resting the palm on the touchpad may see fake touches if they haven't moved sufficiently.
besides, this wouldn't help much with your current issue, because you use the trackpoint "vigorously", which surely is above any threshold, right? :)

> + or disable the touchpad for cursor movement only, but not for multi-finger
> gestures?

A palm touch can in some cases look like two-finger scrolling. Though with newer touchpads that shouldn't be much of a problem so this may be an interesting approach. I don't have time to work on this right now though, but feel free to have a go at it.

I guess a simpler solution would be to reduce the timeout, but 300ms seems quite short already.
 
> (Note: sometimes the trackpoint has very large momentum, noticably moving
> over the screen by itself. This happens quite rarely and recalibration
> happens rather quickly in this case. Much more frequent are micromovements
> which tend to be fixed slower by the firmware.)

Just to confirm, you're still getting events out of the trackpoint when this recalibration happens, right?
Comment 4 Peter Hutterer 2016-12-21 03:23:10 UTC
needinfo for a year, closing. Please re-open when the required information has been provided.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.