Touchpad

Inherits

Device

Properties

Some properties are detected automatically, but due to device or driver bugs, the value may be incorrect, in which case the user must override it manually.

Property

Type

Description

Default

buttonpad

bool

Whether the touchpad is a buttonpad (no physical buttons below, the entire device is a button). Detected automatically.

false

click_timeout

time

The time during which a click trigger must be performed. If not, a hold trigger will be started.

200

handle_evdev_events

bool

Disable in case of any issues.

true

motion_threshold

number

For accurately determining the direction of 1-finger swipe triggers.

10

motion_threshold_2

number

For accurately determining the direction of 2-finger swipe triggers.

10

motion_threshold_3

number

For accurately determining the direction of 3- and 4-finger swipe triggers.

10

pressure_ranges.finger

uint

Minimum pressure for the touch point to be considered a finger. Everything below this value will be ignored.

0

pressure_ranges.thumb

uint

Minimum pressure for the touch point to be considered a thumb. Required for thumb_ variables.

4294967295

pressure_ranges.palm

uint

Minimum pressure for the touch point to be considered a palm. Everything over this value will be ignored.

4294967295

swipe.angle_tolerance

number

Angle tolerance for the left, right, up, down, left_right and up_down directions of TouchpadSwipeTrigger. The remaining space is used for diagonal directions.

Min: 0
Max: 45

20

Acceleration

The Hyprland and KWin implementations only provide the unaccelerated delta, while the standalone provides both.

Evdev backend

The evdev input backend supplies the following touchpad data, which libinput does not:

  • absolute position of each finger,

  • pressure of each finger (usually the surface area but some devices provide true pressure),

  • clicked state (only on touchpads that can be clicked).

This enables the following features:

  • finger_ and thumb_ variables (thumb detection requires the pressure range to be set, see Properties),

  • one-finger circle/stroke/swipe triggers,

  • click trigger,

  • tap trigger.

Plenty of features and device quirks that libinput takes care of are missing here. This is not that big of an issue, as evdev is not used for things that libinput is already capable of, so any problems should only affect the aforementioned features. But just in case, the handle_evdev_events device property can be used to disable evdev event processing for a specific device.

The Hyprland and KWin implementations require additional setup instructions (available in the installation section) to enable this backend.

One-finger swipe/stroke triggers

One-finger swipe triggers use the pointer’s unaccelerated delta and lock its position for the duration of the trigger. The sensitivity may be different compared to other triggers. Actions that move the pointer will not work.

In the Hyprland implementation, the delta is based on the pointer’s position and may be either unaccelerated or accelerated, depending on the device configuration.

Two-finger swipe/stroke triggers

Two-finger swipe triggers are achieved by treating scroll events as two-finger motion events. The thresholds for changing the scroll axis are quite large, which can cause unexpected behavior with stroke triggers and direction: any swipe triggers utilizing the move_by_delta mouse input action. For two-finger stroke triggers it is recommended (but not required) to only use strokes that have been recorded using two fingers.

This feature will not work if scrolling on edges is enabled.

Five-finger triggers

Libinput does not support five-finger gestures, click and tap triggers are an exception, as they are managed by InputActions.