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

FreeBSD Manual Pages

  
 
  

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
       default it prints to stdout unless an output file is provided. For  ex-
       ample, 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 re-
       moving 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  se-
       lect 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  out-
	       put 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 inac-
	       tivity. 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  de-
	       vice, 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 details.

       --with-hidraw
	       Record hidraw events alongside device events.  DO NOT TYPE SEN-
	       SITIVE DATA.  See RECORDING HID REPORTS 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 key-
       board 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 ex-
       ample 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
       initializes  a  libinput	context	for the	devices	being recorded.	Events
       from these contexts are printed alongside the evdev events.  THIS  FEA-
       TURE 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 al-
       ter the event stream before processing.

       Note that the libinput context created by libinput-record does not  af-
       fect  the running desktop session and does not (can not!) copy any con-
       figuration 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 in-
       coming 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 recording HID reports.

FILE FORMAT
       The  output  file format	is in YAML and intended	to be both human-read-
       able 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 descrip-
       tion.  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  de-
       tails 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  in-
	       clude 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 Informa-
       tion 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 in-
	       put_event in decimal format. The	last item in the list  is  al-
	       ways  the  SYN_REPORT 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	libin-
       put.  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+14.3.quarterly>

home | help