Add startup command option to rootston
Allows specifying a command to run at startup.
This commit is contained in:
parent
c7f39d0eb8
commit
8c759d7abe
|
@ -42,6 +42,7 @@ struct roots_config {
|
|||
struct wl_list devices;
|
||||
struct wl_list bindings;
|
||||
char *config_path;
|
||||
char *startup_cmd;
|
||||
};
|
||||
|
||||
struct roots_config *parse_args(int argc, char *argv[]);
|
||||
|
|
|
@ -16,12 +16,13 @@
|
|||
|
||||
static void usage(const char *name, int ret) {
|
||||
fprintf(stderr,
|
||||
"usage: %s [-C <FILE>]\n"
|
||||
"usage: %s [-C <FILE>] [-E <COMMAND>]\n"
|
||||
"\n"
|
||||
" -C <FILE> Path to the configuration file\n"
|
||||
" (default: rootston.ini).\n"
|
||||
" See `rootston.ini.example` for config\n"
|
||||
" file documentation.\n", name);
|
||||
" file documentation.\n"
|
||||
" -E <COMMAND> Command that will be ran at startup.\n" , name);
|
||||
|
||||
exit(ret);
|
||||
}
|
||||
|
@ -273,11 +274,14 @@ struct roots_config *parse_args(int argc, char *argv[]) {
|
|||
wl_list_init(&config->bindings);
|
||||
|
||||
int c;
|
||||
while ((c = getopt(argc, argv, "C:h")) != -1) {
|
||||
while ((c = getopt(argc, argv, "C:E:h")) != -1) {
|
||||
switch (c) {
|
||||
case 'C':
|
||||
config->config_path = strdup(optarg);
|
||||
break;
|
||||
case 'E':
|
||||
config->startup_cmd = strdup(optarg);
|
||||
break;
|
||||
case 'h':
|
||||
case '?':
|
||||
usage(argv[0], c != 'h');
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#define _POSIX_C_SOURCE 200112L
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <wayland-server.h>
|
||||
#include <wlr/backend.h>
|
||||
#include <wlr/render.h>
|
||||
|
@ -42,6 +43,18 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
|
||||
setenv("WAYLAND_DISPLAY", socket, true);
|
||||
|
||||
if (server.config->startup_cmd != NULL) {
|
||||
const char *cmd = server.config->startup_cmd;
|
||||
pid_t pid = fork();
|
||||
if (pid < 0) {
|
||||
wlr_log(L_ERROR, "cannot execute binding command: fork() failed");
|
||||
return 1;
|
||||
} else if (pid == 0) {
|
||||
execl("/bin/sh", "/bin/sh", "-c", cmd, (void *)NULL);
|
||||
}
|
||||
}
|
||||
|
||||
wl_display_run(server.wl_display);
|
||||
wlr_backend_destroy(server.backend);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue