From d806a124b6b3bb8b265d6e99e86a787ccd22386d Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 22 Jul 2024 14:59:43 -0400 Subject: [PATCH 2/2] manager: Quit plymouth at first sign of failure Rather than quit plymouth after a replacement X server is already started, this commit does it a bit earlier, so there is a battle of display servers. --- daemon/gdm-manager.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index 08c3cc177..100b967fb 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -1551,70 +1551,75 @@ on_display_status_changed (GdmDisplay *display, g_object_get (display, "is-local", &display_is_local, NULL); quit_plymouth = display_is_local && manager->priv->plymouth_is_running; #endif g_object_get (display, "x11-display-number", &display_number, "session-type", &session_type, "doing-initial-setup", &doing_initial_setup, NULL); status = gdm_display_get_status (display); switch (status) { case GDM_DISPLAY_PREPARED: case GDM_DISPLAY_MANAGED: if ((display_number == -1 && status == GDM_DISPLAY_PREPARED) || (display_number != -1 && status == GDM_DISPLAY_MANAGED)) { char *session_class; g_object_get (display, "session-class", &session_class, NULL); if (g_strcmp0 (session_class, "greeter") == 0) set_up_session (manager, display); g_free (session_class); } break; + + case GDM_DISPLAY_FAILING: case GDM_DISPLAY_FAILED: case GDM_DISPLAY_UNMANAGED: case GDM_DISPLAY_FINISHED: #ifdef WITH_PLYMOUTH if (quit_plymouth) { plymouth_quit_without_transition (); manager->priv->plymouth_is_running = FALSE; } #endif + if (status == GDM_DISPLAY_FAILING) + break; + g_object_set_data (G_OBJECT (display), "gdm-user-session", NULL); if (display == manager->priv->automatic_login_display) { g_clear_weak_pointer (&manager->priv->automatic_login_display); manager->priv->did_automatic_login = TRUE; #ifdef ENABLE_WAYLAND_SUPPORT if (g_strcmp0 (session_type, "wayland") != 0 && status == GDM_DISPLAY_FAILED) { /* we're going to fall back to X11, so try to autologin again */ manager->priv->did_automatic_login = FALSE; } #endif } break; default: break; } } static void on_display_removed (GdmDisplayStore *display_store, GdmDisplay *display, GdmManager *manager) { char *id; gdm_display_get_id (display, &id, NULL); -- 2.44.0