Blame SOURCES/0048-manager-don-t-kill-initial-setup-right-away-with-Xor.patch

a1b388
From f1b7d85b46dfc253176d6a043dcce26da3a26dfb Mon Sep 17 00:00:00 2001
a1b388
From: Ray Strode <rstrode@redhat.com>
a1b388
Date: Mon, 13 Jul 2020 09:23:06 -0400
a1b388
Subject: [PATCH 48/51] manager: don't kill initial-setup right away with Xorg
a1b388
 either
a1b388
a1b388
The login screen for both Xorg and wayland sessions is now silently
a1b388
killed in the background post login.
a1b388
a1b388
We still kill initial-setup for Xorg sessions up front, though.
a1b388
a1b388
This commit fixes that.
a1b388
---
a1b388
 daemon/gdm-manager.c | 20 ++------------------
a1b388
 1 file changed, 2 insertions(+), 18 deletions(-)
a1b388
a1b388
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
a1b388
index cf982870c..b147d73db 100644
a1b388
--- a/daemon/gdm-manager.c
a1b388
+++ b/daemon/gdm-manager.c
a1b388
@@ -1757,123 +1757,107 @@ chown_initial_setup_home_dir (void)
a1b388
 
a1b388
         uid = (uid_t) atoi (gis_uid_contents);
a1b388
         pwe = getpwuid (uid);
a1b388
         if (uid == 0 || pwe == NULL) {
a1b388
                 g_warning ("UID '%s' in %s is not valid", gis_uid_contents, gis_uid_path);
a1b388
                 goto out;
a1b388
         }
a1b388
 
a1b388
         error = NULL;
a1b388
         dir = g_file_new_for_path (gis_dir_path);
a1b388
         if (!chown_recursively (dir, pwe->pw_uid, pwe->pw_gid, &error)) {
a1b388
                 g_warning ("Failed to change ownership for %s: %s", gis_dir_path, error->message);
a1b388
                 g_error_free (error);
a1b388
         }
a1b388
         g_object_unref (dir);
a1b388
 out:
a1b388
         g_free (gis_uid_contents);
a1b388
         g_free (gis_uid_path);
a1b388
         g_free (gis_dir_path);
a1b388
 }
a1b388
 
a1b388
 static gboolean
a1b388
 on_start_user_session (StartUserSessionOperation *operation)
a1b388
 {
a1b388
         GdmManager *self = operation->manager;
a1b388
         gboolean migrated;
a1b388
         gboolean fail_if_already_switched = TRUE;
a1b388
         gboolean doing_initial_setup = FALSE;
a1b388
         GdmDisplay *display;
a1b388
         const char *session_id;
a1b388
-#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER)
a1b388
-        g_autofree char *display_session_type = NULL;
a1b388
-#endif
a1b388
 
a1b388
         g_debug ("GdmManager: start or jump to session");
a1b388
 
a1b388
         /* If there's already a session running, jump to it.
a1b388
          * If the only session running is the one we just opened,
a1b388
          * start a session on it.
a1b388
          */
a1b388
         migrated = switch_to_compatible_user_session (operation->manager, operation->session, fail_if_already_switched);
a1b388
 
a1b388
         g_debug ("GdmManager: migrated: %d", migrated);
a1b388
         if (migrated) {
a1b388
                 /* We don't stop the manager here because
a1b388
                    when Xorg exits it switches to the VT it was
a1b388
                    started from.  That interferes with fast
a1b388
                    user switching. */
a1b388
                 gdm_session_reset (operation->session);
a1b388
                 destroy_start_user_session_operation (operation);
a1b388
                 goto out;
a1b388
         }
a1b388
 
a1b388
         display = get_display_for_user_session (operation->session);
a1b388
 
a1b388
         g_object_get (G_OBJECT (display),
a1b388
                       "doing-initial-setup", &doing_initial_setup,
a1b388
-#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER)
a1b388
-                      "session-type", &display_session_type,
a1b388
-#endif
a1b388
                       NULL);
a1b388
 
a1b388
         session_id = gdm_session_get_conversation_session_id (operation->session,
a1b388
                                                               operation->service_name);
a1b388
 
a1b388
         if (gdm_session_get_display_mode (operation->session) == GDM_SESSION_DISPLAY_MODE_REUSE_VT) {
a1b388
                 /* In this case, the greeter's display is morphing into
a1b388
                  * the user session display. Kill the greeter on this session
a1b388
                  * and let the user session follow the same display. */
a1b388
                 gdm_display_stop_greeter_session (display);
a1b388
                 g_object_set (G_OBJECT (display),
a1b388
                                 "session-class", "user",
a1b388
                                 "session-id", session_id,
a1b388
                                 NULL);
a1b388
         } else {
a1b388
                 uid_t allowed_uid;
a1b388
 
a1b388
                 g_object_ref (display);
a1b388
                 if (doing_initial_setup) {
a1b388
                         g_autoptr(GError) error = NULL;
a1b388
 
a1b388
-#if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER)
a1b388
-                        if (g_strcmp0 (display_session_type, "wayland") == 0) {
a1b388
-                                g_debug ("GdmManager: closing down initial setup display in background");
a1b388
-                                g_object_set (G_OBJECT (display), "status", GDM_DISPLAY_WAITING_TO_FINISH, NULL);
a1b388
-                        }
a1b388
-#endif
a1b388
-                        if (gdm_display_get_status (display) == GDM_DISPLAY_MANAGED) {
a1b388
-                                g_debug ("GdmManager: closing down initial setup display");
a1b388
-                                gdm_display_stop_greeter_session (display);
a1b388
-                                gdm_display_unmanage (display);
a1b388
-                                gdm_display_finish (display);
a1b388
-                        }
a1b388
+                        g_debug ("GdmManager: closing down initial setup display in background");
a1b388
+                        g_object_set (G_OBJECT (display), "status", GDM_DISPLAY_WAITING_TO_FINISH, NULL);
a1b388
 
a1b388
                         chown_initial_setup_home_dir ();
a1b388
 
a1b388
                         if (!g_file_set_contents (ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT,
a1b388
                                                   "1",
a1b388
                                                   1,
a1b388
                                                   &error)) {
a1b388
                                 g_warning ("GdmDisplay: Could not write initial-setup-done marker to %s: %s",
a1b388
                                            ALREADY_RAN_INITIAL_SETUP_ON_THIS_BOOT,
a1b388
                                            error->message);
a1b388
                                 g_clear_error (&error);
a1b388
                         }
a1b388
                 } else {
a1b388
                         g_debug ("GdmManager: session has its display server, reusing our server for another login screen");
a1b388
                 }
a1b388
 
a1b388
                 /* The user session is going to follow the session worker
a1b388
                  * into the new display. Untie it from this display and
a1b388
                  * create a new session for a future user login. */
a1b388
                 allowed_uid = gdm_session_get_allowed_user (operation->session);
a1b388
                 g_object_set_data (G_OBJECT (display), "gdm-user-session", NULL);
a1b388
                 g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL);
a1b388
                 create_user_session_for_display (operation->manager, display, allowed_uid);
a1b388
 
a1b388
                 /* Give the user session a new display object for bookkeeping purposes */
a1b388
                 create_display_for_user_session (operation->manager,
a1b388
                                                  operation->session,
a1b388
                                                  session_id);
a1b388
 
a1b388
                 if ((g_strcmp0 (operation->service_name, "gdm-autologin") == 0) &&
a1b388
-- 
a1b388
2.27.0
a1b388