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). Submitted upstream at: https://github.com/canonical/lightdm/pull/265 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"); -- 2.36.1