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).
- C89 compiler
- libutempter or utmpx.h (utmpx.x requires a setgid utmp binary)
+- optional: X11 headers and library, necessary for X11 support
+
INSTALLATION
------------
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
----
#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;
/* 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);
}
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();