diff --git a/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch b/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch index 184f163..730d40a 100644 --- a/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch +++ b/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch @@ -5,42 +5,15 @@ Subject: [PATCH 1/3] manager: allow multiple xdmcp logins for the same user --- common/gdm-settings-keys.h | 1 + - daemon/gdm-manager.c | 71 ++++++++++++++++++++++++++++---------- + daemon/gdm-manager.c | 72 ++++++++++++++++++++++++++++---------- data/gdm.schemas.in | 5 +++ - 3 files changed, 59 insertions(+), 18 deletions(-) + 3 files changed, 60 insertions(+), 18 deletions(-) diff --git a/common/gdm-settings-keys.h b/common/gdm-settings-keys.h -index 87685d3c..4b3a1ffe 100644 +index 87685d3..4b3a1ff 100644 --- a/common/gdm-settings-keys.h +++ b/common/gdm-settings-keys.h -@@ -30,37 +30,38 @@ G_BEGIN_DECLS - #define GDM_KEY_AUTO_LOGIN_ENABLE "daemon/AutomaticLoginEnable" - #define GDM_KEY_AUTO_LOGIN_USER "daemon/AutomaticLogin" - #define GDM_KEY_TIMED_LOGIN_ENABLE "daemon/TimedLoginEnable" - #define GDM_KEY_TIMED_LOGIN_USER "daemon/TimedLogin" - #define GDM_KEY_TIMED_LOGIN_DELAY "daemon/TimedLoginDelay" - #define GDM_KEY_INITIAL_SETUP_ENABLE "daemon/InitialSetupEnable" - #define GDM_KEY_PREFERRED_DISPLAY_SERVER "daemon/PreferredDisplayServer" - #define GDM_KEY_WAYLAND_ENABLE "daemon/WaylandEnable" - #define GDM_KEY_XORG_ENABLE "daemon/XorgEnable" - - #define GDM_KEY_DEBUG "debug/Enable" - - #define GDM_KEY_INCLUDE "greeter/Include" - #define GDM_KEY_EXCLUDE "greeter/Exclude" - #define GDM_KEY_INCLUDE_ALL "greeter/IncludeAll" - - #define GDM_KEY_DISALLOW_TCP "security/DisallowTCP" - #define GDM_KEY_ALLOW_REMOTE_AUTOLOGIN "security/AllowRemoteAutoLogin" - - #define GDM_KEY_XDMCP_ENABLE "xdmcp/Enable" - #define GDM_KEY_SHOW_LOCAL_GREETER "xdmcp/ShowLocalGreeter" - #define GDM_KEY_MAX_PENDING "xdmcp/MaxPending" - #define GDM_KEY_MAX_SESSIONS "xdmcp/MaxSessions" - #define GDM_KEY_MAX_WAIT "xdmcp/MaxWait" - #define GDM_KEY_DISPLAYS_PER_HOST "xdmcp/DisplaysPerHost" - #define GDM_KEY_UDP_PORT "xdmcp/Port" - #define GDM_KEY_INDIRECT "xdmcp/HonorIndirect" +@@ -57,6 +57,7 @@ G_BEGIN_DECLS #define GDM_KEY_MAX_WAIT_INDIRECT "xdmcp/MaxWaitIndirect" #define GDM_KEY_PING_INTERVAL "xdmcp/PingIntervalSeconds" #define GDM_KEY_WILLING "xdmcp/Willing" @@ -48,42 +21,11 @@ index 87685d3c..4b3a1ffe 100644 #define GDM_KEY_MULTICAST "chooser/Multicast" #define GDM_KEY_MULTICAST_ADDR "chooser/MulticastAddr" - - G_END_DECLS - - #endif /* _GDM_SETTINGS_KEYS_H */ diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c -index e1bc62d7..08c3cc17 100644 +index 681c9f6..2be7d2b 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c -@@ -566,93 +566,106 @@ get_display_and_details_for_bus_sender (GdmManager *self, - *out_tty = get_tty_for_session_id (session_id, &error); - - if (error != NULL) { - g_debug ("GdmManager: Error while retrieving tty for session: %s", - error->message); - g_clear_error (&error); - } - } - - display = gdm_display_store_find (self->priv->display_store, - lookup_by_session_id, - (gpointer) session_id); - - out: - if (out_display != NULL) { - *out_display = display; - } - - g_free (session_id); - } - - static gboolean - switch_to_compatible_user_session (GdmManager *manager, - GdmSession *session, - gboolean fail_if_already_switched) - { - gboolean res; +@@ -597,7 +597,7 @@ switch_to_compatible_user_session (GdmManager *manager, gboolean ret; const char *username; const char *seat_id; @@ -92,7 +34,7 @@ index e1bc62d7..08c3cc17 100644 GdmSession *existing_session; ret = FALSE; - +@@ -605,31 +605,44 @@ switch_to_compatible_user_session (GdmManager *manager, username = gdm_session_get_username (session); seat_id = gdm_session_get_display_seat_id (session); @@ -154,34 +96,7 @@ index e1bc62d7..08c3cc17 100644 ret = TRUE; out: - return ret; - } - - static GdmDisplay * - get_display_for_user_session (GdmSession *session) - { - return g_object_get_data (G_OBJECT (session), "gdm-display"); - } - - static GdmSession * - get_user_session_for_display (GdmDisplay *display) - { - if (display == NULL) { - return NULL; - } - - return g_object_get_data (G_OBJECT (display), "gdm-user-session"); - } - - static gboolean - add_session_record (GdmManager *manager, - GdmSession *session, - GPid pid, - SessionRecord record) - { - const char *username; - char *display_name, *hostname, *display_device, *display_seat_id; -@@ -1129,6 +1142,21 @@ open_temporary_reauthentication_channel (GdmManager *self, +@@ -1077,6 +1090,21 @@ open_temporary_reauthentication_channel (GdmManager *self, return g_strdup (address); } @@ -203,7 +118,7 @@ index e1bc62d7..08c3cc17 100644 static gboolean is_session_graphical (const char *session_id) { -@@ -1237,6 +1265,14 @@ gdm_manager_handle_open_reauthentication_channel (GdmDBusManager *manager +@@ -1188,6 +1216,14 @@ gdm_manager_handle_open_reauthentication_channel (GdmDBusManager *manager return TRUE; } @@ -219,37 +134,10 @@ index e1bc62d7..08c3cc17 100644 g_debug ("GdmManager: looking for login screen session for user %s on seat %s", username, seat_id); session = find_session_for_user_on_seat (self, diff --git a/data/gdm.schemas.in b/data/gdm.schemas.in -index a1035f95..929d13d9 100644 +index a1035f9..929d13d 100644 --- a/data/gdm.schemas.in +++ b/data/gdm.schemas.in -@@ -112,33 +112,38 @@ - - xdmcp/DisplaysPerHost - i - 1 - - - xdmcp/Port - i - 177 - - - xdmcp/HonorIndirect - b - true - - - xdmcp/MaxWaitIndirect - i - 30 - - - xdmcp/PingIntervalSeconds - i - 0 - - - xdmcp/Willing +@@ -139,6 +139,11 @@ s @gdmconfdir@/Xwilling @@ -262,5 +150,5 @@ index a1035f95..929d13d9 100644 -- -2.37.3 +2.51.0