Add startup command option to rootston

Allows specifying a command to run at startup.
This commit is contained in:
D.B 2017-10-20 17:49:04 +02:00
parent c7f39d0eb8
commit 8c759d7abe
3 changed files with 21 additions and 3 deletions

View File

@ -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[]);

View File

@ -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');

View File

@ -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;