Merge pull request #2226 from emersion/swaylock-daemonize-after-lock

swaylock: daemonize after locking
This commit is contained in:
emersion 2018-07-08 22:57:06 +01:00 committed by GitHub
commit 6595d07ec7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 2 deletions

View File

@ -23,6 +23,7 @@ struct swaylock_args {
uint32_t color; uint32_t color;
enum background_mode mode; enum background_mode mode;
bool show_indicator; bool show_indicator;
bool daemonize;
}; };
struct swaylock_password { struct swaylock_password {

View File

@ -38,6 +38,7 @@ static void daemonize() {
exit(1); exit(1);
} }
if (fork() == 0) { if (fork() == 0) {
setsid();
close(fds[0]); close(fds[0]);
int devnull = open("/dev/null", O_RDWR); int devnull = open("/dev/null", O_RDWR);
dup2(STDOUT_FILENO, devnull); dup2(STDOUT_FILENO, devnull);
@ -406,7 +407,7 @@ int main(int argc, char **argv) {
" -v, --version Show the version number and quit.\n" " -v, --version Show the version number and quit.\n"
" -i, --image [<output>:]<path> Display the given image.\n" " -i, --image [<output>:]<path> Display the given image.\n"
" -u, --no-unlock-indicator Disable the unlock indicator.\n" " -u, --no-unlock-indicator Disable the unlock indicator.\n"
" -f, --daemonize Detach from the controlling terminal.\n"; " -f, --daemonize Detach from the controlling terminal after locking.\n";
state.args = (struct swaylock_args){ state.args = (struct swaylock_args){
.mode = BACKGROUND_MODE_SOLID_COLOR, .mode = BACKGROUND_MODE_SOLID_COLOR,
@ -454,7 +455,7 @@ int main(int argc, char **argv) {
state.args.show_indicator = false; state.args.show_indicator = false;
break; break;
case 'f': case 'f':
daemonize(); state.args.daemonize = true;
break; break;
default: default:
fprintf(stderr, "%s", usage); fprintf(stderr, "%s", usage);
@ -510,6 +511,11 @@ int main(int argc, char **argv) {
create_layer_surface(surface); create_layer_surface(surface);
} }
if (state.args.daemonize) {
wl_display_roundtrip(state.display);
daemonize();
}
state.run_display = true; state.run_display = true;
while (wl_display_dispatch(state.display) != -1 && state.run_display) { while (wl_display_dispatch(state.display) != -1 && state.run_display) {
// This space intentionally left blank // This space intentionally left blank

View File

@ -37,6 +37,9 @@ Locks your Wayland session.
*-u, --no-unlock-indicator* *-u, --no-unlock-indicator*
Disable the unlock indicator. Disable the unlock indicator.
*-f, --daemonize*
Detach from the controlling terminal after locking.
*-v, --version* *-v, --version*
Show the version number and quit. Show the version number and quit.