libinput
0.16.0
A wrapper library for input devices
|
Palm detection tries to identify accidental touches while typing.
On most laptops typing on the keyboard generates accidental touches on the touchpad with the palm (usually the area below the thumb). This can lead to cursor jumps or accidental clicks.
Interference from a palm depends on the size of the touchpad and the position of the user's hand. Data from touchpads showed that almost all palm events on a Lenovo T440 happened in the left-most and right-most 5% of the touchpad. The T440 series has one of the largest touchpads, other touchpads are less affected by palm touches.
libinput enables palm detection on the edge of the touchpad. Two exclusion zones are defined on the left and right edge of the touchpad. If a touch starts in the exclusion zone, it is considered a palm and the touch point is ignored. However, for fast cursor movements across the screen, it is common for a finger to start inside an exclusion zone and move rapidly across the touchpad. libinput detects such movements and avoids palm detection on such touch sequences.
Each exclusion zone is divided into a top part and a bottom part. A touch starting in the top part of the exclusion zone does not trigger a tap (see Tap-to-click behaviour).
In the diagram below, the exclusion zones are painted red. Touch 'A' starts inside the exclusion zone and moves almost vertically. It is considered a palm and ignored for cursor movement, despite moving out of the exclusion zone.
Touch 'B' starts inside the exclusion zone but moves horizontally out of the zone. It is considered a valid touch and controls the cursor.
Touch 'C' occurs in the top part of the exclusion zone. Despite being a tapping motion, it does not generate an emulated button event. Touch 'D' likewise occurs within the exclusion zone but in the bottom half. libinput will generate a button event for this touch.
If a device provides a trackpoint, it is usually located above the touchpad. This increases the likelyhood of accidental touches whenever the trackpoint is used.
libinput disables the touchpad whenver it detects trackpoint activity for a certain timeout until after trackpoint activity stops. Touches generated during this timeout will not move the pointer, and touches started during this timeout will likewise not move the pointer (allowing for a user to rest the palm on the touchpad while using the trackstick). If the touchpad is disabled, the top software buttons remain enabled.
libinput automatically disables the touchpad for a timeout after a key press, a feature traditionally referred to as "disable while typing" and previously available through the syndaemon(1) command. libinput does not require an external command and the feature is currently enabled for all touchpads but will be reduced in the future to only apply to touchpads where finger width or pressure data is unreliable.
Notable behaviors of libinput's disable-while-typing feature: