diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2022-08-09 13:05:05 -0400 |
---|---|---|
committer | Robert Ancell <robert.ancell@gmail.com> | 2022-08-26 16:48:46 +1200 |
commit | 658952997c5cd05c148b6c288739af2c6dd5c40f (patch) | |
tree | a0b6bcc71f6dfb10484d84e23536c9636da90642 /src/x-server-local.c | |
parent | eeefd110aa57809a46b4bed27e6103d65502cbab (diff) | |
download | lightdm-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.
Diffstat (limited to 'src/x-server-local.c')
-rw-r--r-- | src/x-server-local.c | 14 |
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"); |