major.io words of wisdom from a systems engineer

Bring back two and three finger taps in Fedora 24

Fedora Infinity LogoMost of the recent Fedora upgrades have been quite smooth. There were definitely some rough spots back in Fedora 15 and Fedora 17 with the /bin migration and the switch to systemd. The upgrade from Fedora 23 to Fedora 24 has been really easy except for one minor quirk: my two and three finger taps don’t seem to work on the touchpad.

I use a Lenovo ThinkPad X1 Carbon (3rd gen) and it has a clickpad along with physical buttons across the top. I use the two finger taps (to do a secondary click) frequently. After the Fedora 24 upgrade, I can still do clicks with one, two or three fingers, but the taps don’t work.

After a little digging in xinput, I began to narrow down the problem:

[[email protected] ~]$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     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)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ Integrated Camera                         id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]
[[email protected] ~]$ xinput list-props 11 | grep Tap
    Synaptics Tap Time (271):   180
    Synaptics Tap Move (272):   252
    Synaptics Tap Durations (273):  180, 100, 100
    Synaptics Tap Action (285): 0, 0, 0, 0, 1, 0, 0

Hunting for a fix

It seems like this Synaptics Tap Action (285) is what I need to adjust. What do those numbers mean, anyway?

After some searching, I found the answer in some Synaptics documentation:

Synaptics Tap Action
8 bit, up to MAX_TAP values (see synaptics.h), 0 disables an element. order: RT, RB, LT, LB, F1, F2, F3.

This seems like what I want, but what do those abbreviations mean at the end? I scrolled up on the page and found something useful:

Option "RTCornerButton" "integer"
Which mouse button is reported on a right top corner tap. Set to 0 to disable. Property: "Synaptics Tap Action"
Option "RBCornerButton" "integer"
Which mouse button is reported on a right bottom corner tap. Set to 0 to disable. Property: "Synaptics Tap Action"
Option "LTCornerButton" "integer"
Which mouse button is reported on a left top corner tap. Set to 0 to disable. Property: "Synaptics Tap Action"
Option "LBCornerButton" "integer"
Which mouse button is reported on a left bottom corner tap. Set to 0 to disable. Property: "Synaptics Tap Action"
Option "TapButton1" "integer"
Which mouse button is reported on a non-corner one-finger tap. Set to 0 to disable. Property: "Synaptics Tap Action"
Option "TapButton2" "integer"
Which mouse button is reported on a non-corner two-finger tap. Set to 0 to disable. Property: "Synaptics Tap Action"
Option "TapButton3" "integer"
Which mouse button is reported on a non-corner three-finger tap. Set to 0 to disable. Property: "Synaptics Tap Action"

The last three are the ones I care about. Then the abbreviations made sense:

  • F1: TapButton1
  • F2: TapButton2
  • F3: TapButton3

The TapButton1 setting was already set to 1, which means a primary tap. I need TapButton2 set to 3 (two fingers for a secondary button tap) and TapButton3 set to 2 (three fingers for a middle button tap). Let’s try with xinput directly first:

xinput set-prop 11 "Synaptics Tap Action" 0 0 0 0 1 3 2

SUCCESS! The secondary and middle taps have returned!

Making it stick

Let’s make the setting permanent. You could add this to a ~/.xprofile or some other file that the display manager runs, but this isn’t helpful if you have a touchpad that could be removed or re-added (like a USB touchpad). For this, we need an extra X configuration file.

I created a file called /etc/X11/xorg.conf.d/99-xinput-fix-multi-finger-taps.conf and added some configuration:

Section "InputClass"
       Identifier "tap-by-default"
       MatchIsTouchpad "on"
       Option "TapButton1" "1"
       Option "TapButton2" "3"
       Option "TapButton3" "2"
EndSection

The configuration file specifies what we want to occur when one, two or three fingers tap on the pad. We’re also being careful here to match only on touchpads to avoid tinkering with a mouse or other pointer device.

Log out of your X session and log in again. Your two and three finger taps should still be working!