1.. _touchpad_pressure: 2 3============================================================================== 4Touchpad pressure-based touch detection 5============================================================================== 6 7libinput uses the touchpad pressure values and/or touch size values to 8detect whether a finger has been placed on the touchpad. This is 9:ref:`kernel_pressure_information` and combines with a libinput-specific hardware 10database to adjust the thresholds on a per-device basis. libinput uses 11these thresholds primarily to filter out accidental light touches but 12the information is also used for some :ref:`palm_detection`. 13 14Most devices only support one of either touch pressure or touch size. 15libinput uses whichever is available but a preference is given to touch size 16as it provides more specific information. Since most devices only provide 17one type anyway, this internal preference does not usually matter. 18 19Pressure and touch size thresholds are **not** directly configurable by the 20user. Instead, libinput provides these thresholds for each device where 21necessary. See :ref:`touchpad_pressure_hwdb` for instructions on how to adjust 22the pressure ranges and :ref:`touchpad_touch_size_hwdb` for instructions on 23how to adjust the touch size ranges. 24 25.. _kernel_pressure_information: 26 27------------------------------------------------------------------------------ 28Information provided by the kernel 29------------------------------------------------------------------------------ 30 31The kernel sends multiple values to inform userspace about a finger touching 32the touchpad. The most basic is the ``EV_KEY/BTN_TOUCH`` boolean event 33that simply announces physical contact with the touchpad. The decision when 34this event is sent is usually made by the kernel driver and may depend on 35device-specific thresholds. These thresholds are transparent to userspace 36and cannot be modified. On touchpads where pressure or touch size is not 37available, libinput uses ``BTN_TOUCH`` to determine when a finger is 38logically down. 39 40Many contemporary touchpad devices provide an absolute pressure axis in 41addition to ``BTN_TOUCH``. This pressure generally increases as the pressure 42increases, however few touchpads are capable of detecting true pressure. The 43pressure value is usually related to the covered area - as the pressure 44increases a finger flattens and thus covers a larger area. The range 45provided by the kernel is not mapped to a specific physical range and 46often requires adjustment. Pressure is sent by the ``ABS_PRESSURE`` axis 47for single-touch touchpads or ``ABS_MT_PRESSURE`` on multi-touch capable 48touchpads. Some devices can detect multiple fingers but only provide 49``ABS_PRESSURE``. 50 51Some devices provide additional touch size information through 52the ``ABS_MT_TOUCH_MAJOR/ABS_MT_TOUCH_MINOR`` axes and/or 53the ``ABS_MT_WIDTH_MAJOR/ABS_MT_WIDTH_MINOR`` axes. These axes specifcy 54the size of the touch ellipse. While the kernel documentation specifies how 55these axes are supposed to be mapped, few devices forward reliable 56information. libinput uses these values together with a device-specific 57:ref:`device-quirks` entry. In other words, touch size detection does not work 58unless a device quirk is present for the device. 59 60