summaryrefslogtreecommitdiff
path: root/doc/user/incorrectly-enabled-hires.rst
blob: 7dffca7904ef3e9335cee6163d0b0f488191dfa0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
.. _incorrectly_enabled_hires:

==============================================================================
Incorrectly enabled high-resolution scroll
==============================================================================

Some devices might announce support for high-resolution scroll wheel by enabling
``REL_WHEEL_HI_RES`` and/or ``REL_HWHEEL_HI_RES`` but never send a
high-resolution scroll event.

When the first low-resolution scroll event is received without any previous
high-resolution event, libinput prints a bug warning with the text **"device
supports high-resolution scroll but only low-resolution events have been
received"** and a link to this page.

.. note:: This warning will be printed only once

In most cases this is a bug on the device firmware, the kernel driver or in a
software used to create user-space devices through uinput.

Once the bug is detected, libinput will start emulating high-resolution scroll
events.

------------------------------------------------------------------------------
Detecting and fixing the issue
------------------------------------------------------------------------------

Events sent by a buggy device can be shown in the
:ref:`libinput record <libinput-record>` output for the device. Notice that
``REL_WHEEL_HI_RES`` and ``REL_HWHEEL_HI_RES`` are set but only ``REL_WHEEL``
events are sent: ::

    # Supported Events:
    # Event type 0 (EV_SYN)
    # Event type 1 (EV_KEY)
    #   Event code 272 (BTN_LEFT)
    # Event type 2 (EV_REL)
    #   Event code 0 (REL_X)
    #   Event code 1 (REL_Y)
    #   Event code 6 (REL_HWHEEL)
    #   Event code 8 (REL_WHEEL)
    #   Event code 11 (REL_WHEEL_HI_RES)
    #   Event code 12 (REL_HWHEEL_HI_RES)
    [...]
    quirks:
    events:
    - evdev:
        - [  0,      0,   2,   8,       1] # EV_REL / REL_WHEEL                 1
        - [  0,      0,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +0ms
    - evdev:
        - [  0,  15126,   2,   8,       1] # EV_REL / REL_WHEEL                 1
        - [  0,  15126,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +15ms
    - evdev:
        - [  0,  30250,   2,   8,       1] # EV_REL / REL_WHEEL                 1
        - [  0,  30250,   0,   0,       0] # ------------ SYN_REPORT (0) ---------- +15ms

The issue can be fixed by adding a quirk to unset the ``REL_WHEEL_HI_RES`` and
``REL_HWHEEL_HI_RES`` event codes: ::

    AttrEventCodeDisable=REL_WHEEL_HI_RES;REL_HWHEEL_HI_RES;

Please see :ref:`device-quirks` for details.