Merge pull request #301 from thejan2009/startup-command
Add startup command option to rootston
This commit is contained in:
		
						commit
						59fa18fbc9
					
				|  | @ -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