The libei project provides several C libraries that abstract the protocol and provide an easy-to-use C API to interact with the respective EI counterpart.
libei - the client library
This library is intended for use by EI clients. This library should be used by processes that need to emulate devices or processes that need to receive input events from logical devices.
The C library API documentation for libei is here.
libeis - the server library
This library is intended for use by EIS implementations. This library should be used by processes that have control over input devices, e.g. Wayland compositors.
The C library API documentation for libeis is here
liboeffis - DBus helper library
This library is a helper library for applications that do not want to or cannot interact with the XDG RemoteDesktop DBus portal directly.
- connect to the DBus session bus and the
- Start a
org.freedesktop.portal.RemoteDesktopsession, select the devices and invoke
- Provide the returned file descriptor to the caller. This fd can be used by libei to initialize a context.
- Close everything in case of error or disconnection
The below diagram shows the simplified process:
sequenceDiagram participant libei participant liboeffis participant portal as XDG Desktop Portal participant eis as EIS implementation liboeffis ->> portal: CreateSession portal ->> eis: CreateSession eis -->> portal: fd portal -->> liboeffis: fd liboeffis -->> libei: take fd for libei context libei ->> eis: setup connection libei ->> eis: emulate events
liboeffis is intentionally kept simple, any more complex needs should be handled by an application talking to DBus directly.
A demo tool is available in the libei repository.
The C library API documentation for liboeffis is here.