Enable Natural Scrolling for Trackpads using libinput

ASUS May 26, 2018

I had recently upgraded to Ubuntu 18.04 and installed Unity back. After installing, I found that Reverse Scrolling/Natural Scrolling option was missing from Settings in Unity, while it was available in GNOME settings. This was pretty much a deal breaker for me, so I had to find a way to enable reverse scrolling via some GUI or even a CLI.

ENTER libinput

libinput is a library which is used to handle input devices in Ubuntu’s Display Server X.org. With further investigation, I found out that Unity, GNOME and XFCE and a host of Desktop environments support it. My hopes were high after discovering this. To enable Reverse Scrolling via libinput, follow the steps below.

FIND WHICH IS YOUR TOUCHPAD

You need to find which one among the input devices is your touchpad since libinput is used to handle input devices. This can be easily known by executing the command xinput –list

⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Elan Touchpad                           	id=12	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Asus Wireless Radio Control             	id=7	[slave  keyboard (3)]
    ↳ Video Bus                               	id=8	[slave  keyboard (3)]
    ↳ Video Bus                               	id=9	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=10	[slave  keyboard (3)]
    ↳ USB Camera: USB Camera                  	id=11	[slave  keyboard (3)]
    ↳ Asus WMI hotkeys                        	id=13	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=14	[slave  keyboard (3)]

Now obviously my touchpad cannot be a keyboard, so it has to be one among the Virtual Core Pointer. Elan Touchpad definitely sounded familiar to me, as I had installed its driver in Windows 10.

CHECK IF REVERSE SCROLLING CAN BE ENABLED OR NOT

The next step is to check whether your touchpad supports Reverse Scrolling or not. While I had an option to enable Reverse Scrolling from Settings when in Unity in Ubuntu 16.04, the option was gone in 18.04, but it was still available in GNOME. So I thought it should be available in libinput as well. To check if I can enable Reverse Scrolling in Unity in Ubuntu 18.04, I tried the command

xinput --list-props "Elan Touchpad"

(PS. Make sure that Elan Touchpad is inside the quotation marks if the name of your touchpad has spaces in between, and I shouldn’t be telling you to substitute Elan Touchpad with the name of your touchpad)

Device 'Elan Touchpad':
	Device Enabled (145):	1
	Coordinate Transformation Matrix (147):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Tapping Enabled (280):	0
	libinput Tapping Enabled Default (281):	0
	libinput Tapping Drag Enabled (282):	1
	libinput Tapping Drag Enabled Default (283):	1
	libinput Tapping Drag Lock Enabled (284):	0
	libinput Tapping Drag Lock Enabled Default (285):	0
	libinput Tapping Button Mapping Enabled (286):	1, 0
	libinput Tapping Button Mapping Default (287):	1, 0
	libinput Natural Scrolling Enabled (288):	0
	libinput Natural Scrolling Enabled Default (289):	0
	libinput Disable While Typing Enabled (290):	1
	libinput Disable While Typing Enabled Default (291):	1
	libinput Scroll Methods Available (292):	1, 1, 0
	libinput Scroll Method Enabled (293):	1, 0, 0
	libinput Scroll Method Enabled Default (294):	1, 0, 0
	libinput Click Methods Available (295):	1, 1
	libinput Click Method Enabled (296):	1, 0
	libinput Click Method Enabled Default (297):	1, 0
	libinput Middle Emulation Enabled (298):	0
	libinput Middle Emulation Enabled Default (299):	0
	libinput Accel Speed (300):	0.000000
	libinput Accel Speed Default (301):	0.000000
	libinput Left Handed Enabled (302):	0
	libinput Left Handed Enabled Default (303):	0
	libinput Send Events Modes Available (265):	1, 1
	libinput Send Events Mode Enabled (266):	0, 0
	libinput Send Events Mode Enabled Default (267):	0, 0
	Device Node (268):	"/dev/input/event8"
	Device Product ID (269):	1267, 5
	libinput Drag Lock Buttons (304):	<no items>
	libinput Horizontal Scroll Enabled (305):	1

You should look for an option that has Reverse Scrolling, or Natural Scrolling in it. Luckily I did have an option called libinput Natural Scrolling Enabled (288): 0. So I was sure that I can enable it in Ubuntu 18.04. Now it was only a matter of another command, after which I can use Reverse Scrolling without hassles.

PS. If you do not see an option like Reverse Scrolling anywhere inside that output, I’m afraid my friend, I cannot help you.

ENABLE NATURAL SCROLLING

One Command  xinput --set-prop "Elan Touchpad" "libinput Natural Scrolling Enabled" 1

This was enough to enable Reverse Scrolling. Plus it happened in an instant, I never had to log out or restart at all.

PS. If the command with the list-props flag output shows something like ‘Synaptics’ at the beginning of each prop instead of ‘libinput’, please check the update below.

AFTER EXPERIENCES

Using libinput I could bring back one feature I loved the most. But the behavior I get with the touchpad in Unity in Ubuntu 16.04 and 18.04 is completely different. There are three pain points with the new experience in Ubuntu 18.04:

  • I could select text by tapping on the touchpad, and not clicking it.
  • You could keep selecting the text and scroll up or down with the touchpad
  • I could tap using two fingers to emulate right click

Sadly I can’t do either of these things with Ubuntu 18.04. While I can still do point no. 1 and 3 using GNOME, I can’t do point 2 with that either. So I still have hopes of getting points 1 and 3 back on track with libinput again, but I’ll pray that one day I’m able to get back point 2 as well.

UPDATE

With libinput, I ran the following command xinput –set-prop “Elan Touchpad” “libinput Tapping Enabled” 1, and I was able to get point 1 and 3 working fine. Point 2 was still not working.

I asked my friends who had a similar laptop model, to run the command and then they got synaptics props instead of libinput. I realized that Ubuntu 18.04 did not come with synaptics, rather it came with libinput. Now I installed synaptics using sudo apt install xserver-xorg-input-synaptics  after which I restarted my laptop.

I was able to get the same Mouse experiences present in Ubuntu 16.04 to Unity in Ubuntu 18.04 without hassles. Moreover, the fine details of touchpad settings like Reverse Scrolling are now back in Touchpad settings in Ubuntu 18.04.

Tags