Blame SOURCES/0001-session-ensure-login-screen-over-XDMCP-connects-to-i.patch

890c66
From b8c942b5f191eaa39ac1e578fa019b32a516cd5c Mon Sep 17 00:00:00 2001
890c66
From: Ray Strode <rstrode@redhat.com>
890c66
Date: Mon, 11 Feb 2019 10:32:55 -0500
890c66
Subject: [PATCH] session: ensure login screen over XDMCP connects to its
890c66
 session
890c66
890c66
Right now GTK preferentially picks the wayland display over an
890c66
X11 display if it finds one.
890c66
890c66
That causes a problem for XDMCP sessions, since there may be a
890c66
wayland display running on the local console for the GDM user.
890c66
890c66
This commit addresses the issue by forcing the X11 backend if
890c66
the session is X11.
890c66
---
890c66
 daemon/gdm-session.c | 19 +++++++++++++++++++
890c66
 1 file changed, 19 insertions(+)
890c66
890c66
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
890c66
index e6640aac7..0f821e390 100644
890c66
--- a/daemon/gdm-session.c
890c66
+++ b/daemon/gdm-session.c
890c66
@@ -2614,60 +2614,79 @@ set_up_session_environment (GdmSession *self)
890c66
 }
890c66
 
890c66
 static void
890c66
 send_display_mode (GdmSession *self,
890c66
                    GdmSessionConversation *conversation)
890c66
 {
890c66
         GdmSessionDisplayMode mode;
890c66
 
890c66
         mode = gdm_session_get_display_mode (self);
890c66
         gdm_dbus_worker_call_set_session_display_mode (conversation->worker_proxy,
890c66
                                                        gdm_session_display_mode_to_string (mode),
890c66
                                                        conversation->worker_cancellable,
890c66
                                                        NULL, NULL);
890c66
 }
890c66
 
890c66
 static void
890c66
 send_session_type (GdmSession *self,
890c66
                    GdmSessionConversation *conversation)
890c66
 {
890c66
         const char *session_type = "x11";
890c66
 
890c66
         if (self->priv->session_type != NULL) {
890c66
                 session_type = self->priv->session_type;
890c66
         }
890c66
 
890c66
         gdm_dbus_worker_call_set_environment_variable (conversation->worker_proxy,
890c66
                                                        "XDG_SESSION_TYPE",
890c66
                                                        session_type,
890c66
                                                        conversation->worker_cancellable,
890c66
                                                        NULL, NULL);
890c66
+
890c66
+        /* If the session type is x11, then set GDK_BACKEND to x11 as well.
890c66
+         * This is so gnome-session-check-accelerated from an XDMCP connection doesn't
890c66
+         * try to use the wayland display running on the local console for the gdm
890c66
+         * user login screen session.
890c66
+         *
890c66
+         * That's the only case where we let a user log in more than once, so it's
890c66
+         * the only situation that matters.
890c66
+         *
890c66
+         * We can drop this code if we ever switch the login screen to use systemd's
890c66
+         * DynamicUser feature.
890c66
+         */
890c66
+        if (g_strcmp0 (session_type, "x11") == 0) {
890c66
+                gdm_dbus_worker_call_set_environment_variable (conversation->worker_proxy,
890c66
+                                                               "GDK_BACKEND",
890c66
+                                                               "x11",
890c66
+                                                               conversation->worker_cancellable,
890c66
+                                                               NULL, NULL);
890c66
+        }
890c66
 }
890c66
 
890c66
 void
890c66
 gdm_session_open_session (GdmSession *self,
890c66
                           const char *service_name)
890c66
 {
890c66
         GdmSessionConversation *conversation;
890c66
 
890c66
         g_return_if_fail (GDM_IS_SESSION (self));
890c66
 
890c66
         conversation = find_conversation_by_name (self, service_name);
890c66
 
890c66
         if (conversation != NULL) {
890c66
                 send_display_mode (self, conversation);
890c66
                 send_session_type (self, conversation);
890c66
 
890c66
                 gdm_dbus_worker_call_open (conversation->worker_proxy,
890c66
                                            conversation->worker_cancellable,
890c66
                                            (GAsyncReadyCallback) on_opened, conversation);
890c66
         }
890c66
 }
890c66
 
890c66
 static void
890c66
 stop_all_other_conversations (GdmSession             *self,
890c66
                               GdmSessionConversation *conversation_to_keep,
890c66
                               gboolean                now)
890c66
 {
890c66
         GHashTableIter iter;
890c66
         gpointer key, value;
890c66
 
890c66
-- 
890c66
2.18.1
890c66