From 365c58c0f4e4488496283005c5f800c27ad15d7c Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 31 Aug 2018 15:52:07 -0400 Subject: launch-environment: use wayland for initial-setup While we've been using wayland by default for the login screen for a long time, and for the user session for somewhat less time, we never switched initial setup over. It's still using X11 for no good reason. This commit changes initial-setup to use wayland by default like everything else. --- daemon/gdm-launch-environment.c | 3 ++- daemon/gdm-launch-environment.h | 1 + daemon/gdm-legacy-display.c | 7 ++++--- daemon/gdm-local-display.c | 12 ++++-------- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c index 897ddf46..788f3a1e 100644 --- a/daemon/gdm-launch-environment.c +++ b/daemon/gdm-launch-environment.c @@ -978,6 +978,7 @@ gdm_create_greeter_launch_environment (const char *display_name, GdmLaunchEnvironment * gdm_create_initial_setup_launch_environment (const char *display_name, const char *seat_id, + const char *session_type, const char *display_hostname, gboolean display_is_local) { @@ -985,7 +986,7 @@ gdm_create_initial_setup_launch_environment (const char *display_name, INITIAL_SETUP_USERNAME, display_name, seat_id, - NULL, + session_type, INITIAL_SETUP_SESSION_MODE, display_hostname, display_is_local); diff --git a/daemon/gdm-launch-environment.h b/daemon/gdm-launch-environment.h index c2a09d1c..00ac2a0d 100644 --- a/daemon/gdm-launch-environment.h +++ b/daemon/gdm-launch-environment.h @@ -77,6 +77,7 @@ GdmLaunchEnvironment *gdm_create_greeter_launch_environment (const char *display gboolean display_is_local); GdmLaunchEnvironment *gdm_create_initial_setup_launch_environment (const char *display_name, const char *seat_id, + const char *session_type, const char *display_hostname, gboolean display_is_local); GdmLaunchEnvironment *gdm_create_chooser_launch_environment (const char *display_name, diff --git a/daemon/gdm-legacy-display.c b/daemon/gdm-legacy-display.c index cd6259ba..0dd8c734 100644 --- a/daemon/gdm-legacy-display.c +++ b/daemon/gdm-legacy-display.c @@ -115,9 +115,10 @@ gdm_legacy_display_prepare (GdmDisplay *display) TRUE); } else { launch_environment = gdm_create_initial_setup_launch_environment (display_name, - seat_id, - NULL, - TRUE); + seat_id, + NULL, + NULL, + TRUE); } g_object_set (self, "launch-environment", launch_environment, NULL); diff --git a/daemon/gdm-local-display.c b/daemon/gdm-local-display.c index b1ed2bc8..3b682262 100644 --- a/daemon/gdm-local-display.c +++ b/daemon/gdm-local-display.c @@ -110,11 +110,6 @@ gdm_local_display_prepare (GdmDisplay *display) } g_debug ("doing initial setup? %s", doing_initial_setup? "yes" : "no"); - if (doing_initial_setup && g_strcmp0 (session_type, "wayland") == 0) { - g_debug ("initial setup doesn't have a wayland session, failing back to X11"); - failed = TRUE; - goto out; - } if (!doing_initial_setup) { launch_environment = gdm_create_greeter_launch_environment (NULL, @@ -124,9 +119,10 @@ gdm_local_display_prepare (GdmDisplay *display) TRUE); } else { launch_environment = gdm_create_initial_setup_launch_environment (NULL, - seat_id, - NULL, - TRUE); + seat_id, + session_type, + NULL, + TRUE); } g_object_set (self, "launch-environment", launch_environment, NULL); -- cgit v1.2.1 From 49433d863842bde0a5d57f08c03e38d7bbe0dca7 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 31 Aug 2018 15:48:38 -0400 Subject: manager: don't kill initial-setup before starting user session on wayland Right now we kill initial-setup before starting the session for the user initial-setup created. This is the right thing to do for Xorg, since Xorg can't be killed in the background, but it adds unncessary flicker for wayland. This commit checks if it's wayland and avoids killing it right away in that case. --- daemon/gdm-manager.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index b1e2072c..986891bb 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -1588,6 +1588,9 @@ on_start_user_session (StartUserSessionOperation *operation) gboolean doing_initial_setup = FALSE; GdmDisplay *display; const char *session_id; +#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER) + g_autofree char *display_session_type = NULL; +#endif g_debug ("GdmManager: start or jump to session"); @@ -1610,7 +1613,12 @@ on_start_user_session (StartUserSessionOperation *operation) display = get_display_for_user_session (operation->session); - g_object_get (G_OBJECT (display), "doing-initial-setup", &doing_initial_setup, NULL); + g_object_get (G_OBJECT (display), + "doing-initial-setup", &doing_initial_setup, +#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER) + "session-type", &display_session_type, +#endif + NULL); session_id = gdm_session_get_conversation_session_id (operation->session, operation->service_name); @@ -1629,10 +1637,18 @@ on_start_user_session (StartUserSessionOperation *operation) g_object_ref (display); if (doing_initial_setup) { - g_debug ("GdmManager: closing down initial setup display"); - gdm_display_stop_greeter_session (display); - gdm_display_unmanage (display); - gdm_display_finish (display); +#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER) + if (g_strcmp0 (display_session_type, "wayland") == 0) { + g_debug ("GdmManager: closing down initial setup display in background"); + g_object_set (G_OBJECT (display), "status", GDM_DISPLAY_WAITING_TO_FINISH, NULL); + } +#endif + if (gdm_display_get_status (display) == GDM_DISPLAY_MANAGED) { + g_debug ("GdmManager: closing down initial setup display"); + gdm_display_stop_greeter_session (display); + gdm_display_unmanage (display); + gdm_display_finish (display); + } } else { g_debug ("GdmManager: session has its display server, reusing our server for another login screen"); } -- cgit v1.2.1