• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.. _touchpad_jumping_cursor:
2
3==============================================================================
4Touchpad jumping cursor bugs
5==============================================================================
6
7A common bug encountered on touchpads is a cursor jump when alternating
8between fingers on a multi-touch-capable touchpad. For example, after moving
9the cursor a user may use a second finger in the software button area to
10physically click the touchpad. Upon setting the finger down, the cursor
11exhibits a jump towards the bottom left or right, depending on the finger
12position.
13
14When libinput detects a cursor jump it prints a bug warning to the log with
15the text **"Touch jump detected and discarded."** and a link to this page.
16
17.. note:: This warning is ratelimited and will stop appearing after a few
18	  times, even if the touchpad jumps continue.
19
20In most cases, this is a bug in the firmware (or kernel driver) and to
21libinput it appears that the touch point moves from its previous position.
22The pointer jump can usually be seen in the :ref:`libinput record
23<libinput-record>` output for the device:
24
25::
26
27      E: 249.206319 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
28      E: 249.218008 0003 0035 3764    # EV_ABS / ABS_MT_POSITION_X    3764
29      E: 249.218008 0003 0036 2221    # EV_ABS / ABS_MT_POSITION_Y    2221
30      E: 249.218008 0003 003a 0065    # EV_ABS / ABS_MT_PRESSURE      65
31      E: 249.218008 0003 0000 3764    # EV_ABS / ABS_X                3764
32      E: 249.218008 0003 0001 2216    # EV_ABS / ABS_Y                2216
33      E: 249.218008 0003 0018 0065    # EV_ABS / ABS_PRESSURE         65
34      E: 249.218008 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
35      E: 249.230881 0003 0035 3752    # EV_ABS / ABS_MT_POSITION_X    3752
36      E: 249.230881 0003 003a 0046    # EV_ABS / ABS_MT_PRESSURE      46
37      E: 249.230881 0003 0000 3758    # EV_ABS / ABS_X                3758
38      E: 249.230881 0003 0018 0046    # EV_ABS / ABS_PRESSURE         46
39      E: 249.230881 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
40      E: 249.242648 0003 0035 1640    # EV_ABS / ABS_MT_POSITION_X    1640
41      E: 249.242648 0003 0036 4681    # EV_ABS / ABS_MT_POSITION_Y    4681
42      E: 249.242648 0003 003a 0025    # EV_ABS / ABS_MT_PRESSURE      25
43      E: 249.242648 0003 0000 1640    # EV_ABS / ABS_X                1640
44      E: 249.242648 0003 0001 4681    # EV_ABS / ABS_Y                4681
45      E: 249.242648 0003 0018 0025    # EV_ABS / ABS_PRESSURE         25
46      E: 249.242648 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
47      E: 249.254568 0003 0035 1648    # EV_ABS / ABS_MT_POSITION_X    1648
48      E: 249.254568 0003 003a 0027    # EV_ABS / ABS_MT_PRESSURE      27
49      E: 249.254568 0003 0000 1644    # EV_ABS / ABS_X                1644
50      E: 249.254568 0003 0018 0027    # EV_ABS / ABS_PRESSURE         27
51
52
53In this recording, the pointer jumps from its position 3752/2216 to
541640/4681 within a single frame. On this particular touchpad, this would
55represent a physical move of almost 50mm. libinput detects some of these
56jumps and discards the movement but otherwise continues as usual.
57If your only encounter with these jumps is the warning printed to the log,
58libinput functions as intended.
59
60When you encounter the warning in the log, please generate a recording of
61your touchpad with :ref:`libinput record <libinput-record>` and file a bug.
62See :ref:`reporting_bugs` for more details.
63
64Note that it most cases, libinput cannot actually fix the issue. Filing a
65bug is useful to figure out if there are other factors at play or whether
66there are heuristics we can employ to reduce the impact.
67
68------------------------------------------------------------------------------
69AlpsPS/2 ALPS DualPoint TouchPad jumping to 4095/0
70------------------------------------------------------------------------------
71
72A special case of pointer jumps happens on ``AlpsPS/2 ALPS DualPoint TouchPad``
73devices found in the Lenovo ThinkPad E465 and E550 and likely others with
74the same touchpad hardware. On those devices, the touchpad occasionally
75sends an event for the second finger to move to position 4095/0 before
76moving back to the original position. libinput detects this movement and
77removes it but depending on the interaction this may cause a smaller jump
78later when the coordinates reset to the new position of the finger.
79
80Some more information is available in `Gitlab Issue #492 <https://gitlab.freedesktop.org/libinput/libinput/-/issues/492>`__.
81