[RFC] weston-launch: add option to start compositors other than weston

Ilia Bozhinov ammen99 at gmail.com
Mon Mar 19 09:41:46 UTC 2018


This is helpful for other compositors which utilize libweston without
systemd-login support.

Signed-off-by: Ilia Bozhinov <ammen99 at gmail.com>
---
 libweston/weston-launch.c | 35 +++++++++++++++++++++--------------
 1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/libweston/weston-launch.c b/libweston/weston-launch.c
index 1adcf21a..b8bceea2 100644
--- a/libweston/weston-launch.c
+++ b/libweston/weston-launch.c
@@ -116,6 +116,7 @@ struct weston_launch {
 	pid_t child;
 	int verbose;
 	char *new_user;
+	char *compositor_cmd;
 };
 
 union cmsg_data { unsigned char b[4]; int fd; };
@@ -624,7 +625,7 @@ setup_session(struct weston_launch *wl, char **child_argv)
 	child_argv[0] = "/bin/sh";
 	child_argv[1] = "-l";
 	child_argv[2] = "-c";
-	child_argv[3] = BINDIR "/weston \"$@\"";
+	child_argv[3] = strcat(wl->compositor_cmd ?: BINDIR "/weston", "\"$@\"");
 	child_argv[4] = "weston";
 	return 5;
 }
@@ -652,7 +653,7 @@ launch_compositor(struct weston_launch *wl, int argc, char *argv[])
 	if (wl->new_user) {
 		o = setup_session(wl, child_argv);
 	} else {
-		child_argv[0] = BINDIR "/weston";
+		child_argv[0] = wl->compositor_cmd ?: BINDIR "/weston";
 		o = 1;
 	}
 	for (i = 0; i < argc; ++i)
@@ -683,12 +684,14 @@ static void
 help(const char *name)
 {
 	fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
-	fprintf(stderr, "  -u, --user      Start session as specified username,\n"
-			"                  e.g. -u joe, requires root.\n");
-	fprintf(stderr, "  -t, --tty       Start session on alternative tty,\n"
-			"                  e.g. -t /dev/tty4, requires -u option.\n");
-	fprintf(stderr, "  -v, --verbose   Be verbose\n");
-	fprintf(stderr, "  -h, --help      Display this help message\n");
+	fprintf(stderr, "  -u, --user       Start session as specified username,\n"
+			"                   e.g. -u joe, requires root.\n");
+	fprintf(stderr, "  -t, --tty        Start session on alternative tty,\n"
+			"                   e.g. -t /dev/tty4, requires -u option.\n");
+	fprintf(stderr, "  -c, --compositor Start a compositor other than weston,\n"
+			"                   e.g. -c /usr/bin/weston.\n");
+	fprintf(stderr, "  -v, --verbose    Be verbose\n");
+	fprintf(stderr, "  -h, --help       Display this help message\n");
 }
 
 int
@@ -698,16 +701,17 @@ main(int argc, char *argv[])
 	int i, c;
 	char *tty = NULL;
 	struct option opts[] = {
-		{ "user",    required_argument, NULL, 'u' },
-		{ "tty",     required_argument, NULL, 't' },
-		{ "verbose", no_argument,       NULL, 'v' },
-		{ "help",    no_argument,       NULL, 'h' },
-		{ 0,         0,                 NULL,  0  }
+		{ "user",       required_argument, NULL, 'u' },
+		{ "tty",        required_argument, NULL, 't' },
+		{ "verbose",    no_argument,       NULL, 'v' },
+		{ "compositor", required_argument, NULL, 'c' },
+		{ "help",       no_argument,       NULL, 'h' },
+		{ 0,            0,                 NULL,  0  }
 	};
 
 	memset(&wl, 0, sizeof wl);
 
-	while ((c = getopt_long(argc, argv, "u:t:vh", opts, &i)) != -1) {
+	while ((c = getopt_long(argc, argv, "u:t:c:vh", opts, &i)) != -1) {
 		switch (c) {
 		case 'u':
 			wl.new_user = optarg;
@@ -720,6 +724,9 @@ main(int argc, char *argv[])
 		case 'v':
 			wl.verbose = 1;
 			break;
+		case 'c':
+			wl.compositor_cmd = optarg;
+			break;
 		case 'h':
 			help("weston-launch");
 			exit(EXIT_FAILURE);
-- 
2.14.3



More information about the wayland-devel mailing list