From 658952997c5cd05c148b6c288739af2c6dd5c40f Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 9 Aug 2022 13:05:05 -0400 Subject: x-server-local: Correctly order command line arguments. When providing the VNCServer command as 'Xvnc -SecurityTypes None', the formatted command line used would look like: Xvnc -SecurityTypes None :1 -auth /var/run/lightdm/root/:1 which is invalid (the display number must appear first). * src/x-server-local.c (x_server_local_start): Format the command placing the display number before any other provided arguments. --- src/x-server-local.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/x-server-local.c b/src/x-server-local.c index 7c4ab870..6c540d18 100644 --- a/src/x-server-local.c +++ b/src/x-server-local.c @@ -463,14 +463,20 @@ x_server_local_start (DisplayServer *display_server) l_debug (display_server, "Logging to %s", log_file); g_autofree gchar *absolute_command = get_absolute_command (priv->command); + g_auto(GStrv) tokens = g_strsplit (absolute_command, " ", 2); + const gchar* binary = tokens[0]; + const gchar *extra_options = tokens[1]; + if (!absolute_command) { l_debug (display_server, "Can't launch X server %s, not found in path", priv->command); stopped_cb (priv->x_server_process, X_SERVER_LOCAL (server)); return FALSE; } - g_autoptr(GString) command = g_string_new (absolute_command); + g_autoptr(GString) command = g_string_new (binary); + /* The display argument must be given first when the X server used + * is Xvnc. */ g_string_append_printf (command, " :%d", priv->display_number); if (priv->config_file) @@ -513,6 +519,12 @@ x_server_local_start (DisplayServer *display_server) if (X_SERVER_LOCAL_GET_CLASS (server)->add_args) X_SERVER_LOCAL_GET_CLASS (server)->add_args (server, command); + /* Any extra user options provided via the VNCServer 'command' + * config option are appended last, so the user can override any + * of the above. */ + if (extra_options) + g_string_append_printf (command, " %s", extra_options); + process_set_command (priv->x_server_process, command->str); l_debug (display_server, "Launching X Server"); -- cgit v1.2.1