]> ruderich.org/simon Gitweb - wall-notify/wall-notify.git/commitdiff
use -X command line option to enable X11 support
authorSimon Ruderich <simon@ruderich.org>
Thu, 15 May 2014 16:56:15 +0000 (18:56 +0200)
committerSimon Ruderich <simon@ruderich.org>
Thu, 15 May 2014 16:56:15 +0000 (18:56 +0200)
README
src/wall-notify.c

diff --git a/README b/README
index f6eb3de5b1e95dc932158ab99bc58aa16ec511d5..783e59abc0684f2d84886e03d7bfba1e0c04254d 100644 (file)
--- a/README
+++ b/README
@@ -11,6 +11,9 @@ wall messages are either directly created by root with the `wall` command or
 sent by other programs like `reboot`, `shutdown` or other processes like NFS
 to warn users when the NFS server terminates.
 
+Optionally X11 can be used to automatically terminate wall-notify when the
+current X11 session terminates, i.e. when the user logs out. See below.
+
 wall-notify is licensed under GPL 3 (or later).
 
 
@@ -20,6 +23,8 @@ DEPENDENCIES
 - C89 compiler
 - libutempter or utmpx.h (utmpx.x requires a setgid utmp binary)
 
+- optional: X11 headers and library, necessary for X11 support
+
 
 INSTALLATION
 ------------
@@ -52,6 +57,14 @@ in the message. For a simple wrapper script which removes those, see
 The shell is not used when running the program.
 
 
+If X11 support is compiled in then the '-X' option can be used to terminate
+wall-notify automatically when the X session quits. This is useful when
+wall-notify is started in `.xinitrc` and should quit when the X session ends,
+i.e the user logs out:
+
+    ./src/wall-notify -X cat
+
+
 BUGS
 ----
 
index 292b71a1d9d026208db979be56cc5c03bdffb4d0..80ae552dfb353665fe54fc44defd2c4cb718352c 100644 (file)
@@ -359,12 +359,20 @@ static void *x11_event_loop_thread(void *unused) {
 #endif
 
 static void usage(const char *argv0) {
-    fprintf(stderr, "usage: %s <cmd args..>\n", argv0);
+    fprintf(stderr, "usage: %s [-X] <cmd args..>\n", argv0);
+    fprintf(stderr, "Pass wall messages to <cmd args..>.\n");
+    fprintf(stderr, "\n");
+    fprintf(stderr, "-X quit when the current X session terminates\n");
+#ifdef DONT_USE_X11
+    fprintf(stderr, "\n");
+    fprintf(stderr, "compiled without X11 support, -X disabled\n");
+#endif
     exit(EXIT_FAILURE);
 }
 
 
 int main(int argc, char **argv) {
+    int enable_x11;
     int ptm, pts;
     char *name;
     const char *argv0;
@@ -373,6 +381,19 @@ int main(int argc, char **argv) {
     /* Don't pass our argv[0] to the notification program. */
     argv++;
 
+    enable_x11 = 0;
+    if (argc > 1 && argv[0][0] == '-') {
+        if (!strcmp("-X", argv[0])) {
+            enable_x11 = 1;
+        } else {
+            if (strcmp("-h", argv[0])) {
+                fprintf(stderr, "%s: unknown option '%s'!\n\n", argv0, argv[0]);
+            }
+            usage(argv0);
+        }
+        argc--; /* for usage */
+    }
+
     if (argc < 2) {
         usage(argv0);
     }
@@ -400,18 +421,21 @@ int main(int argc, char **argv) {
         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. */
-    {
+    if (enable_x11) {
+#ifdef DONT_USE_X11
+        fprintf(stderr, "%s: option -X is disabled!\n\n", argv0);
+        usage(argv0);
+#else
         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();