/*
* 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);
}