2015-07-16 10:56:55 +10:00
|
|
|
/**
|
|
|
|
|
@page tools Helper tools
|
|
|
|
|
|
2018-06-04 09:20:15 +10:00
|
|
|
libinput provides a `libinput` tool to query state and events. This tool
|
|
|
|
|
takes a subcommand as argument, similar to the **git** command. A full
|
|
|
|
|
explanation of the various commands available in the libinput tool is
|
|
|
|
|
available in the **libinput(1)** man page.
|
|
|
|
|
|
|
|
|
|
The most common tools used are:
|
|
|
|
|
- `libinput list-devices`: to list locally available devices, see @ref
|
|
|
|
|
libinput-list-devices "here"
|
|
|
|
|
- `libinput debug-events`: to monitor and debug events, see @ref
|
|
|
|
|
libinput-debug-events "here"
|
|
|
|
|
- `libinput debug-gui`: to visualize events, see @ref libinput-debug-gui
|
|
|
|
|
"here"
|
|
|
|
|
- `libinput record`: to record an event sequence for replaying, see @ref
|
|
|
|
|
libinput-record "here"
|
|
|
|
|
- `libinput measure`: measure properties on a kernel device, see @ref
|
|
|
|
|
libinput-measure "here"
|
|
|
|
|
|
|
|
|
|
Most the tools must be run as root to have access to the kernel's @c
|
|
|
|
|
/dev/input/event* device files.
|
2015-07-16 10:56:55 +10:00
|
|
|
|
2017-05-24 11:12:28 +10:00
|
|
|
@section libinput-list-devices libinput list-devices
|
2015-07-16 10:56:55 +10:00
|
|
|
|
2017-05-24 11:12:28 +10:00
|
|
|
The `libinput list-devices` command shows information about devices
|
|
|
|
|
recognized by libinput and can help identifying why a device behaves
|
|
|
|
|
different than expected. For example, if a device does not show up in the
|
|
|
|
|
output, it is not a supported input device.
|
2015-07-16 10:56:55 +10:00
|
|
|
|
2018-06-04 09:20:15 +10:00
|
|
|
@note This tool does **not** show your desktop's configuration, just the
|
|
|
|
|
libinput built-in defaults.
|
|
|
|
|
|
2015-07-16 10:56:55 +10:00
|
|
|
@verbatim
|
2017-05-24 11:12:28 +10:00
|
|
|
$ sudo libinput list-devices
|
2015-07-16 10:56:55 +10:00
|
|
|
[...]
|
|
|
|
|
Device: SynPS/2 Synaptics TouchPad
|
|
|
|
|
Kernel: /dev/input/event4
|
|
|
|
|
Group: 9
|
|
|
|
|
Seat: seat0, default
|
|
|
|
|
Size: 97.33x66.86mm
|
|
|
|
|
Capabilities: pointer
|
|
|
|
|
Tap-to-click: disabled
|
|
|
|
|
Tap drag lock: disabled
|
|
|
|
|
Left-handed: disabled
|
|
|
|
|
Nat.scrolling: disabled
|
|
|
|
|
Middle emulation: n/a
|
|
|
|
|
Calibration: n/a
|
|
|
|
|
Scroll methods: *two-finger
|
|
|
|
|
Click methods: *button-areas clickfinger
|
|
|
|
|
[...]
|
|
|
|
|
@endverbatim
|
|
|
|
|
|
|
|
|
|
The above listing shows example output for a touchpad. The
|
2017-05-24 11:12:28 +10:00
|
|
|
`libinput list-devices` command lists general information about the device
|
|
|
|
|
(the kernel event node) but also the configuration options. If an option is
|
2015-07-16 10:56:55 +10:00
|
|
|
"n/a" it does not exist on this device. Otherwise, the tool will show the
|
|
|
|
|
default configuration for this device, for options that have more than a
|
|
|
|
|
binary state all available options are listed, with the default one prefixed
|
|
|
|
|
with an asterisk (*). In the example above, the default click method is
|
|
|
|
|
button-areas but clickinger is available.
|
|
|
|
|
|
|
|
|
|
@note This tool is intended to be human-readable and may change its output
|
|
|
|
|
at any time.
|
|
|
|
|
|
2017-05-24 11:12:28 +10:00
|
|
|
@section libinput-debug-events libinput debug-events
|
|
|
|
|
The `libinput debug-events` command prints events from devices and can help
|
|
|
|
|
to identify why a device behaves different than expected.
|
2015-07-16 10:56:55 +10:00
|
|
|
|
|
|
|
|
@verbatim
|
2017-05-24 11:12:28 +10:00
|
|
|
$ sudo libinput debug-events --enable-tapping --set-click-method=clickfinger
|
2015-07-16 10:56:55 +10:00
|
|
|
@endverbatim
|
|
|
|
|
|
2018-06-04 09:20:15 +10:00
|
|
|
All configuration options (enable/disable tapping,
|
|
|
|
|
etc.) are available as commandline arguments. To reproduce the event
|
|
|
|
|
sequence as your desktop session sees it, ensure that all options are turned
|
|
|
|
|
on or off as required. See the **libinput-debug-events(1)** man page or the
|
|
|
|
|
`--help` output for information about the available options.
|
|
|
|
|
|
|
|
|
|
@note When submitting a bug report, always use the `--verbose` flag to get
|
|
|
|
|
additional information: `libinput debug-events --verbose <other options>`
|
|
|
|
|
|
|
|
|
|
An example output from this tool may look like the snippet below.
|
|
|
|
|
|
|
|
|
|
@verbatim
|
|
|
|
|
$ sudo libinput debug-events --enable-tapping --set-click-method=clickfinger
|
|
|
|
|
-event2 DEVICE_ADDED Power Button seat0 default group1 cap:k
|
|
|
|
|
-event5 DEVICE_ADDED Video Bus seat0 default group2 cap:k
|
|
|
|
|
-event0 DEVICE_ADDED Lid Switch seat0 default group3 cap:S
|
|
|
|
|
-event1 DEVICE_ADDED Sleep Button seat0 default group4 cap:k
|
|
|
|
|
-event4 DEVICE_ADDED HDA Intel HDMI HDMI/DP,pcm=3 seat0 default group5 cap:
|
|
|
|
|
-event11 DEVICE_ADDED HDA Intel HDMI HDMI/DP,pcm=7 seat0 default group6 cap:
|
|
|
|
|
-event12 DEVICE_ADDED HDA Intel HDMI HDMI/DP,pcm=8 seat0 default group7 cap:
|
|
|
|
|
-event13 DEVICE_ADDED HDA Intel HDMI HDMI/DP,pcm=9 seat0 default group8 cap:
|
|
|
|
|
-event14 DEVICE_ADDED HDA Intel HDMI HDMI/DP,pcm=10 seat0 default group9 cap:
|
|
|
|
|
-event19 DEVICE_ADDED Integrated Camera: Integrated C seat0 default group10 cap:k
|
|
|
|
|
-event15 DEVICE_ADDED HDA Intel PCH Dock Mic seat0 default group11 cap:
|
|
|
|
|
-event16 DEVICE_ADDED HDA Intel PCH Mic seat0 default group12 cap:
|
|
|
|
|
-event17 DEVICE_ADDED HDA Intel PCH Dock Headphone seat0 default group13 cap:
|
|
|
|
|
-event18 DEVICE_ADDED HDA Intel PCH Headphone seat0 default group14 cap:
|
|
|
|
|
-event6 DEVICE_ADDED ELAN Touchscreen seat0 default group15 cap:t size 305x172mm ntouches 10 calib
|
|
|
|
|
-event3 DEVICE_ADDED AT Translated Set 2 keyboard seat0 default group16 cap:k
|
|
|
|
|
-event20 DEVICE_ADDED SynPS/2 Synaptics TouchPad seat0 default group17 cap:pg size 100x76mm tap(dl off) left scroll-nat scroll-2fg-edge click-buttonareas-clickfinger dwt-on
|
|
|
|
|
-event21 DEVICE_ADDED TPPS/2 IBM TrackPoint seat0 default group18 cap:p left scroll-nat scroll-button
|
|
|
|
|
-event7 DEVICE_ADDED ThinkPad Extra Buttons seat0 default group19 cap:k
|
|
|
|
|
-event20 POINTER_MOTION +3.62s 2.72/ -0.93
|
|
|
|
|
event20 POINTER_MOTION +3.63s 1.80/ -1.42
|
|
|
|
|
event20 POINTER_MOTION +3.65s 6.16/ -2.28
|
|
|
|
|
event20 POINTER_MOTION +3.66s 6.42/ -1.99
|
|
|
|
|
event20 POINTER_MOTION +3.67s 8.99/ -1.42
|
|
|
|
|
event20 POINTER_MOTION +3.68s 11.30/ 0.00
|
|
|
|
|
event20 POINTER_MOTION +3.69s 21.32/ 1.42
|
|
|
|
|
@endverbatim
|
2015-07-16 10:56:55 +10:00
|
|
|
|
2017-05-24 11:12:28 +10:00
|
|
|
@section libinput-debug-gui libinput debug-gui
|
2015-07-16 10:56:55 +10:00
|
|
|
|
|
|
|
|
A simple GTK-based graphical tool that shows the behavior and location of
|
|
|
|
|
touch events, pointer motion, scroll axes and gestures. Since this tool
|
|
|
|
|
gathers data directly from libinput, it is thus suitable for
|
|
|
|
|
pointer-acceleration testing.
|
|
|
|
|
|
2018-06-04 09:20:15 +10:00
|
|
|
@note This tool does **not** use your desktop's configuration, just the
|
|
|
|
|
libinput built-in defaults.
|
|
|
|
|
|
2015-07-16 10:56:55 +10:00
|
|
|
@verbatim
|
2018-06-04 09:20:15 +10:00
|
|
|
$ sudo libinput debug-gui --enable-tapping
|
2015-07-16 10:56:55 +10:00
|
|
|
@endverbatim
|
|
|
|
|
|
2018-06-04 09:20:15 +10:00
|
|
|
As with @ref libinput-debug-events, all options must be specified on the
|
|
|
|
|
commandline to emulate the correct behavior.
|
|
|
|
|
See the **libinput-debug-gui(1)** man page or the `--help` output for information about
|
2017-05-24 11:12:28 +10:00
|
|
|
the available options.
|
2015-07-16 10:56:55 +10:00
|
|
|
|
2018-02-22 10:38:16 +10:00
|
|
|
@section libinput-record libinput record and libinput replay
|
|
|
|
|
|
|
|
|
|
The `libinput record` command records the **kernel** events from a specific
|
|
|
|
|
device node. The recorded sequence can be replayed with the `libinput
|
|
|
|
|
replay` command. This pair of tools is crucial to capturing bugs and
|
|
|
|
|
reproducing them on a developer's machine.
|
|
|
|
|
|
|
|
|
|
@note These tools are shipped with libinput, but the recorded events
|
|
|
|
|
are **kernel events** and independent of the libinput context. libinput does not
|
|
|
|
|
need to be running, it does not matter whether a user is running X.Org or
|
|
|
|
|
Wayland or even what version of libinput is currently running.
|
|
|
|
|
|
|
|
|
|
The use of the tools is straightforward, just run without arguments, piping
|
|
|
|
|
the output into a file:
|
|
|
|
|
@verbatim
|
2018-06-21 13:49:41 +10:00
|
|
|
$ sudo libinput record > touchpad.yml
|
2018-02-22 10:38:16 +10:00
|
|
|
Available devices:
|
|
|
|
|
/dev/input/event0: Lid Switch
|
|
|
|
|
/dev/input/event1: Sleep Button
|
|
|
|
|
/dev/input/event2: Power Button
|
|
|
|
|
/dev/input/event3: AT Translated Set 2 keyboard
|
|
|
|
|
/dev/input/event4: ThinkPad Extra Buttons
|
|
|
|
|
/dev/input/event5: ELAN Touchscreen
|
|
|
|
|
/dev/input/event6: Video Bus
|
|
|
|
|
/dev/input/event7: HDA Intel HDMI HDMI/DP,pcm=3
|
|
|
|
|
/dev/input/event8: HDA Intel HDMI HDMI/DP,pcm=7
|
|
|
|
|
/dev/input/event9: HDA Intel HDMI HDMI/DP,pcm=8
|
|
|
|
|
/dev/input/event10: HDA Intel HDMI HDMI/DP,pcm=9
|
|
|
|
|
/dev/input/event11: HDA Intel HDMI HDMI/DP,pcm=10
|
|
|
|
|
/dev/input/event12: HDA Intel PCH Dock Mic
|
|
|
|
|
/dev/input/event13: HDA Intel PCH Mic
|
|
|
|
|
/dev/input/event14: HDA Intel PCH Dock Headphone
|
|
|
|
|
/dev/input/event15: HDA Intel PCH Headphone
|
|
|
|
|
/dev/input/event16: Integrated Camera: Integrated C
|
|
|
|
|
/dev/input/event17: SynPS/2 Synaptics TouchPad
|
|
|
|
|
/dev/input/event18: TPPS/2 IBM TrackPoint
|
|
|
|
|
Select the device event number: 17
|
|
|
|
|
/dev/input/event17 recording to stdout
|
|
|
|
|
@endverbatim
|
|
|
|
|
|
|
|
|
|
Without arguments, `libinput record` displays the available devices and lets
|
|
|
|
|
the user select one. Supply the number (17 in this case for
|
2018-03-01 12:19:44 +10:00
|
|
|
`/dev/input/event17`) and the tool will print the device information and
|
|
|
|
|
events to the file it is redirected to. More arguments are available, see
|
2018-06-04 09:20:15 +10:00
|
|
|
the **libinput-record(1)** man page.
|
2018-02-22 10:38:16 +10:00
|
|
|
|
|
|
|
|
Reproduce the bug, ctrl+c and attach the output file to a bug report.
|
|
|
|
|
For data protection, `libinput record` obscures key codes by default, any
|
|
|
|
|
alphanumeric key shows up as letter "a".
|
|
|
|
|
|
|
|
|
|
@note When reproducing a bug that crashes libinput, run inside `screen` or
|
|
|
|
|
`tmux`.
|
|
|
|
|
|
|
|
|
|
The recording can be replayed with the `libinput replay` command:
|
|
|
|
|
@verbatim
|
2018-06-21 13:49:41 +10:00
|
|
|
$ sudo libinput replay touchpad.yml
|
2018-02-22 10:38:16 +10:00
|
|
|
SynPS/2 Synaptics TouchPad: /dev/input/event19
|
|
|
|
|
Hit enter to start replaying
|
|
|
|
|
@endverbatim
|
|
|
|
|
|
|
|
|
|
`libinput replay` creates a new virtual device based on the description in
|
|
|
|
|
the log file. Hitting enter replays the event sequence once and the tool
|
|
|
|
|
stops once all events have been replayed. Hitting enter again replays the
|
|
|
|
|
sequence again, Ctrl+C stops it and removes the virtual device.
|
|
|
|
|
|
|
|
|
|
Users are advised to always replay a recorded event sequence to ensure they
|
|
|
|
|
have captured the bug.
|
|
|
|
|
|
2018-06-04 09:20:15 +10:00
|
|
|
More arguments are available, see the **libinput-record(1)** and
|
|
|
|
|
**libinput-replay(1)** man pages.
|
2018-02-22 10:38:16 +10:00
|
|
|
|
|
|
|
|
@subsection libinput-record-multiple Recording multiple devices at once
|
|
|
|
|
|
|
|
|
|
In some cases, an interaction between multiple devices is the cause for a
|
|
|
|
|
specific bug. For example, a touchpad may not work in response to keyboard
|
|
|
|
|
events. To accurately reproduce this sequence, the timing between multiple
|
|
|
|
|
devices must be correct and we need to record the events in one go.
|
|
|
|
|
|
|
|
|
|
`libinput record` has a `--multiple` argument to record multiple devices at
|
|
|
|
|
once. Unlike the normal invocation, this one requires a number of arguments:
|
|
|
|
|
|
|
|
|
|
@verbatim
|
2018-06-21 13:49:41 +10:00
|
|
|
$ sudo libinput record --multiple --output-file=touchpad-bug.yml /dev/input/event17 /dev/input/event3
|
|
|
|
|
recording to 'touchpad-bug.yml'
|
2018-02-22 10:38:16 +10:00
|
|
|
@endverbatim
|
|
|
|
|
|
|
|
|
|
As seen above, a user must specify `--multiple` and the `--output-file`.
|
|
|
|
|
Finally, all devices to be recorded must be specified on the commandline as
|
|
|
|
|
well.
|
|
|
|
|
|
|
|
|
|
Replaying events is the same as for a single recording:
|
|
|
|
|
@verbatim
|
2018-06-21 13:49:41 +10:00
|
|
|
$ sudo libinput replay touchpad-bug.yml
|
2018-02-22 10:38:16 +10:00
|
|
|
@endverbatim
|
|
|
|
|
|
2018-06-04 09:20:15 +10:00
|
|
|
@subsection libinput-measure Measuring device properties with libinput measure
|
|
|
|
|
|
|
|
|
|
The `libinput measure` tool is a multiplexer for various sub-tools that can
|
|
|
|
|
measure specific properties on the device. These tools generally measure one
|
|
|
|
|
thing and one thing only and their usage is highly specific to the tool.
|
|
|
|
|
Please see the **libinput-measure(1)** man page for information about what
|
|
|
|
|
tools are available and the man page for each respective tool.
|
|
|
|
|
|
2015-07-16 10:56:55 +10:00
|
|
|
*/
|