--- a/include/labwc.h
+++ b/include/labwc.h
@@ -162,6 +162,7 @@
 	struct wlr_compositor *compositor;
 
 	struct wl_event_source *sighup_source;
+	struct wl_event_source *sigusr1_source;
 	struct wl_event_source *sigint_source;
 	struct wl_event_source *sigterm_source;
 	struct wl_event_source *sigchld_source;
--- a/src/server.c
+++ b/src/server.c
@@ -119,6 +119,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;
@@ -440,6 +449,8 @@
 	/* Catch signals */
 	server->sighup_source = wl_event_loop_add_signal(
 		server->wl_event_loop, SIGHUP, handle_sighup, server);
+	server->sigusr1_source = wl_event_loop_add_signal(
+		server->wl_event_loop, SIGUSR1, handle_sigusr1, server);
 	server->sigint_source = wl_event_loop_add_signal(
 		server->wl_event_loop, SIGINT, handle_sigterm, server->wl_display);
 	server->sigterm_source = wl_event_loop_add_signal(
@@ -770,6 +781,7 @@
 	desktop_entry_finish(server);
 #endif
 	wl_event_source_remove(server->sighup_source);
+	wl_event_source_remove(server->sigusr1_source);
 	wl_event_source_remove(server->sigint_source);
 	wl_event_source_remove(server->sigterm_source);
 	wl_event_source_remove(server->sigchld_source);
