+#include <stdio.h>
+#include <unistd.h>
+#include <libevdev/libevdev-uinput.h>
+
+int main() {
+ int err = 0;
+
+ struct libevdev *dev = libevdev_new();
+ libevdev_set_name(dev, "mouse-wiggle");
+ libevdev_enable_event_type(dev, EV_REL);
+ libevdev_enable_event_code(dev, EV_REL, REL_X, NULL);
+ libevdev_enable_event_code(dev, EV_REL, REL_Y, NULL);
+ libevdev_enable_event_type(dev, EV_KEY);
+ libevdev_enable_event_code(dev, EV_KEY, BTN_LEFT, NULL);
+ libevdev_enable_event_code(dev, EV_KEY, BTN_MIDDLE, NULL);
+ libevdev_enable_event_code(dev, EV_KEY, BTN_RIGHT, NULL);
+
+ struct libevdev_uinput *uidev;
+ err = libevdev_uinput_create_from_device(
+ dev,
+ LIBEVDEV_UINPUT_OPEN_MANAGED,
+ &uidev
+ );
+ if (err != 0) goto err;
+
+ sleep(1);
+
+ err = libevdev_uinput_write_event(uidev, EV_REL, REL_X, 1);
+ if (err != 0) goto err;
+ libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
+ if (err != 0) goto err;
+
+ sleep(1);
+
+ err = libevdev_uinput_write_event(uidev, EV_REL, REL_X, -1);
+ if (err != 0) goto err;
+ libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
+ if (err != 0) goto err;
+
+err:
+ if (err != 0) {
+ fprintf(stderr, "uinput error!\n");
+ return err;
+ }
+ libevdev_uinput_destroy(uidev);
+ return 0;
+}