How do I make Synaptics touchpad feel more like on Windows?

In Win10 the touchpad feels good with stock/OEM Synaptic drivers, it's very accurate/slow when I move my finger slowly on the pad and when I move my finger fast the speed of the cursor is much faster / more accelerated and I can cover the whole screen.

On Ubuntu 19.10 I can either the speed to so slow that I can't cover the whole screen or if I make it faster it's so inaccurate that it's hard to press small buttons or do other precise things.

How can I make the touchpad feel more like it does in Windows?


Solution 1:

Kubuntu 18.04 LTS user here. I've had similar problems. I expect what follows will apply to regular Ubuntu also.

Out of the box Ubuntu uses libinput for its touchpad control. libinput only has one setting for the pointer speed: the acceleration setting. The older Synaptics driver has minimum speed, maximum speed and acceleration.

I'm using a Huawei Matebook X Pro and found libinput's default pointer speed on the touchpad to be very slow. I had to increase the acceleration to speed up normal movement but then any quick movement was over-accelerated.

WARNING! This can disable all input: Installing package xserver-xorg-input-synaptics-hwe-18.04 installs the Synaptics driver and it automatically overrides the libinput driver. I have seen a problem where some Ubuntu updates can break libinput so both the touchpad and the keyboard stop working. (Perhaps there's a better way to install or configure the Synaptics that avoids this problem.)

If you install Synaptics this way I strongly recommend you have a way to rollback. I use Timeshift. After a bad update I booted from a Live Linux USB and used Timeshift to rollback, then reboot, uninstall xserver-xorg-input-synaptics-hwe-18.04, install OS updates and finally re-install xserver-xorg-input-synaptics-hwe-18.04.

Extra info

Low-level touchpad settings can be seen by running xinput list to find the ID of your touchpad, then run xinput list-props <device ID>. Change a setting with xinput set-prop <device ID> <property ID> <value>.

The Synaptics driver also has "coasting"/"kinetic scroll" which libinput will never support.