#ifdef USE_UTMPX
# include <utmpx.h>
#endif
+#ifndef DONT_USE_X11
+# include <pthread.h>
+# include <X11/Xlib.h>
+#endif
static void sig_handler(int signal) {
pass_buffer_to_program(buffer, (size_t)r, argv);
}
}
+#ifndef DONT_USE_X11
+static void *x11_event_loop_thread(void *unused) {
+ Display *display;
+ XEvent event;
+
+ (void)unused;
+
+ pthread_detach(pthread_self());
+
+ display = XOpenDisplay(NULL);
+ if (!display) {
+ fprintf(stderr, "failed to connect to X server\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Do nothing. We just want to die if the X11 session is closed. */
+ while (1) {
+ XNextEvent(display, &event);
+ }
+}
+#endif
static void usage(const char *argv0) {
fprintf(stderr, "usage: %s <cmd args..>\n", argv0);
exit(EXIT_FAILURE);
}
+#ifndef DONT_USE_X11
+ /* Start a thread which connects to X11. This way we die if the user logs
+ * out of its X11 session. */
+ {
+ pthread_t tid;
+
+ if (pthread_create(&tid, NULL, x11_event_loop_thread, NULL) != 0) {
+ perror("pthread_create");
+ exit(EXIT_FAILURE);
+ }
+ }
+#endif
+
/* Cleanup on signals. Necessary before login(). */
setup_signals();