Skip to content
Snippets Groups Projects

LibInputSynth

Synthesize keyboard and mouse input on X11 and Wayland with various backends.

Requirements

Backends (all optional):

  • xdotool
  • libxi

Run the tests

Run all tests

$ ninja -C build test

Usage

  • Include the main header #include <inputsynth.h>
  • Link to the main .so file libinputsynth-0.8.so

This library contains a pkgconfig file for libinputsynth.

See the examples for creating an instance and synthesizing input.

Usage in development

libinputsynth loads backend libraries with the system's library search method.

If the build directory of the library is in ./build, running an example such that it loads a backend from the build directory rather than e.g. /usr/lib/, use LD_LIBRARY_PATH like this

LD_LIBRAY_PATH=$PWD/build/src ./build/examples/inputsynth -b xdo

Input relative to the entire desktop:

// the chosen backend will be dynamically loaded
InputSynth *input = INPUT_SYNTH (input_synth_new (InputsynthBackend_XDO));

// the rest of the code is the same for all backends

input_synth_move_cursor (input, 100, 100);

/* Right click (button 3) press and release */
input_synth_click (input, 100, 100, 3, TRUE);
usleep (5000);
input_synth_click (input, 100, 100, 3, FALSE);

input_synth_char (input, 'h');
input_synth_char (input, 'i');

g_object_unref (input);

Install

sudo ninja -C build install

Running without installing

Set the environment variable LIBINPUTSYNTH_PLUGINDIR to the path where libinputsynth_*.so was built, for example:

LIBINPUTSYNTH_PLUGINDIR=~/libinputsynth/build/src build/examples/inputsynth -b xdo

Code of Conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

We follow the standard freedesktop.org code of conduct, available at https://www.freedesktop.org/wiki/CodeOfConduct/, which is based on the Contributor Covenant.

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting: