/* * noblank.c: * a wrapper for (full screen) applications and/or games that * lack support for xscreensaver. deactivates every 60 seconds * by default, tunable with the NOBLANK_INTERVAL env variable. * * Compiling: * gcc noblank.c -o noblank * * Usage: * noblank quake3 +disconnect +set fs_game arena * noblank nwn * * Related: * http://www.jwz.org/xscreensaver/faq.html#dvd * * Mike Hokenson */ #include #include #include #include #include #include #include #include static int interval = 60; /* deactivate once a minute */ void sighandler(int sig) { switch (sig) { case SIGALRM: system("xscreensaver-command -deactivate > /dev/null"); alarm(interval); default: break; } } int main(int argc, char *argv[]) { char *args[argc - 1], *e; int i; if (argc < 2) { fprintf(stderr, "Usage: %s [ ]\n", argv[0]); exit(1); } if ((e = getenv("NOBLANK_INTERVAL")) && *e) { int n = atoi(e); if (n > 0) interval = n; } for (i = 1; i < argc; i++) args[i-1] = argv[i]; args[argc-1] = NULL; switch (fork()) { case 0: /* child */ if(execvp(args[0], args) == -1) { fprintf(stderr, "Failed to execute '%s': %s\n", args[0], strerror(errno)); _exit(1); } _exit(0); case -1: /* error */ fprintf(stderr, "Failed to create new process: %s\n", strerror(errno)); exit(1); default: /* parent */ break; } signal(SIGALRM, sighandler); alarm(interval); wait(NULL); exit(0); }