Blame SOURCES/0001-manager-don-t-kill-timed-login-session-immediately-a.patch

4dd5a8
From ecd37ba6d56a49dd896613f68d1e1754633b9f0c Mon Sep 17 00:00:00 2001
4dd5a8
From: Ray Strode <rstrode@redhat.com>
4dd5a8
Date: Wed, 6 Feb 2019 16:14:52 -0500
4dd5a8
Subject: [PATCH 1/4] manager: don't kill timed login session immediately after
4dd5a8
 it starts
4dd5a8
4dd5a8
At the moment GDM is misidentifying timed login sessions as if
4dd5a8
they are automatic login sessions.  That leads to their displays
4dd5a8
getting killed sometimes shortly after log in.
4dd5a8
4dd5a8
This commit corrects the check, so that timed login sessions aren't
4dd5a8
treated as autologin sessions.
4dd5a8
---
4dd5a8
 daemon/gdm-manager.c | 3 ++-
4dd5a8
 1 file changed, 2 insertions(+), 1 deletion(-)
4dd5a8
4dd5a8
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
4dd5a8
index 2118c5834..b2d0578f5 100644
4dd5a8
--- a/daemon/gdm-manager.c
4dd5a8
+++ b/daemon/gdm-manager.c
4dd5a8
@@ -1841,61 +1841,62 @@ on_start_user_session (StartUserSessionOperation *operation)
4dd5a8
                                 NULL);
4dd5a8
         } else {
4dd5a8
                 uid_t allowed_uid;
4dd5a8
 
4dd5a8
                 g_object_ref (display);
4dd5a8
                 if (doing_initial_setup) {
4dd5a8
                         g_debug ("GdmManager: closing down initial setup display");
4dd5a8
                         gdm_display_stop_greeter_session (display);
4dd5a8
                         gdm_display_unmanage (display);
4dd5a8
                         gdm_display_finish (display);
4dd5a8
 
4dd5a8
                         /* We can't start the user session until the finished display
4dd5a8
                          * starts to respawn (since starting an X server and bringing
4dd5a8
                          * one down at the same time is a no go)
4dd5a8
                          */
4dd5a8
                         g_assert (self->priv->initial_login_operation == NULL);
4dd5a8
                         self->priv->initial_login_operation = operation;
4dd5a8
                         starting_user_session_right_away = FALSE;
4dd5a8
                 } else {
4dd5a8
                         g_debug ("GdmManager: session has its display server, reusing our server for another login screen");
4dd5a8
                 }
4dd5a8
 
4dd5a8
                 /* The user session is going to follow the session worker
4dd5a8
                  * into the new display. Untie it from this display and
4dd5a8
                  * create a new session for a future user login. */
4dd5a8
                 allowed_uid = gdm_session_get_allowed_user (operation->session);
4dd5a8
                 g_object_set_data (G_OBJECT (display), "gdm-user-session", NULL);
4dd5a8
                 g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL);
4dd5a8
                 create_user_session_for_display (operation->manager, display, allowed_uid);
4dd5a8
 
4dd5a8
-                if (g_strcmp0 (operation->service_name, "gdm-autologin") == 0) {
4dd5a8
+                if ((g_strcmp0 (operation->service_name, "gdm-autologin") == 0) &&
4dd5a8
+                    !gdm_session_client_is_connected (operation->session)) {
4dd5a8
                         gboolean was_initial = FALSE;
4dd5a8
 
4dd5a8
                         g_object_get (G_OBJECT (display), "is-initial", &was_initial, NULL);
4dd5a8
 
4dd5a8
                         /* remove the unused prepared greeter display since we're not going
4dd5a8
                          * to have a greeter */
4dd5a8
                         gdm_display_store_remove (self->priv->display_store, display);
4dd5a8
                         g_object_unref (display);
4dd5a8
 
4dd5a8
                         should_be_initial = was_initial;
4dd5a8
                 }
4dd5a8
 
4dd5a8
                 /* Give the user session a new display object for bookkeeping purposes */
4dd5a8
                 create_display_for_user_session (operation->manager,
4dd5a8
                                                  operation->session,
4dd5a8
                                                  session_id,
4dd5a8
                                                  should_be_initial);
4dd5a8
         }
4dd5a8
 
4dd5a8
         if (starting_user_session_right_away) {
4dd5a8
                 start_user_session (operation->manager, operation);
4dd5a8
         }
4dd5a8
 
4dd5a8
  out:
4dd5a8
         return G_SOURCE_REMOVE;
4dd5a8
 }
4dd5a8
 
4dd5a8
 static void
4dd5a8
 queue_start_user_session (GdmManager *manager,
4dd5a8
                           GdmSession *session,
4dd5a8
-- 
4dd5a8
2.21.0
4dd5a8