diff --git a/0001-daemon-Infer-session-type-from-desktop-file-if-user-.patch b/0001-daemon-Infer-session-type-from-desktop-file-if-user-.patch new file mode 100644 index 0000000..ca2ec57 --- /dev/null +++ b/0001-daemon-Infer-session-type-from-desktop-file-if-user-.patch @@ -0,0 +1,87 @@ +From ef71c6330dde267f2fda9d58631bafac652fc8e3 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 29 Sep 2021 11:03:41 -0400 +Subject: [PATCH] daemon: Infer session type from desktop file if user has no + saved session type + +The accountsservice user cache file can specify a session type +associated with the saved session. This is optional though. If one +isn't specified GDM needs to figure out the session type based on the +list of preferred session types for the system and the session file +itself. + +It was failing to do the latter, though. This commit fixes that. +--- + daemon/gdm-session.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c +index c1e2be00..4b709731 100644 +--- a/daemon/gdm-session.c ++++ b/daemon/gdm-session.c +@@ -1009,60 +1009,62 @@ worker_on_saved_language_name_read (GdmDBusWorker *worker, + } + } + } + + static void + worker_on_saved_session_name_read (GdmDBusWorker *worker, + const char *session_name, + GdmSessionConversation *conversation) + { + GdmSession *self = conversation->session; + + if (! get_session_command_for_name (self, session_name, self->saved_session_type, NULL)) { + /* ignore sessions that don't exist */ + g_debug ("GdmSession: not using invalid .dmrc session: %s", session_name); + g_free (self->saved_session); + self->saved_session = NULL; + update_session_type (self); + } else { + if (strcmp (session_name, + get_default_session_name (self)) != 0) { + g_free (self->saved_session); + self->saved_session = g_strdup (session_name); + + if (self->greeter_interface != NULL) { + gdm_dbus_greeter_emit_default_session_name_changed (self->greeter_interface, + session_name); + } + } + if (self->saved_session_type != NULL) + set_session_type (self, self->saved_session_type); ++ else ++ update_session_type (self); + } + + } + + static void + worker_on_saved_session_type_read (GdmDBusWorker *worker, + const char *session_type, + GdmSessionConversation *conversation) + { + GdmSession *self = conversation->session; + + g_free (self->saved_session_type); + self->saved_session_type = g_strdup (session_type); + } + + static GdmSessionConversation * + find_conversation_by_pid (GdmSession *self, + GPid pid) + { + GHashTableIter iter; + gpointer key, value; + + g_hash_table_iter_init (&iter, self->conversations); + while (g_hash_table_iter_next (&iter, &key, &value)) { + GdmSessionConversation *conversation; + + conversation = (GdmSessionConversation *) value; + + if (conversation->worker_pid == pid) { + return conversation; +-- +2.31.1 + diff --git a/gdm.spec b/gdm.spec index d48b618..643fe71 100644 --- a/gdm.spec +++ b/gdm.spec @@ -11,7 +11,7 @@ Name: gdm Epoch: 1 Version: 41.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: The GNOME Display Manager License: GPLv2+ @@ -24,6 +24,9 @@ Source5: default.pa-for-gdm Source6: gdm.sysusers +# https://bugzilla.redhat.com/show_bug.cgi?id=2007742 +Patch10001: 0001-daemon-Infer-session-type-from-desktop-file-if-user-.patch + # Downstream patches Patch80001: 0001-Honor-initial-setup-being-disabled-by-distro-install.patch Patch90001: 0001-data-add-system-dconf-databases-to-gdm-profile.patch @@ -300,6 +303,11 @@ fi %{_libdir}/pkgconfig/gdm-pam-extensions.pc %changelog +* Tue Nov 16 2021 Ray Strode - 1:41.0-3 +- Fix Xorg selection when SessionType is unspecified in accountsservice + but session is specified. + Resolves: #2007742 + * Fri Oct 15 2021 Timothée Ravier - 1:41.0-2 - Use systemd sysusers config to create user and group