diff -ruN a/src/server.c b/src/server.c
--- a/src/server.c	2025-05-02 11:41:57.000000000 -0400
+++ b/src/server.c	2025-07-11 14:53:03.269975308 -0400
@@ -58,6 +58,7 @@
 
 static struct wlr_compositor *compositor;
 static struct wl_event_source *sighup_source;
+static struct wl_event_source *sigusr1_source;
 static struct wl_event_source *sigint_source;
 static struct wl_event_source *sigterm_source;
 static struct wl_event_source *sigchld_source;
@@ -102,6 +103,15 @@
 }
 
 static int
+handle_sigusr1(int signal, void *data)
+{
+	struct server *server = data;
+
+	cursor_set_visible(&server->seat, false);
+	return 0;
+}
+
+static int
 handle_sigterm(int signal, void *data)
 {
 	struct wl_display *display = data;
@@ -436,6 +446,8 @@
 	event_loop = wl_display_get_event_loop(server->wl_display);
 	sighup_source = wl_event_loop_add_signal(
 		event_loop, SIGHUP, handle_sighup, server);
+	sigusr1_source = wl_event_loop_add_signal(
+		event_loop, SIGUSR1, handle_sigusr1, server);
 	sigint_source = wl_event_loop_add_signal(
 		event_loop, SIGINT, handle_sigterm, server->wl_display);
 	sigterm_source = wl_event_loop_add_signal(
@@ -751,6 +763,9 @@
 	if (sighup_source) {
 		wl_event_source_remove(sighup_source);
 	}
+	if (sigusr1_source) {
+		wl_event_source_remove(sigusr1_source);
+	}
 	wl_display_destroy_clients(server->wl_display);
 
 	seat_finish(server);
