diff options
-rw-r--r-- | xtrlock.c | 33 | ||||
-rw-r--r-- | xtrlock.man | 6 |
2 files changed, 31 insertions, 8 deletions
@@ -81,19 +81,27 @@ int main(int argc, char **argv){ Cursor cursor; Pixmap csr_source,csr_mask; XColor csr_fg, csr_bg, dummy, black; - int ret, screen, blank = 0; + int ret, screen, blank = 0, fork_after = 0; #ifdef SHADOW_PWD struct spwd *sp; #endif struct timeval tv; int tvt, gs; - if ((argc == 2) && (strcmp(argv[1], "-b") == 0)) { - blank = 1; - } else if (argc > 1) { - fprintf(stderr,"xtrlock (version %s); usage: xtrlock [-b]\n", - program_version); - exit(1); + while (argc > 1) { + if ((strcmp(argv[1], "-b") == 0)) { + blank = 1; + argc--; + argv++; + } else if ((strcmp(argv[1], "-f") == 0)) { + fork_after = 1; + argc--; + argv++; + } else { + fprintf(stderr,"xtrlock (version %s); usage: xtrlock [-b] [-f]\n", + program_version); + exit(1); + } } errno=0; pw= getpwuid(getuid()); @@ -208,6 +216,17 @@ int main(int argc, char **argv){ exit(1); } + if (fork_after) { + pid_t pid = fork(); + if (pid < 0) { + fprintf(stderr,"xtrlock (version %s): cannot fork: %s\n", + program_version, strerror(errno)); + exit(1); + } else if (pid > 0) { + exit(0); + } + } + for (;;) { XNextEvent(display,&ev); switch (ev.type) { diff --git a/xtrlock.man b/xtrlock.man index 7a869a6..e211bd5 100644 --- a/xtrlock.man +++ b/xtrlock.man @@ -2,7 +2,7 @@ .SH NAME xtrlock \- Lock X display until password supplied, leaving windows visible .SH SYNOPSIS -.B xtrlock [-b] +.B xtrlock [-b] [-f] .SH DESCRIPTION .B xtrlock locks the X server till the user enters their password at the keyboard. @@ -30,6 +30,10 @@ touching a key (Shift, for example) or the mouse. .TP \fB\-b\fR blank the screen as well as displaying the padlock +.TP +\fB\-f\fR +fork after locking is complete, and return success from the parent +process .SH X RESOURCES, CONFIGURATION None. .SH BUGS |