libinput supports some static configuration through udev properties.
These properties are read when the device is initially added to libinput's device list, i.e. before the LIBINPUT_EVENT_DEVICE_ADDED event is generated.
The following udev properties are supported:
- LIBINPUT_CALIBRATION_MATRIX
- Sets the calibration matrix, see libinput_device_config_calibration_get_default_matrix(). If unset, defaults to the identity matrix.
- LIBINPUT_DEVICE_GROUP
- A string identifying the libinput_device_group for this device. Two devices with the same property value are grouped into the same device group, the value itself is irrelevant otherwise.
- ID_SEAT
- Assigns the physical seat for this device. See libinput_seat_get_physical_name(). Defaults to "seat0".
- ID_INPUT
- If this property is set, the device is considered an input device. Any device with this property missing will be ignored, see Device type assignment via udev.
- ID_INPUT_KEYBOARD, ID_INPUT_KEY, ID_INPUT_MOUSE, ID_INPUT_TOUCHPAD, ID_INPUT_TOUCHSCREEN, ID_INPUT_TABLET, ID_INPUT_JOYSTICK, ID_INPUT_ACCELEROMETER
- If any of the above is set, libinput initializes the device as the given type, see Device type assignment via udev.
- WL_SEAT
- Assigns the logical seat for this device. See libinput_seat_get_logical_name() context. Defaults to "default".
- MOUSE_DPI
- HW resolution and sampling frequency of a relative pointer device. See Normalization of relative motion for details.
- MOUSE_WHEEL_CLICK_ANGLE
- The angle in degrees for each click on a mouse wheel. See libinput_pointer_get_axis_source() for details.
Below is an example udev rule to assign "seat1" to a device from vendor 0x012a with the model ID of 0x034b.
ACTION=="add|change", KERNEL=="event[0-9]*", ENV{ID_VENDOR_ID}=="012a", \
ENV{ID_MODEL_ID}=="034b", ENV{ID_SEAT}="seat1"
Device type assignment via udev
libinput requires the ID_INPUT property to be set on a device, otherwise the device will be ignored. In addition, one of ID_INPUT_KEYBOARD, ID_INPUT_KEY, ID_INPUT_MOUSE, ID_INPUT_TOUCHPAD, ID_INPUT_TOUCHSCREEN, ID_INPUT_TABLET, ID_INPUT_JOYSTICK, ID_INPUT_ACCELEROMETER must be set on the device to determine the device type. The usual error handling applies within libinput and a device type label does not guarantee that the device is initialized by libinput. If a device fails to meet the requirements for a device type (e.g. a keyboard labelled as touchpad) the device will not be available through libinput.
Only one device type should be set per device at a type, though libinput can handle some combinations for historical reasons.
Below is an example udev rule to remove an ID_INPUT_TOUCHPAD setting and change it into an ID_INPUT_TABLET setting. This rule would apply for a device with the vendor/model ID of 012a/034b.
ACTION=="add|change", KERNEL=="event[0-9]*", ENV{ID_VENDOR_ID}=="012a", \
ENV{ID_MODEL_ID}=="034b", ENV{ID_INPUT_TOUCHPAD}="", ENV{ID_INPUT_TABLET}="1"