From 9a6f4bc0d96d3183033d187496a4651de02628eb Mon Sep 17 00:00:00 2001 From: Ian Fan Date: Mon, 7 Jan 2019 13:22:01 +0000 Subject: [PATCH] swayidle: add ability to wait for command to finish --- swayidle/main.c | 13 ++++++++++--- swayidle/swayidle.1.scd | 8 ++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/swayidle/main.c b/swayidle/main.c index 08a1ad575..d7e4b3d14 100644 --- a/swayidle/main.c +++ b/swayidle/main.c @@ -35,6 +35,7 @@ struct swayidle_state { struct wl_event_loop *event_loop; list_t *timeout_cmds; // struct swayidle_timeout_cmd * char *lock_cmd; + bool wait; } state; struct swayidle_timeout_cmd { @@ -54,7 +55,9 @@ static void cmd_exec(char *param) { wlr_log(WLR_DEBUG, "Cmd exec %s", param); pid_t pid = fork(); if (pid == 0) { - pid = fork(); + if (!state.wait) { + pid = fork(); + } if (pid == 0) { char *const cmd[] = { "sh", "-c", param, NULL, }; execvp(cmd[0], cmd); @@ -325,16 +328,20 @@ static int parse_args(int argc, char *argv[]) { bool debug = false; int c; - while ((c = getopt(argc, argv, "hd")) != -1) { + while ((c = getopt(argc, argv, "hdw")) != -1) { switch (c) { case 'd': debug = true; break; + case 'w': + state.wait = true; + break; case 'h': case '?': printf("Usage: %s [OPTIONS]\n", argv[0]); - printf(" -d\tdebug\n"); printf(" -h\tthis help menu\n"); + printf(" -d\tdebug\n"); + printf(" -w\twait for command to finish\n"); return 1; default: return 1; diff --git a/swayidle/swayidle.1.scd b/swayidle/swayidle.1.scd index 0e3b5c3ce..8a7c97408 100644 --- a/swayidle/swayidle.1.scd +++ b/swayidle/swayidle.1.scd @@ -16,6 +16,10 @@ swayidle - Idle manager for Wayland *-d* Enable debug output. +*-w* + Wait for command to finish executing before continuing, helpful for ensuring + that a *before-sleep* command has finished before the system goes to sleep. + # DESCRIPTION swayidle listens for idle activity on your Wayland compositor and executes tasks @@ -36,6 +40,10 @@ Sending SIGUSR1 to swayidle will immediately enter idle state. If built with systemd support, executes _command_ before systemd puts the computer to sleep. + Note: this only delays sleeping up to the limit set in *logind.conf(5)* by + the option InhibitDelayMaxSec. A command that hasn't finished by then will + continue running after resuming from sleep. + All commands are executed in a shell. # EXAMPLE