Bug 98689

Summary: Thinkpad 13 trackpoint is very slow
Product: Wayland Reporter: Alex Corcoles <alex>
Component: libinputAssignee: Wayland bug list <wayland-bugs>
Status: RESOLVED WONTFIX QA Contact:
Severity: normal    
Priority: medium CC: eaon, peter.hutterer
Version: 1.5.0   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: evemu-record pushing trackpoint to top right

Description Alex Corcoles 2016-11-11 21:22:22 UTC
Hi,

My trackpoint is very slow. Cranking it up with the desktop environment's tools is not enough.

Tried poking with:

$ cat /etc/udev/hwdb.d/71-trackpoint.hwdb
mouse:unknown bus type:v0002p000e:name:Elantech PS/2 TrackPoint:
 MOUSE_DPI=1000@500

but no messing manages to change anything.

Help?

Alex
Comment 1 Alex Corcoles 2016-11-11 21:23:28 UTC
Further info:

$ udevadm info /dev/input/event1
P: /devices/platform/i8042/serio1/input/input3/event1
N: input/event1
E: DEVNAME=/dev/input/event1
E: DEVPATH=/devices/platform/i8042/serio1/input/input3/event1
E: ID_BUS=i8042
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_INPUT_POINTINGSTICK=1
E: LIBINPUT_DEVICE_GROUP=11/2/e/0:isa0060/serio1
E: MAJOR=13
E: MINOR=65
E: SUBSYSTEM=input
E: USEC_INITIALIZED=6158959
Comment 2 Peter Hutterer 2016-11-13 21:38:36 UTC
MOUSE_DPI isn't read for trackpoints because they don't have a DPI in the sense mice have. Look at 70-pointingstick.hwdb and the POINTINGSTICK_CONST_ACCEL and POINTINGSTICK_SENSITIVITY properties. If you have an elantech one you may not be able to set the sensitivity, but try settings const accel to something higher.
Comment 3 Alex Corcoles 2016-11-15 21:22:08 UTC
Thank you. However, I must admit I must be an idiot.

I am unable to create the selector for the trackpoint as:

# cat /etc/udev/hwdb.d/71-pointingstick-local.hwdb
evdev:input:*
  POINTINGSTICK_SENSITIVITY=200
  POINTINGSTICK_CONST_ACCEL=100.0

However, if I do:

sudo udevadm hwdb --update ; sudo udevadm trigger /dev/input/event1

I get the following in my logs:

==> daemon.log <==
Nov 15 22:21:10 armitage systemd-udevd[3597]: Failed to write 'sensitivity' attribute for '(null)': No such device or address
Nov 15 22:21:10 armitage systemd-udevd[541]: worker [3597] terminated by signal 11 (Segmentation fault)

==> kern.log <==
Nov 15 22:21:10 armitage upowerd[2269]: treating change event as add on /sys/devices/platform/i8042/serio1/input/input3/event1
Nov 15 22:21:10 armitage kernel: [ 1090.142850] traps: systemd-udevd[3597] general protection ip:7f99ff70322b sp:7ffc66389070 error:0 in libc-2.24.so[7f99ff68c000+195000]

==> messages <==
Nov 15 22:21:10 armitage upowerd[2269]: treating change event as add on /sys/devices/platform/i8042/serio1/input/input3/event1
Nov 15 22:21:10 armitage kernel: [ 1090.142850] traps: systemd-udevd[3597] general protection ip:7f99ff70322b sp:7ffc66389070 error:0 in libc-2.24.so[7f99ff68c000+195000]

==> syslog <==
Nov 15 22:21:10 armitage systemd-udevd[3597]: Failed to write 'sensitivity' attribute for '(null)': No such device or address
Nov 15 22:21:10 armitage upowerd[2269]: treating change event as add on /sys/devices/platform/i8042/serio1/input/input3/event1
Nov 15 22:21:10 armitage systemd-udevd[541]: worker [3597] terminated by signal 11 (Segmentation fault)
Nov 15 22:21:10 armitage kernel: [ 1090.142850] traps: systemd-udevd[3597] general protection ip:7f99ff70322b sp:7ffc66389070 error:0 in libc-2.24.so[7f99ff68c000+195000]

==> Xorg.0.log <==
[  1090.142] (II) config/udev: removing device Elantech PS/2 TrackPoint
[  1090.180] (II) UnloadModule: "libinput"
[  1090.181] (II) config/udev: Adding input device Elantech PS/2 TrackPoint (/dev/input/event1)
[  1090.181] (**) Elantech PS/2 TrackPoint: Applying InputClass "evdev pointer catchall"
[  1090.181] (**) Elantech PS/2 TrackPoint: Applying InputClass "libinput pointer catchall"
[  1090.181] (II) Using input driver 'libinput' for 'Elantech PS/2 TrackPoint'
[  1090.181] (**) Elantech PS/2 TrackPoint: always reports core events
[  1090.181] (**) Option "Device" "/dev/input/event1"
[  1090.181] (**) Option "_source" "server/udev"
[  1090.182] (II) input device 'Elantech PS/2 TrackPoint', /dev/input/event1 is tagged by udev as: Mouse Pointingstick
[  1090.182] (II) Device 'Elantech PS/2 TrackPoint' set to const accel 100.00
[  1090.182] (II) input device 'Elantech PS/2 TrackPoint', /dev/input/event1 is a pointer caps
[  1090.204] (**) Option "config_info" "udev:/sys/devices/platform/i8042/serio1/input/input3/event1"
[  1090.204] (II) XINPUT: Adding extended input device "Elantech PS/2 TrackPoint" (type: MOUSE, id 13)
[  1090.207] (**) Option "AccelerationScheme" "none"
[  1090.209] (**) Elantech PS/2 TrackPoint: (accel) selected scheme none/0
[  1090.209] (**) Elantech PS/2 TrackPoint: (accel) acceleration factor: 2.000
[  1090.209] (**) Elantech PS/2 TrackPoint: (accel) acceleration threshold: 4
[  1090.210] (II) input device 'Elantech PS/2 TrackPoint', /dev/input/event1 is tagged by udev as: Mouse Pointingstick
[  1090.210] (II) Device 'Elantech PS/2 TrackPoint' set to const accel 100.00
[  1090.210] (II) input device 'Elantech PS/2 TrackPoint', /dev/input/event1 is a pointer caps

, which doesn't look good and indeed doesn't do anything.

If there is some reading material on this I'd be happy to read it :(
Comment 4 Peter Hutterer 2016-11-15 23:36:29 UTC
(In reply to Alex Corcoles from comment #3)
> # cat /etc/udev/hwdb.d/71-pointingstick-local.hwdb
> evdev:input:*
>   POINTINGSTICK_SENSITIVITY=200

this one isn't available on all pointing sticks, looks like yours is one of them. The crashes are a systemd issue, would be worth filing a bug for that. Errors are ok, but this shouldn't segfault. 



as for CONST_ACCEL: this is applied by libinput directly and it shows up in the log above 

[  1090.182] (II) Device 'Elantech PS/2 TrackPoint' set to const accel 100.00

however, setting it to 100 may just trigger some unrelated bug, I very much doubt you'd want the pointer to move 100 pixels each time you generate a single 1unit movement from the trackpoint. set it something more tame like 1.5 or 2 and see how you go with that first.
Comment 5 Alex Corcoles 2016-11-17 17:36:48 UTC
Hmmm, tried with:

evdev:input:*
  POINTINGSTICK_CONST_ACCEL=2

1.5, 2... didn't create much change. I also poked a bit with xinput:

$ xinput list-props 11
Device 'Elantech PS/2 TrackPoint':
	Device Enabled (140):	1
	Coordinate Transformation Matrix (142):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Accel Speed (314):	0.000000
	libinput Accel Speed Default (315):	0.000000
	libinput Accel Profiles Available (316):	1, 1
	libinput Accel Profile Enabled (317):	1, 0
	libinput Accel Profile Enabled Default (318):	1, 0
	libinput Natural Scrolling Enabled (319):	0
	libinput Natural Scrolling Enabled Default (320):	0
	libinput Send Events Modes Available (262):	1, 0
	libinput Send Events Mode Enabled (263):	0, 0
	libinput Send Events Mode Enabled Default (264):	0, 0
	libinput Left Handed Enabled (321):	0
	libinput Left Handed Enabled Default (322):	0
	libinput Scroll Methods Available (323):	0, 0, 1
	libinput Scroll Method Enabled (324):	0, 0, 1
	libinput Scroll Method Enabled Default (325):	0, 0, 1
	libinput Button Scrolling Button (326):	2
	libinput Button Scrolling Button Default (327):	274
	libinput Middle Emulation Enabled (328):	0
	libinput Middle Emulation Enabled Default (329):	0
	Device Node (265):	"/dev/input/event1"
	Device Product ID (266):	2, 14
	libinput Drag Lock Buttons (330):	<no items>
	libinput Horizontal Scroll Enabled (267):	1

but...

* 314: only goes between 0..1, no difference
* 315, 316: cannot be changed

However:

$ xinput set-prop 11 142 1 0 0 0 1 0 0 0 0.4

does speed up things for me. It's not great, as it's not very "accelerate-y"... but it helps a bit.
Comment 6 Peter Hutterer 2016-11-20 00:32:28 UTC
you can use the property names directly, not the numbers. that's a lot more portable across reboots. all the "* Default" and "* Available" properties are read-only, so you can't change them.

Changing the coordinate transformation matrix is intended for mainly device rotation, using it for acceleration is not recommended.

Run libinput-debug-events --verbose and see if the "Device '<device name>' set to const acel ..." shows up. If not, then the property isn't recognised correctly which would explain why it isn't working. 

Also, please attach an evemu-record recording of the trackpoint as you try to push the cursor into the top-right corner with "normal pressure". [that's also the biggest issue we face with trackpoint acceleration, who knows what "normal pressure" is...]
Comment 7 Alex Corcoles 2016-11-20 11:03:13 UTC
Thanks,

> you can use the property names directly, not the numbers. that's a lot more portable across reboots. all the "* Default" and "* Available" properties are read-only, so you can't change them.

Ah, good to know.

> Changing the coordinate transformation matrix is intended for mainly device rotation, using it for acceleration is not recommended.

I guessed so- still it's quite workable as a temporary solution

> Run libinput-debug-events --verbose and see if the "Device '<device name>' set to const acel ..." shows up. If not, then the property isn't recognised correctly which would explain why it isn't working. 

It does print out:

Device 'ETPS/2 Elantech TrackPoint' set to const accel 2.00

> Also, please attach an evemu-record recording of the trackpoint as you try to push the cursor into the top-right corner with "normal pressure". [that's also the biggest issue we face with trackpoint acceleration, who knows what "normal pressure" is...]

Got it. Seems to oscillate (1..2, -1..-2).
Comment 8 Alex Corcoles 2016-11-20 11:03:47 UTC
Created attachment 128083 [details]
evemu-record pushing trackpoint to top right
Comment 9 Peter Hutterer 2016-11-21 23:46:37 UTC
ok, that'd explain it then. the one I have here on a T440s easily goes up to 10 with light-medium pressure and up to 20 for when I want to move it fast. we'll probably need some special handling for yours to speed it up. and figure out how to do so to begin with...
Comment 10 Peter Hutterer 2017-05-16 04:03:35 UTC
The good news, trackpoints are getting their own acceleration soon, see bug 91369. The bad news - yours needs a custom accel method which is probably something I won't have time to implement yourself, sorry, too many other fires to deal with. I recommend having a look at the branch I just posted in that bug though, if that gets merged then it would be simple enough to add an acceleration method for yours that uses time-based acceleration (i.e. get faster the longer the stick is held in the same direction).

Also, did you ever try windows on this one? Does that work better?
Comment 11 Peter Hutterer 2017-10-25 01:25:17 UTC
I'm closing this as wontfix, it'd be dishonest to keep it open.

This doesn't mean a fix wouldn't get merged if you started hacking on it, it simply means that no-one but you is likely to implement this in the forseeable future. Sorry
Comment 12 Alex Corcoles 2017-10-25 17:41:25 UTC
Hi,

That's fine, no worries.

For reference and future visitors from Google, what I found acceptable is to follow the advice from:

https://www.reddit.com/r/thinkpad/comments/4jku4c/configuring_trackpoint_on_thinkpad_13/d3asw6g/

, remove xserver-xorg-input-libinput and use something like:

xinput --set-prop "ETPS/2 Elantech TrackPoint" "Device Accel Constant Deceleration" 0.2

Cheers,

Álex

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.