summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-08-09 13:05:05 -0400
committerRobert Ancell <robert.ancell@gmail.com>2022-08-26 16:48:46 +1200
commit658952997c5cd05c148b6c288739af2c6dd5c40f (patch)
treea0b6bcc71f6dfb10484d84e23536c9636da90642
parenteeefd110aa57809a46b4bed27e6103d65502cbab (diff)
downloadlightdm-git-658952997c5cd05c148b6c288739af2c6dd5c40f.tar.gz
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.
-rw-r--r--src/x-server-local.c14
1 files changed, 13 insertions, 1 deletions
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");