Touchpad makes mouse go in a "grid-like" pattern, External mouse doesn't

Some information about my issue

I just installed 17.10 on my laptop. the installation process went fine, and additionally I was running a live USB in order to test if everything functioned. One thing I noted myself, was that whilst moving the mouse, the mouse felt like taking steps in every direction - resulting in a laggy movement.

If you have a grid, it feels like the mouse is attaching itself to every cross in the grid, whilst moving. The effect is mostly noticeable in diagonal directions, but can also be noticed elsewhere. Doing smaller movements is challenging, as the mouse bumps.

I tried changing the available settings in the stock settings menu on the system, without any apparent luck. I also tried searching for similar issues, but I am not sure if they describe my problem exactly. For instance, lets have a look at: Jerky mouse movements

My Parameters:

xinput --list-props "SynPS/2 Synaptics TouchPad" gives: 

`simen@Yoga-ubuntu:~$ xinput --list-props "SynPS/2 Synaptics TouchPad"
Device 'SynPS/2 Synaptics TouchPad':
    Device Enabled (171):   1
    Coordinate Transformation Matrix (173): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Tapping Enabled (311): 1
    libinput Tapping Enabled Default (312): 0
    libinput Tapping Drag Enabled (313):    1
    libinput Tapping Drag Enabled Default (314):    1
    libinput Tapping Drag Lock Enabled (315):   0
    libinput Tapping Drag Lock Enabled Default (316):   0
    libinput Tapping Button Mapping Enabled (317):  1, 0
    libinput Tapping Button Mapping Default (318):  1, 0
    libinput Accel Speed (319): -0.244604
    libinput Accel Speed Default (320): 0.000000
    libinput Natural Scrolling Enabled (321):   1
    libinput Natural Scrolling Enabled Default (322):   0
    libinput Send Events Modes Available (292): 1, 1
    libinput Send Events Mode Enabled (293):    0, 0
    libinput Send Events Mode Enabled Default (294):    0, 0
    libinput Left Handed Enabled (323): 0
    libinput Left Handed Enabled Default (324): 0
    libinput Scroll Methods Available (325):    1, 1, 0
    libinput Scroll Method Enabled (326):   1, 0, 0
    libinput Scroll Method Enabled Default (327):   1, 0, 0
    libinput Click Methods Available (328): 1, 1
    libinput Click Method Enabled (329):    1, 0
    libinput Click Method Enabled Default (330):    1, 0
    libinput Middle Emulation Enabled (331):    0
    libinput Middle Emulation Enabled Default (332):    0
    libinput Disable While Typing Enabled (333):    1
    libinput Disable While Typing Enabled Default (334):    1
    Device Node (295):  "/dev/input/event6"
    Device Product ID (296):    2, 7
    libinput Drag Lock Buttons (335):   <no items>
    libinput Horizontal Scroll Enabled (336):   1

I've tried changing a few values here, but had no luck as of yet getting rid of the "grid movement" of my track-pad.

Connecting an external mouse to the laptop seem to come around the issue, but I am still not satisfied with the performance of the track-pad. Moving the pointr with my track-pad is not going well.

If there is any other information that would be handy to have, just let me know and I'll provide it. It's an annoying issue as I can't use my external mouse at all times.


Solution 1:

I have experienced similar issue with my Lenovo X240, and judging by the system name 'Yoga', a very similar solution might apply. I seemed to be able to minimize the effects to an acceptable level, although they seem not to be completely gone.

As it occurred both on Wayland and Xorg and the Elder Geek's fix did not help, I digged deeper.

Based on: https://unix.stackexchange.com/questions/199044/diagonal-touchpad-movement-results-in-wobbly-line and in turn:https://bugzilla.redhat.com/show_bug.cgi?id=1264453 - comments 10 and 13.

Open /lib/udev/hwdb.d/90-libinput-model-quirks.hwdb in your favorite text editor, and check the LENOVO segment, as it will contain hints for a possible solution too.

This is what I did:

1) Identify hardware DMI and input location using evemu-describe [part of packageevemu-tools; [sudo apt install evemu-tools]

~$ sudo evemu-describe
Available devices:
/dev/input/event0:      Lid Switch
...
/dev/input/event4:      Video Bus
/dev/input/event5:      SynPS/2 Synaptics TouchPad
/dev/input/event6:      TPPS/2 IBM TrackPoint
...
/dev/input/event20:     HDA Intel HDMI HDMI/DP,pcm=10
Select the device event number [0-20]:

So in my case, the touchpad is registered on /dev/input/event5 [5]. Find the DMI line, right at the start of the output and save it for later:

# DMI: dmi:bvnLENOVO:bvrGIET90WW(2.40):bd09/14/2017:svnLENOVO:pn20AMS2QD0C:pvrThinkPadX240:rvnLENOVO:rn20AMS2QD0C:rvr0B98401PRO:cvnLENOVO:ct10:cvrNotAvailable:
# Input device name: "SynPS/2 Synaptics TouchPad"

2) Going on a leap, guesstimating that your touchpad behaves similarly to a t450, we will now add a new file for our hwdb in /etc/hwdb/ using sudo nano /etc/hwdb/90-lenovo-touchpad-quirk.hwdb

In the file put something similar like this. Modify the DMI matching, I pasted it in there for future reference:

#Lenovo touchpad smoothing fix/workaround. 
#evemu-describe DMI output for the touchpad:
# DMI: dmi:bvnLENOVO:bvrGIET90WW(2.40):bd09/14/2017:svnLENOVO:pn20AMS2QD0C:pvrThinkPadX240:rvnLENOVO:rn20AMS2QD0C:rvr0B98401PRO:cvnLENOVO:ct10:cvrNotAvailable:

#Modify the following line, namely the pvrThinkPadX240 bit, to match your DMI output. 
libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*:pvrThinkPadX240*
 LIBINPUT_MODEL_LENOVO_T450_TOUCHPAD=1

Save the file (in Nano ctrl-X to exit, confirm with Y to save, VI has !wq)

3) Now rebuild the hardwaredatabase:

sudo udevadm hwdb --update

And 4) test if your new parameters are actually loaded (remember the input number from the first step):

~$ sudo udevadm test /sys/class/input/event5
calling: test
version 234
...
ID_INPUT_TOUCHPAD_INTEGRATION=internal
ID_INPUT_WIDTH_MM=109
LIBINPUT_DEVICE_GROUP=11/2/7/1b1:isa0060/serio1
LIBINPUT_MODEL_LENOVO_T450_TOUCHPAD=1
LIBINPUT_MODEL_SYNAPTICS_SERIAL_TOUCHPAD=1
...

It's there all right! 5) Reboot the system and fingers crossed...

I hope this results in you joining the dark Linux side!

In my case LIBINPUT_MODEL_LENOVO_X230=1 actually worked better, so you can play around -to some extent- with available fixes for Synaptics touchpads.

Solution 2:

The grid-like pattern of touchpad movement is caused by libinput's old rectangular hysteresis algorithm. It was fixed in libinput version 1.10.2 (including in Ubuntu 18.04) by switching to an elliptical (usually circular) approach instead:

https://lists.freedesktop.org/archives/wayland-devel/2018-March/037317.html

Solution 3:

Install this package. either via the command line with sudo apt install xserver-xorg-input-synaptics or with your favorite package manager.

Note that this package can be found in the Universe repository so you'll have to enable it first.

The primary method of configuration for the touchpad is through an Xorg server configuration file. After installation of xserver-xorg-input-synaptics, a default configuration file is located at /usr/share/X11/xorg.conf.d/70-synaptics.conf. You can copy this file to /etc/X11/xorg.conf.d/ and edit it to configure the various driver options available. Refer to the synaptics(4) manual page for a complete list of available options. Machine-specific options can be discovered using synclient.

I recommend starting with the default configuration and making changes one at a time so that if||when you get unexpected results you can easily revert back to the previous setting.

Sources:

https://packages.ubuntu.com/artful/amd64/xserver-xorg-input-synaptics/filelist

ftp://www.x.org/pub/X11R7.5/doc/man/man1/synclient.1.html

ftp://www.x.org/pub/X11R7.5/doc/man/man1/synclient.1.html

https://wiki.archlinux.org/index.php/Touchpad_Synaptics