Provided by: libinput-tools_1.15.5-1ubuntu0.3_amd64 bug

NAME

       libinput-record - record kernel events

SYNOPSIS

       libinput record [options] [/dev/input/event0 [/dev/input/event1 ...]]

DESCRIPTION

       The  libinput  record tool records kernel events from a device and prints them in a format that can later
       be replayed with the libinput replay(1) tool.  This tool needs to run as root to read from the device.

       The output of this tool is YAML, see FILE FORMAT for more details.  By default it prints to stdout unless
       the -o option is given.

       The events recorded are independent of libinput itself, updating or removing libinput will not change the
       event stream.

OPTIONS

       If one or more device nodes are given, this tool opens those device nodes.  Otherwise, a list of  devices
       is presented and the user can select the device to record. If unsure, run without any arguments.

       --help  Print help

       --all   Record  all  /dev/input/event*  devices  available  on  the system. This option should be used in
               exceptional cases only, the output file is almost always too noisy and  replaying  the  recording
               may  not  be possible.  This option requires --output-file and no device nodes may be provided on
               the commandline.

       --autorestart=s
               Terminate the current recording after s seconds of device inactivity. This option requires that a
               --output-file  is  specified.  The  output filename is used as prefix, suffixed with the date and
               time of the recording. The timeout must be greater than 0.

       -o filename.yml
       --output-file=filename.yml
               Specifies the output file to use. If --autorestart is given, the filename is used as prefix only.

       --show-keycodes
               Show keycodes as-is in the recording. By default, common keys are obfuscated and printed as KEY_A
               to avoid information leaks.

       --with-libinput
               Record  libinput  events  alongside  device  events.   THIS FEATURE IS EXPERIMENTAL.  See section
               RECORDING LIBINPUT EVENTS for more details.

RECORDING MULTIPLE DEVICES

       Sometimes it is necessary to record the events  from  multiple  devices  simultaneously,  e.g.   when  an
       interaction between a touchpad and a keyboard causes a bug. libinput record records multiple devices with
       an identical time offset, allowing for correct replay of the interaction.

       If multiple devices are recorded, an output filename must be provided.

       All devices to be recorded must be provided on the commandline, an example invocation is:

       libinput record -o tap-bug /dev/input/event3 /dev/input/event7

       Note that when recording multiple devices, only the  first  device  is  printed  immediately,  all  other
       devices and their events are printed on exit.

RECORDING LIBINPUT EVENTS

       When  the  --with-libinput  switch  is  provided,  libinput-record initializes a libinput context for the
       devices being recorded. Events from these contexts are printed alongside the evdev events.  THIS  FEATURE
       IS EXPERIMENTAL.

       The  primary  purpose of this feature is debugging and event analysis, no caller may rely on any specific
       format of the events.

       Note that while libinput and libinput-record see the same events from the device nodes, no guarantee  can
       be  given about the correct order of events. libinput events may come in earlier or later than the events
       from the device nodes and for some devices,  libinput  may  internally  alter  the  event  stream  before
       processing.

       Note that the libinput context created by libinput-record does not affect the running desktop session and
       does not (can not!) copy any configuration options from that session.

FILE FORMAT

       The output file format is in YAML and intended to be both human-readable and machine-parseable. Below  is
       a short example YAML file, all keys are detailed further below.

       Any  parsers  must ignore keys not specified in the file format description.  The version number field is
       only used for backwards-incompatible changes.

       version: 1
       ndevices: 2
       libinput:
         version: 1.10.0
       system:
         os: "fedora:26"
         kernel: "4.13.9-200.fc26.x86_64"
         dmi: "dmi:bvnLENOVO:bvrGJET72WW(2.22):bd02/21/2014:svnLENOVO:..."
       devices:
         - node: /dev/input/event9
           evdev:
             # Name: Synaptics TM2668-002
             # ID: bus 0x1d vendor 0x6cb product 00 version 00
             # Size in mm: 97x68
             # Supported Events:
             # Event type 0 (EV_SYN)

             #.. abbreviated for man page ...

             #
             name: Synaptics TM2668-002
             id: [29, 1739, 0, 0]
             codes:
               0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] # EV_SYN
               1: [272, 325, 328, 330, 333, 334, 335] # EV_KEY
               3: [0, 1, 24, 47, 48, 49, 52, 53, 54, 55, 57, 58] # EV_ABS
             absinfo:
               0: [0, 4089, 0, 0, 42]
               1: [0, 2811, 0, 0, 41]
               24: [0, 255, 0, 0, 0]
               47: [0, 4, 0, 0, 0]
               48: [0, 15, 0, 0, 0]
               49: [0, 15, 0, 0, 0]
               52: [0, 1, 0, 0, 0]
               53: [0, 4089, 0, 0, 42]
               54: [0, 2811, 0, 0, 41]
               55: [0, 2, 0, 0, 0]
               57: [0, 65535, 0, 0, 0]
               58: [0, 255, 0, 0, 0]
             properties: [0, 2, 4]
           hid: [12, 23, 34, 45, ...]
           udev:
             properties:
             - ID_INPUT_MOUSE=1
             - ID_INPUT=1
           quirks:
             - ModelAppleTouchpad=1
             - AttrSizeHint=32x32
           events:
             - evdev:
               - [  0,      0,   3,  57,  1420] # EV_ABS / ABS_MT_TRACKING_ID   1420
               - [  0,      0,   3,  53,  1218] # EV_ABS / ABS_MT_POSITION_X    1218
               - [  0,      0,   3,  54,  1922] # EV_ABS / ABS_MT_POSITION_Y    1922
               - [  0,      0,   3,  52,     0] # EV_ABS / ABS_MT_ORIENTATION      0
               - [  0,      0,   3,  58,    47] # EV_ABS / ABS_MT_PRESSURE        47
               - [  0,      0,   1, 330,     1] # EV_KEY / BTN_TOUCH               1
               - [  0,      0,   1, 325,     1] # EV_KEY / BTN_TOOL_FINGER         1
               - [  0,      0,   3,   0,  1218] # EV_ABS / ABS_X                1218
               - [  0,      0,   3,   1,  1922] # EV_ABS / ABS_Y                1922
               - [  0,      0,   3,  24,    47] # EV_ABS / ABS_PRESSURE           47
               - [  0,      0,   0,   0,     0] # ------------ SYN_REPORT (0) ------- +0ms
             - evdev:
               - [  0,  11879,   3,  53,  1330] # EV_ABS / ABS_MT_POSITION_X    1330
               - [  0,  11879,   3,  54,  1928] # EV_ABS / ABS_MT_POSITION_Y    1928
               - [  0,  11879,   3,  58,    46] # EV_ABS / ABS_MT_PRESSURE        46
               - [  0,  11879,   3,   0,  1330] # EV_ABS / ABS_X                1330
               - [  0,  11879,   3,   1,  1928] # EV_ABS / ABS_Y                1928
               - [  0,  11879,   3,  24,    46] # EV_ABS / ABS_PRESSURE           46
               - [  0,  11879,   0,   0,     0] # ------------ SYN_REPORT (0) ------- +0ms
         # second device (if any)
         - node: /dev/input/event9
           evdev: ...

       Top-level keys are listed below, see the respective subsection for details on each key.

       version: int
               The file format version. This version is only increased  for  backwards-incompatible  changes.  A
               parser must ignore unknown keys to be forwards-compatible.

       ndevices: int
               The number of device recordings in this file. Always 1 unless recorded with --multiple

       libinput: {...}
               A dictionary with libinput-specific information.

       system: {...}
               A dictionary with system information.

       devices: {...}
               A list of devices containing the description and and events of each device.

   libinput
       version: string
               libinput version

   system
       Information about the system

       os: string
               Distribution ID and version, see os-release(5)

       kernel: string
               Kernel version, see uname(1)

       dmi: string
               DMI modalias, see /sys/class/dmi/id/modalias

   devices
       Information about and events from the recorded device nodes

       node: string
               the device node recorded

       evdev   A dictionary with the evdev device information.

       hid     A list of integers representing the HID report descriptor bytes.

       udev    A dictionary with the udev device information.

       events  A list of dictionaries with the recorded events

   evdev
       name: string
               The device name

       id: [bustype, vendor, product, version]
               The data from the struct input_id, bustype, vendor, product, version.

       codes: {type: [a, b, c ], ...}
               All evdev types and codes as nested dictionary. The evdev type is the key, the codes are a list.

       absinfo: {code: [min, max, fuzz, flat, resolution], ...}
               An array of arrays with 6 decimal elements each, denoting the contents of a struct input_absinfo.
               The first element is the code (e.g. ABS_X) in decimal format.

       properties: [0, 1, ...]
               Array with all INPUT_PROP_FOO constants. May be an empty array.

   udev
       properties: list of strings
               A list of udev properties in the key=value format. This is not the complete  list  of  properties
               assigned  to  the  device but a subset that is relevant to libinput. These properties may include
               properties set on a parent device.

       quirks: list of strings
               A list of device quirks the key=value format.

   events
       A list of the recorded events. The list contains dictionaries Information about the events.  The  content
       is a list of dictionaries, with the string identifying the type of event sequence.

       { evdev: [ {"data": [sec, usec, type, code, value]}, ...] }
               Each  input_event dictionary contains the contents of a struct input_event in decimal format. The
               last item in the list is always the SYN_REPORT of this event frame. The next event frame starts a
               new evdev dictionary entry in the parent events list.

NOTES

       This  tool  records  events  from  the kernel and is independent of libinput. In other words, updating or
       otherwise changing libinput will not alter the output from this tool. libinput itself does not need to be
       in use to record events.

LIBINPUT

       Part of the libinput(1) suite

                                                                                              libinput-record(1)