This explains the heisenbugs when running the test suite. libevdev gives us the syspath to the /sys/.../input123 node, not the one for the event node. The device node path is created based on the sysfs tree, so there's a window where the device node may not exist yet but we already returned the device node path. In litest, we're using a udev monitor to wait until the device is ready for us, but the path interface only takes a device node path. So what happens is: * libevdev gives us a syspath for the input node and a device path * the monitor receives the input node udev device and matches the syspath * we pass that up to the caller litest_add_device_with_overrides() which opens the device node and adds it to libinput * the path interface creates a udev device from the device node, which still points to the old device node. Things fail because we don't have the device we expect or it doesn't send events and eventually times out [1]. The errors triggered by this are either odd udev property mismatches or timeouts because events are never processed. This race is fixed by simply constructing the actual device node path we expect from the udev device and waiting for the right device. [1] We rely on the caller to notify us when to remove the device and thus silently ignore ENODEV. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> |
||
|---|---|---|
| doc | ||
| include/linux | ||
| m4 | ||
| src | ||
| test | ||
| tools | ||
| udev | ||
| .gitignore | ||
| .vimdir | ||
| autogen.sh | ||
| CODING_STYLE | ||
| configure.ac | ||
| COPYING | ||
| Makefile.am | ||
| meson.build | ||
| meson_options.txt | ||
| README.md | ||
libinput
libinput is a library that handles input devices for display servers and other applications that need to directly deal with input devices.
It provides device detection, device handling, input device event processing and abstraction so minimize the amount of custom input code the user of libinput need to provide the common set of functionality that users expect. Input event processing includes scaling touch coordinates, generating pointer events from touchpads, pointer acceleration, etc.
libinput originates from weston, the Wayland reference compositor.
Architecture
libinput is not used directly by applications, rather it is used by the xf86-input-libinput X.Org driver or wayland compositors. The typical software stack for a system running Wayland is:
@dotfile libinput-stack-wayland.gv
Where the Wayland compositor may be Weston, mutter, KWin, etc. Note that Wayland encourages the use of toolkits, so the Wayland client (your application) does not usually talk directly to the compositor but rather employs a toolkit (e.g. GTK) to do so.
The simplified software stack for a system running X.Org is:
@dotfile libinput-stack-xorg.gv
Again, on a modern system the application does not usually talk directly to the X server using Xlib but rather employs a toolkit to do so.
Source code
The source code of libinput can be found at: http://cgit.freedesktop.org/wayland/libinput
For a list of current and past releases visit: http://www.freedesktop.org/wiki/Software/libinput/
Build instructions: http://wayland.freedesktop.org/libinput/doc/latest/building_libinput.html
Reporting Bugs
Bugs can be filed in the libinput component of Wayland: https://bugs.freedesktop.org/enter_bug.cgi?product=Wayland&component=libinput
Where possible, please provide an evemu recording of the input device and/or the event sequence in question.
See @ref reporting_bugs for more info.
Documentation
Developer API documentation: http://wayland.freedesktop.org/libinput/doc/latest/modules.html
High-level documentation about libinput's features: http://wayland.freedesktop.org/libinput/doc/latest/pages.html
Examples of how to use libinput are the debugging tools in the libinput repository. Developers are encouraged to look at those tools for a real-world (yet simple) example on how to use libinput.
- A commandline debugging tool: https://cgit.freedesktop.org/wayland/libinput/tree/tools/event-debug.c
- A GTK application that draws cursor/touch/tablet positions: https://cgit.freedesktop.org/wayland/libinput/tree/tools/event-gui.c
Build instructions: http://wayland.freedesktop.org/libinput/doc/latest/building_libinput.html
License
libinput is licensed under the MIT license.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: [...]
See the COPYING file for the full license information.