diff options
author | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2024-02-26 20:23:19 -0800 |
---|---|---|
committer | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2024-02-26 20:23:19 -0800 |
commit | 4c565d2020230ad3fdf603fde32b9892e56c16e1 (patch) | |
tree | 392fcb3d30532851f445a1ef68806869a5afa381 /slock.c | |
parent | a34d8fb4327bbb1afd92e7527c53fcaad547a495 (diff) | |
download | slock-4c565d2020230ad3fdf603fde32b9892e56c16e1.tar.gz slock-4c565d2020230ad3fdf603fde32b9892e56c16e1.tar.xz |
add ability to fork and print PID after locking
Diffstat (limited to 'slock.c')
-rw-r--r-- | slock.c | 31 |
1 files changed, 30 insertions, 1 deletions
@@ -10,6 +10,7 @@ #include <pwd.h> #include <stdarg.h> #include <stdlib.h> +#include <stdint.h> #include <stdio.h> #include <string.h> #include <unistd.h> @@ -300,7 +301,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) static void usage(void) { - die("usage: slock [-v] [cmd [arg ...]]\n"); + die("usage: slock [-f [-p]] [-v] [cmd [arg ...]]\n"); } int @@ -314,8 +315,19 @@ main(int argc, char **argv) { const char *hash; Display *dpy; int s, nlocks, nscreens; + int opt_fork, opt_pid; + pid_t pid; + + opt_fork = 0; + opt_pid = 0; ARGBEGIN { + case 'f': + opt_fork = 1; + break; + case 'p': + opt_pid = 1; + break; case 'v': puts("slock-"VERSION); return 0; @@ -323,6 +335,9 @@ main(int argc, char **argv) { usage(); } ARGEND + if (opt_pid && !opt_fork) + usage(); + /* validate drop-user and -group */ errno = 0; if (!(pwd = getpwnam(user))) @@ -374,6 +389,20 @@ main(int argc, char **argv) { if (nlocks != nscreens) return 1; + if (opt_fork) { + switch (pid = fork()) { + case -1: + die("slock: fork failed: %s\n", strerror(errno)); + case 0: + freopen("/dev/null", "w", stdout); + break; + default: + if (opt_pid) + printf("%ji\n", (intmax_t)pid); + exit(0); + } + } + /* run post-lock command */ if (argc > 0) { switch (fork()) { |