Compatibility and Behavior across kernel versions

This page describes libevdev's behavior when the build-time kernel and the run-time kernel differ in their feature set.

With the exception of event names, libevdev defines features that may be missing on older kernels and building on such kernels will not disable features. Running libevdev on a kernel that is missing some feature will change libevdev's behavior. In most cases, the new behavior should be obvious, but it is spelled out below in detail.

# Minimum requirements

libevdev requires a 2.6.36 kernel as minimum. Specifically, it requires kernel-support for `ABS_MT_SLOT`.

# Event and input property names

Event names and input property names are defined at build-time by the linux/input.h shipped with libevdev. The list of event names is compiled at build-time, any events not defined at build time will not resolve. Specifically, libevdev_event_code_get_name() for an undefined type or code will always return `NULL`. Likewise, libevdev_property_get_name() will return NULL for properties undefined at build-time.

# Input properties

If the kernel does not support input properties, specifically the `EVIOCGPROPS` ioctl, libevdev does not expose input properties to the caller. Specifically, libevdev_has_property() will always return 0 unless the property has been manually set with libevdev_enable_property().

This also applies to the libevdev-uinput code. If uinput does not honor `UI_SET_PROPBIT`, libevdev will continue without setting the properties on the device.

# MT slot behavior

If the kernel does not support the `EVIOCGMTSLOTS` ioctl, libevdev assumes all values in all slots are 0 and continues without an error.

# SYN_DROPPED behavior

A kernel without `SYN_DROPPED` won't send such an event. libevdev_next_event() will never require the switch to sync mode.