Add --exit and --reconfigure

This commit is contained in:
Johan Malm 2022-10-06 21:54:49 +01:00 committed by Consolatis
parent 8c139e4185
commit 3e1a800c14
2 changed files with 38 additions and 1 deletions

View file

@ -24,6 +24,10 @@ kill -s <signal> $LABWC_PID
killall -s <signal> labwc killall -s <signal> labwc
``` ```
Each running instance of labwc sets the environment variable `LABWC_PID` to
its PID. This is useful for sending signals to a specific instance and is what
the `--exit` and `--reconfigure` options use.
# OPTIONS # OPTIONS
*-c, --config* <config-file> *-c, --config* <config-file>
@ -35,9 +39,15 @@ killall -s <signal> labwc
*-d, --debug* *-d, --debug*
Enable full logging, including debug information Enable full logging, including debug information
*-e, --exit*
Exit the compositor
*-h, --help* *-h, --help*
Show help message and quit Show help message and quit
*-r, --reconfigure*
Reload the compositor configuration
*-s, --startup* <command> *-s, --startup* <command>
Run command on startup Run command on startup

View file

@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
#define _POSIX_C_SOURCE 200809L #define _POSIX_C_SOURCE 200809L
#include <signal.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include "common/dir.h" #include "common/dir.h"
@ -18,7 +19,9 @@ static const struct option long_options[] = {
{"config", required_argument, NULL, 'c'}, {"config", required_argument, NULL, 'c'},
{"config-dir", required_argument, NULL, 'C'}, {"config-dir", required_argument, NULL, 'C'},
{"debug", no_argument, NULL, 'd'}, {"debug", no_argument, NULL, 'd'},
{"exit", no_argument, NULL, 'e'},
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
{"reconfigure", no_argument, NULL, 'r'},
{"startup", required_argument, NULL, 's'}, {"startup", required_argument, NULL, 's'},
{"version", no_argument, NULL, 'v'}, {"version", no_argument, NULL, 'v'},
{"verbose", no_argument, NULL, 'V'}, {"verbose", no_argument, NULL, 'V'},
@ -30,7 +33,9 @@ static const char labwc_usage[] =
" -c, --config <file> Specify config file (with path)\n" " -c, --config <file> Specify config file (with path)\n"
" -C, --config-dir <dir> Specify config directory\n" " -C, --config-dir <dir> Specify config directory\n"
" -d, --debug Enable full logging, including debug information\n" " -d, --debug Enable full logging, including debug information\n"
" -e, --exit Exit the compositor\n"
" -h, --help Show help message and quit\n" " -h, --help Show help message and quit\n"
" -r, --reconfigure Reload the compositor configuration\n"
" -s, --startup <command> Run command on startup\n" " -s, --startup <command> Run command on startup\n"
" -v, --version Show version number and quit\n" " -v, --version Show version number and quit\n"
" -V, --verbose Enable more verbose logging\n"; " -V, --verbose Enable more verbose logging\n";
@ -42,6 +47,22 @@ usage(void)
exit(0); exit(0);
} }
static void
send_signal_to_labwc_pid(int signal)
{
char *labwc_pid = getenv("LABWC_PID");
if (!labwc_pid) {
wlr_log(WLR_ERROR, "LABWC_PID not set");
exit(EXIT_FAILURE);
}
int pid = atoi(labwc_pid);
if (!pid) {
wlr_log(WLR_ERROR, "should not send signal to pid 0");
exit(EXIT_FAILURE);
}
kill(pid, signal);
}
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
@ -57,7 +78,7 @@ main(int argc, char *argv[])
int c; int c;
while (1) { while (1) {
int index = 0; int index = 0;
c = getopt_long(argc, argv, "c:C:dhs:vV", long_options, &index); c = getopt_long(argc, argv, "c:C:dehrs:vV", long_options, &index);
if (c == -1) { if (c == -1) {
break; break;
} }
@ -71,6 +92,12 @@ main(int argc, char *argv[])
case 'd': case 'd':
verbosity = WLR_DEBUG; verbosity = WLR_DEBUG;
break; break;
case 'e':
send_signal_to_labwc_pid(SIGTERM);
exit(0);
case 'r':
send_signal_to_labwc_pid(SIGHUP);
exit(0);
case 's': case 's':
startup_cmd = optarg; startup_cmd = optarg;
break; break;