From 86bc9eeecf5338de285139496aa1fca1965fbbf0 Mon Sep 17 00:00:00 2001 From: James Bunton Date: Sat, 9 May 2020 11:25:02 +1000 Subject: [PATCH 1/2] Initial checkin --- .gitignore | 2 ++ Makefile | 8 ++++++++ README.md | 5 +++++ mouse-wiggle.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 mouse-wiggle.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e18fac --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +mouse-wiggle +*.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6d1096b --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +CFLAGS += -Wall -Wextra `pkg-config --cflags libevdev` +LDLIBS += `pkg-config --libs libevdev` + +mouse-wiggle: mouse-wiggle.o + +.PHONY: clean +clean: + rm -f mouse-wiggle *.o diff --git a/README.md b/README.md new file mode 100644 index 0000000..102a5c7 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# mouse-wiggle + +Wiggles the mouse on Linux using `/dev/uinput`. + +In some applications this will cause the mouse to appear. In others it will make it disappear. diff --git a/mouse-wiggle.c b/mouse-wiggle.c new file mode 100644 index 0000000..de5c543 --- /dev/null +++ b/mouse-wiggle.c @@ -0,0 +1,47 @@ +#include +#include +#include + +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; +} -- 2.39.2 From eb264f84a188a9c3db82e1e2173ecb310aaf81e9 Mon Sep 17 00:00:00 2001 From: James Bunton Date: Tue, 30 Jan 2024 13:10:46 +1100 Subject: [PATCH 2/2] systemd unit --- mouse-wiggle.service | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 mouse-wiggle.service diff --git a/mouse-wiggle.service b/mouse-wiggle.service new file mode 100644 index 0000000..6b0350e --- /dev/null +++ b/mouse-wiggle.service @@ -0,0 +1,9 @@ +[Unit] +Description=Mouse wiggle every time MythTV starts playback + +[Service] +ExecStart=/bin/bash -c 'journalctl -t mythfrontend -t mythfrontend.real -f | grep --line-buffered "Entering main playback loop" | while read line; do echo mouse-wiggle; /root/mouse-wiggle/mouse-wiggle; done' +Restart=always + +[Install] +WantedBy=multi-user.target -- 2.39.2