Debian – TrackPoint hard to control after Debian update

debianthinkpadxinput

I'm on debian testing, and after rebooting (after an uptime of 3 weeks or so, that included a bunch of package updates, I believe including the kernel) the other day, the fine-adjustment – what a golfer would call putting – of the mouse pointer position gets really hard, it feels like the pointer is still moving, although the the trackpoint is already back at its center position. Using the trackpoint is no fun anymore, it takes seconds just to select a bunch of words.

I don't think it's just a trackpoint performance configuration setting. It might be some threshold or the deactivation of some clever algorithm (or the activation of a wannabe clever algorithm) to enhance the usability of the trackpoint.

This is an IBM/Lenovo external USB keyboard (it is not a ThinkPad laptop, even though I tagged this question 'thinkpad', as there is no 'trackpoint' tag yet and my current reputation doesn't permit tag creation).

My xinput version:

$ xinput --version
xinput version 1.6.0
XI version on server: 2.2

And here the props of the device:

$ xinput list-props 10
Device 'Synaptics Inc. Composite TouchPad / TrackPoint':
        Device Enabled (125):   0
        Coordinate Transformation Matrix (127): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (247):     1
        Device Accel Constant Deceleration (248):       2.500000
        Device Accel Adaptive Deceleration (249):       1.000000
        Device Accel Velocity Scaling (250):    12.500000
        Synaptics Edges (251):  1632, 5312, 1572, 4284
        Synaptics Finger (252): 25, 30, 256
        Synaptics Tap Time (253):       180
        Synaptics Tap Move (254):       221
        Synaptics Tap Durations (255):  180, 180, 100
        Synaptics ClickPad (256):       0
        Synaptics Tap FastTap (257):    0
        Synaptics Middle Button Timeout (258):  75
        Synaptics Two-Finger Pressure (259):    282
        Synaptics Two-Finger Width (260):       7
        Synaptics Scrolling Distance (261):     100, 100
        Synaptics Edge Scrolling (262): 1, 0, 0
        Synaptics Two-Finger Scrolling (263):   0, 0
        Synaptics Move Speed (264):     1.000000, 1.750000, 0.039809, 40.000000
        Synaptics Edge Motion Pressure (265):   30, 160
        Synaptics Edge Motion Speed (266):      1, 401
        Synaptics Edge Motion Always (267):     0
        Synaptics Off (268):    0
        Synaptics Locked Drags (269):   0
        Synaptics Locked Drags Timeout (270):   5000
        Synaptics Tap Action (271):     0, 0, 0, 0, 0, 0, 0
        Synaptics Click Action (272):   1, 1, 1
        Synaptics Circular Scrolling (273):     0
        Synaptics Circular Scrolling Distance (274):    0.100000
        Synaptics Circular Scrolling Trigger (275):     0
        Synaptics Circular Pad (276):   0
        Synaptics Palm Detection (277): 0
        Synaptics Palm Dimensions (278):        10, 200
        Synaptics Coasting Speed (279): 20.000000, 50.000000
        Synaptics Pressure Motion (280):        30, 160
        Synaptics Pressure Motion Factor (281): 1.000000, 1.000000
        Synaptics Grab Event Device (282):      1
        Synaptics Gestures (283):       1
        Synaptics Capabilities (284):   1, 1, 1, 1, 1, 1, 1
        Synaptics Pad Resolution (285): 1, 1
        Synaptics Area (286):   0, 0, 0, 0
        Synaptics Noise Cancellation (287):     25, 25
        Device Product ID (242):        1739, 9
        Device Node (243):      "/dev/input/event6"

Update I forgot there are 2 devices that might be relevant, this one actually looks more relevant than the synaptics device:

$ xinput list-props 11
Device 'TPPS/2 IBM TrackPoint':
    Device Enabled (135):   1
    Coordinate Transformation Matrix (137): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (260):     0
    Device Accel Constant Deceleration (261):       1.000000
    Device Accel Adaptive Deceleration (262):       1.000000
    Device Accel Velocity Scaling (263):    10.000000
    Device Product ID (255):        2, 10
    Device Node (256):      "/dev/input/event9"
    Evdev Axis Inversion (302):     0, 0
    Evdev Axes Swap (304):  0
    Axis Labels (305):      "Rel X" (145), "Rel Y" (146)
    Button Labels (306):    "Button Left" (138), "Button Middle" (139), "Button Right" (140), "Button Wheel Up" (141), "Button Wheel Down" (142)
    Evdev Middle Button Emulation (307):    0
    Evdev Middle Button Timeout (308):      50
    Evdev Third Button Emulation (309):     0
    Evdev Third Button Emulation Timeout (310):     1000
    Evdev Third Button Emulation Button (311):      3
    Evdev Third Button Emulation Threshold (312):   20
    Evdev Wheel Emulation (313):    0
    Evdev Wheel Emulation Axes (314):       0, 0, 4, 5
    Evdev Wheel Emulation Inertia (315):    10
    Evdev Wheel Emulation Timeout (316):    200
    Evdev Wheel Emulation Button (317):     4
    Evdev Drag Lock Buttons (318):  0

Any idea what knob to turn?

Update I diffed the above properties against those of another machine (a Lenovo laptop where the TrackPoint works fine) also running debian testing, and they are exactly identical. The version of xinput is the same, too. So I guess we can exclude the xinput version as well as the xinput settings for those devices from our considerations. I'll try to get my hand on another IBM USB keyboard and check if it isn't – after all – a hardware issue…

[The following is an edit to this question made by Barry Grumbine (thanks, man), that got rejected by https://unix.stackexchange.com/users/2180/shawn-j-goff (no thanks, man). Because I find it very useful and Shawn's rejection hid this bit of information from me (until now) and others, I'll paste it in here:]

Additional Information
There is an open Debian bug report that I believe describes this problem #682413 The problem seems to be related to the synaptics_usb kernel module. According to synaptics_usb.c, line 30:

[…] touchstick support has not been tested much yet[…]

Best Answer

I was having the exact same problem, but I think I've finally found a solution.

xinput --set-prop 11 'Device Accel Constant Deceleration' 3

allows the touchstick/trackpoint to be stable at close range, i.e. when trying to select text. Change the '3' up or down until you get something you like, I tried 2, 3, and 4 and settled on '3'. Then play with,

xset m 5 1

to adjusts the acceleration. The '5' is the acceleration multiplier and '1' is the number of pixels you need to move the cursor before acceleration kicks in, '5' allows me to zip across the screen nicely.

Last thing to do is incorporate these settings into my .xinitrc:

xinput --set-prop 11 'Device Accel Constant Deceleration' 3 &
xset m 5 1 &
exec ck-launch-session startxfce4

I found all this information on the ArchWiki.

Final note: I think this problem showed up because the recently added synaptics_usb kernel module does not have sane defaults for the trackpoint, so the problem was "exposed" by the new kernel module, but not a problem with synaptics_usb itself.

[EDIT:] More Information My .xinitrc does not work on Debian Testing/LightDM/XFCE not sure why. Decided to do the xorg.conf tweaking.

Created the config file:

$ cat /usr/share/X11/xorg.conf.d/50-synaptics_trackpoint.conf
Section "InputClass"
        Identifier "Synaptics TrackPoint"
        MatchProduct "Stick"
        # set the following to 1 1 0 respectively to disable acceleration.
        Option "AccelerationNumerator" "5"
        Option "AccelerationDenominator" "1"
        Option "AccelerationThreshold" "1"
        # linear deceleration (mouse speed reduction)
        Option "ConstantDeceleration" "2"
        # some curved deceleration
        Option "AdaptiveDeceleration" "1"
EndSection

Rebooted, still no dice. I found out that the XFCE was overriding the Xorg config, so I removed it:

$ rm ~/.config/xfce4/xfconf/xfce-perchannel-xml/pointers.xml

Rebooted again, works as expected.

Some of my troubleshooting notes:

# Get the current acceleration values.
xinput --get-feedbacks 11

# Get the current deceleration values.
xinput --list-props 11 | grep Deceleration

# What does Xorg know about this?
grep -i stick /var/log/Xorg.0.log

# Set acceleration.
xinput --set-ptr-feedback 11 1 5 1

# Set deceleration.
xinput --set-prop 11 'Device Accel Constant Deceleration' 2

More references

Xorg PointerAcceleration Wiki xorg.conf man page

Related Question