Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
libinput-record(1)	     General Commands Manual	      libinput-record(1)

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 de-
     fault it prints to stdout unless an output file is provided.  For	example,
     these are valid invocations:

     libinput record /dev/input/event3 touchpad.yml

     libinput record recording.yml

     libinput record --all all-devices.yml

     libinput record /dev/input/event3 /dev/input/event4 tp-and-keyboard.yml

     The  events recorded are independent of libinput itself, updating or remov-
     ing 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 de-
     vice 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 pos-
	     sible.   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	inactiv-
	     ity.  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.  Where --output-file is not  given
	     and the first or last argument is not an input device, the first or
	     last argument will be the output file.

     --grab  Exclusively  grab all opened devices. This will prevent events from
	     being delivered to the host system.

     --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  de-
	     tails.

     --with-hidraw
	     Record  hidraw  events alongside device events.  DO NOT TYPE SENSI-
	     TIVE DATA.  See RECORDING HID REPORTS for more details.

RECORDING MULTIPLE DEVICES
     Sometimes it is necessary to record the events from multiple devices simul-
     taneously, 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 commandline option is given, libinput-record ini-
     tializes a libinput context for the devices  being  recorded.  Events  from
     these contexts are printed alongside the evdev events.  THIS FEATURE IS EX-
     PERIMENTAL.

     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  de-
     vice  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.

RECORDING HID REPORTS
     When  the	--with-hidraw  commandline  option  is	given,	 libinput-record
     searches  for the hidraw node(s) of the given devices and prints any incom-
     ing HID reports from those devices.

     HID reports are not obfuscated and a sufficiently	motivated  person  could
     recover  the key strokes from the logs. Do not type passwords while record-
     ing HID reports.

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 de-
     tailed 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:
	   - hid:
	      time: [ 0, 0]
	   hidraw0: [1, 2, 3, 4]
	   - 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 back-
	     wards-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, ver-
	     sion.

     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 con-
	     tents 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 proper-
	     ties 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: [ [sec, usec, type, code, value], ...] }
	     Each evdev dictionary contains the contents of a struct input_event
	     in decimal format. The last item in the list is always the  SYN_RE-
	     PORT  of  this event frame. The next event frame starts a new evdev
	     dictionary entry in the parent events list.

     { hid: hidrawX : [ 12, 34, 56 ], ...] }
	     The hid dictionary contains the hid reports in decimal format, with
	     the hidraw node as key. The special key time  denotes  the  current
	     time when the report was read from the kernel.

     Note  that the kernel does not provide timestamps for hidraw events and the
     timestamps provided are from clock_gettime(3). They may be greater  than  a
     subsequent evdev event's timestamp.

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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=libinput-record&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help