Lenovo 2015 Notebooks with Synaptics TrackPoint + TouchPad with Physical Buttons

***My Config: ***
T440s with the latest Synaptics Touchpad/TrackPoint with Physical Buttons (same as on 2015 series of Lenovo)
Tumbleweed Linux 4.0.0-1-desktop #1 SMP PREEMPT Fri Apr 24 12:39:28 UTC 2015 (27299c0) x86_64 x86_64 x86_64 GNU/Linux

So, with the latest release of kernel 4.0 this problem has been solved more or less. Though few other distributions had patched Synaptics drivers to resolve the issue with physical buttons not working due to re-arrangement of buttons mappings, prior to the availability of kernel 4.0.

Reference: https://bugs.freedesktop.org/show_bug.cgi?id=88609

Now the issue with latest kernel 4.0 is that “libinput” is being made as the default X.Org input driver, replacing the synaptics and evdev … a good idea but currently this is bringing many probs related with the settings of the touchpad and the trackpoint (speed, clicking, tapping, etc). If you have synaptics, evdev and libinput installed, libinput is been given the priority thus saking the other 2 drivers even if they are installed. Till this gets properly resolved, i.e. libinput properly implemented (at least in KDE environment, via kcm-touhpad for touchpad and the standard mouse settings for TrackPoint) I recommend to uninstall the libinput packages:

libinput-udev and libinput10 and xf86-input-libinput

Make sure that the other two are present - evdev and synaptics.

Here are how my related files are setup respectively [/etc/X11/xorg.conf.d/…]

50-synaptics.conf


# Example xorg.conf.d snippet that assigns the touchpad driver
# to all touchpads. See xorg.conf.d(5) for more information on
# InputClass.
# DO NOT EDIT THIS FILE, your distribution will likely overwrite
# it when updating. Copy (and rename) this file into
# /etc/X11/xorg.conf.d first.
# Additional options may be added in the form of
#   Option "OptionName" "value"
#
Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
# This option is recommend on all Linux systems using evdev, but cannot be
# enabled by default. See the following link for details:
# http://who-t.blogspot.com/2010/11/how-to-ignore-configuration-errors.html
        MatchDevicePath "/dev/input/event*"
    Option "VertTwoFingerScroll" "on"
    Option "HorizEdgeScroll" "1"
    Option "HorizTwoFingerScroll" "on"
# enable tap-to-click as default (bnc#722457)
    Option "TapButton1" "1"
    Option "TapButton2" "2"
    Option "TapButton3" "3"
EndSection

Section "InputClass"
        Identifier "touchpad ignore duplicates"
        MatchIsTouchpad "on"
        MatchOS "Linux"
        MatchDevicePath "/dev/input/mouse*"
        Option "Ignore" "on"
EndSection

# This option enables the bottom right corner to be a right button on clickpads
# and the right and middle top areas to be right / middle buttons on clickpads
# with a top button area.
# This option is only interpreted by clickpads.
Section "InputClass"
        Identifier "Default clickpad buttons"
        MatchDriver "synaptics"
        #Option "SoftButtonAreas" "4000 0 4063 0 3000 4000 4063 0"
        Option "SoftButtonAreas" "60% 0 82% 0 40% 59% 82% 0"
        #Option "SecondarySoftButtonAreas" "58% 0 0 15% 42% 58% 0 15%"
EndSection

# This option disables software buttons on Apple touchpads.
# This option is only interpreted by clickpads.
Section "InputClass"
        Identifier "Disable clickpad buttons on Apple touchpads"
        MatchProduct "Apple|bcm5974"
        MatchDriver "synaptics"
        Option "SoftButtonAreas" "0 0 0 0 0 0 0 0"
EndSection

With this and the KCM-touchpad settings all the buttons at the bottom of the touchpad work, including middle click.

10-evdev.conf is the defaul one, and the driver itself is responsible for TrackPoint and the Physical Buttons:


#
# Catch-all evdev loader for udev-based systems
# We don't simply match on any device since that also adds accelerometers
# and other devices that we don't really want to use. The list below
# matches everything but joysticks.

Section "InputClass"
        Identifier "evdev pointer catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev tablet catchall"
        MatchIsTablet "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

And the 11-evdev.conf to make the middle button to function for scrolling:


Section "InputClass"
        # Novell Bugs #597214, #780626, #843333, #861813
    Identifier      "Trackpoint Wheel Emulation"
    MatchProduct    "TPPS/2 IBM TrackPoint|ThinkPad USB Keyboard with TrackPoint"
        MatchIsPointer  "on"
        Driver  "evdev"
        Option  "EmulateWheel"  "on"
        Option  "EmulateWheelButton"    "2"
        # Since middle button is in use now these button events need to be emulated (bnc#869097)
        Option  "Emulate3Buttons" "on"
EndSection

I haven’t tried, but the above should work on other DE’s as wel - Gnome, XFCE, etc. Hope the above will be helpful for many to resolve the issue … till libinput gets mature enough.

Ignore the following section from the previous post, made a mistake.

Instead create a 51-trackpoint.conf with the following. This enable middle click functions - vertical/horizontal scrolling and opening windows in a new tab


Section "InputClass"
    Identifier      "Trackpoint Wheel Emulation"
    MatchProduct    "TPPS/2 IBM TrackPoint|ThinkPad USB Keyboard with TrackPoint"
        MatchIsPointer  "on"
        MatchDevicePath    "/dev/input/event*"
        Driver  "evdev"
        Option  "EmulateWheel"  "true"
        Option  "EmulateWheelButton"    "2"
        Option  "Emulate3Buttons" "true"
        #To enable horizontal scrolling in addition to vertical scrolling
        Option    "XAxisMapping"        "6 7"
        Option    "YAxisMapping"        "4 5"
EndSection

Voila!

BTW, here is the output from /var/log/Xorg.0.log pertaining to the Synaptics and the TrackPoint for reference:



...
...
 30770.372] (II) config/udev: Adding input device SynPS/2 Synaptics TouchPad (/dev/input/event5)
 30770.372] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "evdev touchpad catchall"
 30770.372] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "evdev touchpad catchall"
 30770.372] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "touchpad catchall"
 30770.372] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "Default clickpad buttons"
 30770.372] (II) LoadModule: "synaptics"
 30770.372] (II) Loading /usr/lib64/xorg/modules/input/synaptics_drv.so
 30770.372] (II) Module synaptics: vendor="X.Org Foundation"
 30770.372]     compiled for 1.17.1, module version = 1.8.2
 30770.372]     Module class: X.Org XInput Driver
 30770.372]     ABI class: X.Org XInput driver, version 21.0
 30770.372] (II) Using input driver 'synaptics' for 'SynPS/2 Synaptics TouchPad'
 30770.372] (**) SynPS/2 Synaptics TouchPad: always reports core events
 30770.372] (**) Option "Device" "/dev/input/event5"
 30770.394] (II) synaptics: SynPS/2 Synaptics TouchPad: found clickpad property
 30770.394] (--) synaptics: SynPS/2 Synaptics TouchPad: x-axis range 1266 - 5676 (res 45)
 30770.394] (--) synaptics: SynPS/2 Synaptics TouchPad: y-axis range 1096 - 4758 (res 68)
 30770.394] (--) synaptics: SynPS/2 Synaptics TouchPad: pressure range 0 - 255
 30770.394] (--) synaptics: SynPS/2 Synaptics TouchPad: finger width range 0 - 15
 30770.394] (--) synaptics: SynPS/2 Synaptics TouchPad: buttons: left double triple
 30770.394] (--) synaptics: SynPS/2 Synaptics TouchPad: Vendor 0x2 Product 0x7
 30770.394] (**) Option "HorizEdgeScroll" "1"
 30770.394] (**) Option "VertTwoFingerScroll" "on"
 30770.394] (**) Option "HorizTwoFingerScroll" "on"
 30770.394] (**) Option "TapButton1" "1"
 30770.394] (**) Option "TapButton2" "2"
 30770.394] (**) Option "TapButton3" "3"
 30770.394] (**) Option "SoftButtonAreas" "60% 0 82% 0 40% 59% 82% 0"
 30770.394] (--) synaptics: SynPS/2 Synaptics TouchPad: touchpad found
 30770.394] (**) SynPS/2 Synaptics TouchPad: always reports core events
 30770.403] (**) Option "config_info" "udev:/sys/devices/platform/i8042/serio1/input/input2/event5"
 30770.403] (II) XINPUT: Adding extended input device "SynPS/2 Synaptics TouchPad" (type: TOUCHPAD, id 11)
 30770.403] (**) synaptics: SynPS/2 Synaptics TouchPad: (accel) MinSpeed is now constant deceleration 2.5
 30770.403] (**) synaptics: SynPS/2 Synaptics TouchPad: (accel) MaxSpeed is now 1.75
 30770.403] (**) synaptics: SynPS/2 Synaptics TouchPad: (accel) AccelFactor is now 0.035
 30770.403] (**) SynPS/2 Synaptics TouchPad: (accel) keeping acceleration scheme 1
 30770.403] (**) SynPS/2 Synaptics TouchPad: (accel) acceleration profile 1
 30770.403] (**) SynPS/2 Synaptics TouchPad: (accel) acceleration factor: 2.000
 30770.403] (**) SynPS/2 Synaptics TouchPad: (accel) acceleration threshold: 4
 30770.403] (--) synaptics: SynPS/2 Synaptics TouchPad: touchpad found
 30770.403] (II) config/udev: Adding input device SynPS/2 Synaptics TouchPad (/dev/input/mouse0)
 30770.403] (**) SynPS/2 Synaptics TouchPad: Ignoring device from InputClass "touchpad ignore duplicates"
 30770.403] (II) config/udev: Adding input device TPPS/2 IBM TrackPoint (/dev/input/event6)
 30770.403] (**) TPPS/2 IBM TrackPoint: Applying InputClass "evdev pointer catchall"
 30770.403] (**) TPPS/2 IBM TrackPoint: Applying InputClass "evdev pointer catchall"
 30770.403] (**) TPPS/2 IBM TrackPoint: Applying InputClass "Trackpoint Wheel Emulation"
 30770.403] (II) Using input driver 'evdev' for 'TPPS/2 IBM TrackPoint'
 30770.403] (**) TPPS/2 IBM TrackPoint: always reports core events
 30770.403] (**) evdev: TPPS/2 IBM TrackPoint: Device: "/dev/input/event6"
 30770.403] (--) evdev: TPPS/2 IBM TrackPoint: Vendor 0x2 Product 0xa
 30770.403] (--) evdev: TPPS/2 IBM TrackPoint: Found 3 mouse buttons
 30770.403] (--) evdev: TPPS/2 IBM TrackPoint: Found relative axes
 30770.403] (--) evdev: TPPS/2 IBM TrackPoint: Found x and y relative axes
 30770.403] (II) evdev: TPPS/2 IBM TrackPoint: Configuring as mouse
 30770.403] (**) Option "Emulate3Buttons" "true"
 30770.403] (**) Option "EmulateWheel" "true"
 30770.403] (**) Option "EmulateWheelButton" "2"
 30770.403] (**) Option "YAxisMapping" "4 5"
 30770.403] (**) evdev: TPPS/2 IBM TrackPoint: YAxisMapping: buttons 4 and 5
 30770.403] (**) Option "XAxisMapping" "6 7"
 30770.403] (**) evdev: TPPS/2 IBM TrackPoint: XAxisMapping: buttons 6 and 7
 30770.403] (**) evdev: TPPS/2 IBM TrackPoint: EmulateWheelButton: 2, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
 30770.403] (**) Option "config_info" "udev:/sys/devices/platform/i8042/serio1/serio2/input/input7/event6"
 30770.403] (II) XINPUT: Adding extended input device "TPPS/2 IBM TrackPoint" (type: MOUSE, id 12)
 30770.403] (II) evdev: TPPS/2 IBM TrackPoint: initialized for relative axes.
 30770.404] (**) TPPS/2 IBM TrackPoint: (accel) keeping acceleration scheme 1
 30770.404] (**) TPPS/2 IBM TrackPoint: (accel) acceleration profile 0
 30770.404] (**) TPPS/2 IBM TrackPoint: (accel) acceleration factor: 2.000
 30770.404] (**) TPPS/2 IBM TrackPoint: (accel) acceleration threshold: 4
 30770.404] (II) config/udev: Adding input device TPPS/2 IBM TrackPoint (/dev/input/mouse1)
...
...

And here is the pic of the Touchpad on my T440s:
http://s15.postimg.org/p5trje9y3/T440s_Touch_Pad_from_2015_models.jpg

And least but not least, I suggest adding the “echo 200 > /sys/bus/serio/devices/serio2/sensitivity” to /etc/rc.d/rc.local for now (you may need to create that file) in case you find the default 128 to be on a lower side, i.e. slow.

Play around with the figure that best suits you, ranging 0 - 256, i think.