Speeding up the Carbon X1 Trackpad

Let's say you have a Carbon X1 5th gen.

Let's say your trackpoint is an TPPS/2 Elan TrackPoint (and you can check this by running xinput |grep -i TrackPoint).

Let's say you have tried various xinput or /sys/.*/acceleration or /sys/.*/speed settings. But still...

Your trackpoint is WAY TOO SLOW!!

This is what fixed it for me:

  1. Run: mkdir -p /etc/libinput

  2. Create a local-overrides.quirk file with:

    cat > /etc/libinput/local-overrides.quirks <<END
    [Trackpoint Override]
    MatchUdevType=pointingstick
    AttrTrackpointMultiplier=2.0
    END
    
  3. Logout login / restart your X server / wayland.

  4. Enjoy the increased speed! Increase the 2.0 above for a faster experience, decrease it for a slower experience.

In one cuttable and pastable blob:

   mkdir -p /etc/libinput
   cat > /etc/libinput/local-overrides.quirks <<END
   [Trackpoint Override]
   MatchUdevType=pointingstick
   AttrTrackpointMultiplier=2.0
   END

In case this does not work, read on. I recommend you jump to the last section, and play with libinput debug-gui, or libinput quirks list /dev/input/event2 or whatever your trackpad is associated with.

Longer explanation

No luck with xinput

Normally, you tune your pointing device using xinput:

  • A simple xinput will show you the list of devices supported. Next to each device, you will see an id, like:

    $ xinput
    ⎡ 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 Elan 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: Integrated C           id=9    [slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
        ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]
    
  • Use xinput list-props 12 to see the properties of the device, for example:

    $ xinput list-props 12
    Device 'TPPS/2 Elan TrackPoint':
        Device Enabled (154):   1
        Coordinate Transformation Matrix (156): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Natural Scrolling Enabled (298):   0
        libinput Natural Scrolling Enabled Default (299):   0
        libinput Scroll Methods Available (302):    0, 0, 1
        libinput Scroll Method Enabled (303):   0, 0, 1
        libinput Scroll Method Enabled Default (304):   0, 0, 1
        libinput Button Scrolling Button (316): 2
        libinput Button Scrolling Button Default (317): 2
        libinput Middle Emulation Enabled (308):    0
        libinput Middle Emulation Enabled Default (309):    0
        libinput Accel Speed (310): 1.000000
        libinput Accel Speed Default (311): 0.000000
        libinput Accel Profiles Available (318):    1, 1
        libinput Accel Profile Enabled (319):   1, 0
        libinput Accel Profile Enabled Default (320):   1, 0
        libinput Left Handed Enabled (312): 0
        libinput Left Handed Enabled Default (313): 0
        libinput Send Events Modes Available (275): 1, 0
        libinput Send Events Mode Enabled (276):    0, 0
        libinput Send Events Mode Enabled Default (277):    0, 0
        Device Node (278):  "/dev/input/event2"
        Device Product ID (279):    2, 10
        libinput Drag Lock Buttons (314):   <no items>
        libinput Horizontal Scroll Enabled (315):   1
    
  • Use the number in parentheses to change the specified parameter. You can set the acceleration speed (parameter 310) to value 1.0 (the fastest, it's a rate) with:

    xinput set-prop 12 310 1
    
  • Suffer silently, as your TrackPad is still too slow.

No luck with sys parameters

Most drivers in linux have tunable parameters in /sys. Turns out that the Elan Trackpad is no exception.

cd /sys
find . -name sensitivity
./devices/platform/i8042/serio1/serio2/sensitivity

By echoing values in some of those parameters you may be able to adjust speed and sensitivity. No luck with my trackpad, despite trying different paths and values. The adjustments were too minor.

Finally worked it out with libinput

This page here brought me on the right path. In short:

  • xinput and friends are the right way to tune the settings on your device.
  • However, TrackPads vary wildly in terms of numbers they generate in response to your pressure.
  • libinput allows you to configure some magic numbers to address quirks in your device.

If you need anything more detailed, you should follow the instructions here.

What I had to do is:

  1. Install the command libinput, apt-get install libinput-tools.
  2. Look for my device with libinput list-devices.
  3. Recompile libinput from source, a breeze following the instructions on the web site, so I could run libinput debug-gui, which is not enabled by default on Debian.
  4. Play with the parameters, as per instructions.
  5. Once I had the parameters right, installed them on my system.

The most important commands were:

  • libinput list-devices, to find which device corresponded to my trackpad (/dev/input/event2).
  • libinput quirks list /dev/input/event2 (this command is not documented in the help nor man page) to verify which quirks were applied correctly, and libinput quirks list --verbose /dev/input/event2 to have more insights on the paths and files loaded.
  • restarting X, to see the new parameters applied. As documented, libinput debug-gui is a bit slower than the real deal.

Other posts

Technology/File Systems