diff --git a/SOURCES/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch b/SOURCES/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch index f73fb2c..0b1d1a2 100644 --- a/SOURCES/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch +++ b/SOURCES/0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch @@ -1,7 +1,7 @@ -From 53950976344f38a96a17c1bbb3c093f67b49c493 Mon Sep 17 00:00:00 2001 +From bb58b5762272840a414f2bfe3ab59d733099a06c Mon Sep 17 00:00:00 2001 From: rpm-build Date: Thu, 20 Dec 2018 14:51:38 -0500 -Subject: [PATCH] manager: allow multiple xdmcp logins for the same user +Subject: [PATCH 1/2] manager: allow multiple xdmcp logins for the same user --- common/gdm-settings-keys.h | 1 + @@ -339,5 +339,5 @@ index 8ad203101..003f92c63 100644 -- -2.21.0 +2.21.1 diff --git a/SOURCES/0002-gdm-x-session-run-session-bus-on-non-seat0-seats.patch b/SOURCES/0002-gdm-x-session-run-session-bus-on-non-seat0-seats.patch new file mode 100644 index 0000000..df3c8bb --- /dev/null +++ b/SOURCES/0002-gdm-x-session-run-session-bus-on-non-seat0-seats.patch @@ -0,0 +1,165 @@ +From 84b823187c8e0b23274cd1a93f4e47a2c585c75b Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 5 Feb 2020 15:20:48 -0500 +Subject: [PATCH 2/2] gdm-x-session: run session bus on non-seat0 seats + +GNOME doesn't deal very well with multiple sessions +running on a multiple seats at the moment. + +Until that's fixed, ensure sessions run on auxillary +seats get their own session bus. +--- + daemon/gdm-session.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c +index a8263ba11..55637b378 100644 +--- a/daemon/gdm-session.c ++++ b/daemon/gdm-session.c +@@ -2846,130 +2846,139 @@ on_start_program_cb (GdmDBusWorker *worker, + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CLOSED) || + g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + + self = conversation->session; + service_name = conversation->service_name; + + if (worked) { + self->priv->session_pid = pid; + self->priv->session_conversation = conversation; + + g_debug ("GdmSession: Emitting 'session-started' signal with pid '%d'", pid); + g_signal_emit (self, signals[SESSION_STARTED], 0, service_name, pid); + } else { + gdm_session_stop_conversation (self, service_name); + + g_debug ("GdmSession: Emitting 'session-start-failed' signal"); + g_signal_emit (self, signals[SESSION_START_FAILED], 0, service_name, error->message); + } + } + + void + gdm_session_start_session (GdmSession *self, + const char *service_name) + { + GdmSessionConversation *conversation; + GdmSessionDisplayMode display_mode; + gboolean is_x11 = TRUE; + gboolean run_launcher = FALSE; + gboolean allow_remote_connections = FALSE; ++ gboolean run_separate_bus = FALSE; + char *command; + char *program; + + g_return_if_fail (GDM_IS_SESSION (self)); + g_return_if_fail (self->priv->session_conversation == NULL); + + conversation = find_conversation_by_name (self, service_name); + + if (conversation == NULL) { + g_warning ("GdmSession: Tried to start session of " + "nonexistent conversation %s", service_name); + return; + } + + stop_all_other_conversations (self, conversation, FALSE); + + display_mode = gdm_session_get_display_mode (self); + + #ifdef ENABLE_WAYLAND_SUPPORT + is_x11 = g_strcmp0 (self->priv->session_type, "wayland") != 0; + #endif + + if (display_mode == GDM_SESSION_DISPLAY_MODE_LOGIND_MANAGED || + display_mode == GDM_SESSION_DISPLAY_MODE_NEW_VT) { + run_launcher = TRUE; + } + ++ if (g_strcmp0 (self->priv->display_seat_id, "seat0") != 0 && !run_launcher) { ++ run_separate_bus = TRUE; ++ } ++ + if (self->priv->selected_program == NULL) { + gboolean run_xsession_script; + + command = get_session_command (self); + + run_xsession_script = !gdm_session_bypasses_xsession (self); + + if (self->priv->display_is_local) { + gboolean disallow_tcp = TRUE; + gdm_settings_direct_get_boolean (GDM_KEY_DISALLOW_TCP, &disallow_tcp); + allow_remote_connections = !disallow_tcp; + } else { + allow_remote_connections = TRUE; + } + + if (run_launcher) { + if (is_x11) { + program = g_strdup_printf (LIBEXECDIR "/gdm-x-session %s %s\"%s\"", + run_xsession_script? "--run-script " : "", + allow_remote_connections? "--allow-remote-connections " : "", + command); + } else { + program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session \"%s\"", + command); + } + } else if (run_xsession_script) { +- program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command); ++ if (run_separate_bus) { ++ program = g_strdup_printf ("dbus-run-session -- " GDMCONFDIR "/Xsession \"%s\"", command); ++ } else { ++ program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command); ++ } + } else { + program = g_strdup (command); + } + + g_free (command); + } else { + if (run_launcher) { + if (is_x11) { +- program = g_strdup_printf (LIBEXECDIR "/gdm-x-session \"%s\"", +- self->priv->selected_program); ++ program = g_strdup_printf (LIBEXECDIR "/gdm-x-session \"%s\"", ++ self->priv->selected_program); + } else { + program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session \"%s\"", + self->priv->selected_program); + } + } else { +- if (g_strcmp0 (self->priv->display_seat_id, "seat0") != 0) { ++ if (run_separate_bus) { + program = g_strdup_printf ("dbus-run-session -- %s", + self->priv->selected_program); + } else { + program = g_strdup (self->priv->selected_program); + } + } + } + + set_up_session_environment (self); + send_environment (self, conversation); + + gdm_dbus_worker_call_start_program (conversation->worker_proxy, + program, + conversation->worker_cancellable, + (GAsyncReadyCallback) on_start_program_cb, + conversation); + g_free (program); + } + + static void + stop_all_conversations (GdmSession *self) + { + stop_all_other_conversations (self, NULL, TRUE); + } + + static void + do_reset (GdmSession *self) + { + stop_all_conversations (self); + +-- +2.21.1 + diff --git a/SPECS/gdm.spec b/SPECS/gdm.spec index bfb96b1..eda8f91 100644 --- a/SPECS/gdm.spec +++ b/SPECS/gdm.spec @@ -10,7 +10,7 @@ Name: gdm Epoch: 1 Version: 3.28.3 -Release: 28%{?dist} +Release: 29%{?dist} Summary: The GNOME Display Manager License: GPLv2+ @@ -51,6 +51,7 @@ Patch90003: 0003-session-Don-t-allow-greeter-operations-on-an-running.patch Patch90004: 0004-GdmManager-Don-t-perform-timed-login-if-session-gets.patch Patch100001: 0001-manager-allow-multiple-xdmcp-logins-for-the-same-use.patch +Patch100002: 0002-gdm-x-session-run-session-bus-on-non-seat0-seats.patch Patch110001: 0001-display-ask-accountservice-if-there-are-users-rather.patch @@ -356,6 +357,10 @@ fi %{_libdir}/pkgconfig/gdm-pam-extensions.pc %changelog +* Wed Feb 05 2020 Ray Strode - 3.28.3-29 +- Make GNOME work slightly better in the multiple logins case. + Related: #1710882 + * Sun Dec 15 2019 Ray Strode - 3.28.3-28 - Correct wayland session detection logic when deciding whether or not to run Xsession script