evemu

evemu records and replays device descriptions and events, making it possible to emulate input devices through the kernel's input system. Emulated devices are for most practical purposes indistinguishable from real devices.

Note: evemu cannot record events while another process has an EVIOCGRAB on the device. This is the case for the X.Org synaptics and wacom drivers, you must disable the devices or VT-switch away before running evemu-record to see events.

Getting evemu

Check your distribution's package list for the evemu package. If it is not present, you can get the source from

$> git clone git://git.freedesktop.org/git/evemu
$> cd evemu
$> ./autogen --prefix=/usr
$> make && sudo make install

For Red Hat Enterprise Linux 6 and compatible distributions, a yum repository and the packages are available.

Running evemu

evemu provides multiple binaries for recording and replaying devices:

evemu-describe /dev/input/event0 > mydevice.desc

Prints a description of the device specified into mydevice.desc.

evemu-record /dev/input/event0 > mydevice.events

Prints the list of events from the device into mydevice.events until terminated by Ctrl + C.

evemu-device mydevice.desc

Creates a virtual input device based on the description created by evemu-describe and prints the device node.

evemu-play /dev/input/event12 < mydevice.events

Sends the events in mydevice.events through the given device node, thus replaying them. mydevice.events must be generated by evemu-record

As of evemu 1.1.0, you only need to run evemu-describe if you're not planning to record events. evemu-record includes a device description, so only that one file is needed.

Grabbed devices

evemu-record cannot see events while another process has an EVIOCGRAB on the device. This is the case for the X.Org synaptics and wacom drivers, you must disable the devices or VT-switch away before running evemu to see events. Devices can be disabled with

xinput set-prop "my device name" "Device Enabled" 0 

If you need the device enabled to verify that the bug is indeed triggered, use the following xorg.conf.d snippet:

$> cat /etc/X11/xorg.conf.d/99-synaptics-dontgrab.conf
Section "InputClass"
    Identifier "Don't grab synaptics"
    MatchDriver "synaptics"
    Option "GrabEventDevice" "off"
EndSection

Once saved, restart your server and evemu can now record while the synaptics is running.

Submitting useful evemu recordings

  • Find out the right device file by checking /proc/bus/input/devices. The HANDLERS line tells you which event device to record. e.g. H: Handlers=kbd event2 means you need to record /dev/input/event2.
  • Pipe the evemu-describe and evemu-record information into a file.
  • Verify that both files contain data, a 0-byte file usually indicates the device is grabbed.
  • When reproducing the event sequence that triggered the bug, try to reproduce only the event sequence that triggered the bug, no unrelated events. Keep in mind that event sequences are are raw device data. If specific pointer positioning on the target host is required, this must be noted separately in the bug report.
  • Attach both files separately, do not zip them as a tarball https://wiki.ubuntu.com/Multitouch/Testing/Evemu has further information and instructions on how to use evemu.

Development and discussion

evemu development is discussed at the input-tools@lists.freedesktop.org mailing list. Please submit patches in git-format, signed-off by you (and the author of the patch where applicable). Use a subject prefix of "PATCH evemu", which can be configured in your git repository by running

git config --add format.subjectprefix "PATCH evemu"

Reporting bugs

File a bug in the freedesktop bugzilla at https://bugs.freedesktop.org/enter_bug.cgi?product=evemu