diff options
Diffstat (limited to 'doc/user/incorrectly-enabled-hires.rst')
-rw-r--r-- | doc/user/incorrectly-enabled-hires.rst | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/doc/user/incorrectly-enabled-hires.rst b/doc/user/incorrectly-enabled-hires.rst new file mode 100644 index 00000000..7dffca79 --- /dev/null +++ b/doc/user/incorrectly-enabled-hires.rst @@ -0,0 +1,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. |