67 lines
2.4 KiB
Diff
67 lines
2.4 KiB
Diff
From 714332d3065a41e8bae61234cd231219cfcc95d6 Mon Sep 17 00:00:00 2001
|
|
From: Joan Torres Lopez <joantolo@redhat.com>
|
|
Date: Tue, 3 Feb 2026 14:43:43 +0100
|
|
Subject: [PATCH] main: Call RegisterDisplay once UI has initialized
|
|
|
|
RegisterDisplay is called to signal that graphics have settled,
|
|
which allows GDM to terminate pending greeters and plymouth.
|
|
|
|
Previously, RegisterSession was used for both recording the login
|
|
and terminating greeters. This caused a race condition where the
|
|
new user shell was setting up while the greeter was tearing down,
|
|
leading to configuration conflicts during the asynchronous handoff.
|
|
|
|
By splitting into RegisterSession (called early to record login) and
|
|
RegisterDisplay (called after graphics settle), the greeter teardown
|
|
is delayed until the new session has completed its initial modeset.
|
|
|
|
Fixes: 32a01330 ("main: Register session with GDM on startup")
|
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4057>
|
|
---
|
|
js/misc/loginManager.js | 18 ++++++++++++++++++
|
|
js/ui/main.js | 2 ++
|
|
2 files changed, 20 insertions(+)
|
|
|
|
diff --git a/js/misc/loginManager.js b/js/misc/loginManager.js
|
|
index 4eee98b..63caea3 100644
|
|
--- a/js/misc/loginManager.js
|
|
+++ b/js/misc/loginManager.js
|
|
@@ -68,6 +68,24 @@ async function registerSessionWithGDM() {
|
|
}
|
|
}
|
|
|
|
+async function registerDisplayWithGDM() {
|
|
+ log('Registering display with GDM');
|
|
+ try {
|
|
+ await Gio.DBus.system.call(
|
|
+ 'org.gnome.DisplayManager',
|
|
+ '/org/gnome/DisplayManager/Manager',
|
|
+ 'org.gnome.DisplayManager.Manager',
|
|
+ 'RegisterDisplay',
|
|
+ GLib.Variant.new('(a{ss})', [{}]), null,
|
|
+ Gio.DBusCallFlags.NONE, -1, null);
|
|
+ } catch (e) {
|
|
+ if (!e.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_METHOD))
|
|
+ log(`Error registering display with GDM: ${e.message}`);
|
|
+ else
|
|
+ log('Not calling RegisterDisplay(): method not exported, GDM too old?');
|
|
+ }
|
|
+}
|
|
+
|
|
let _loginManager = null;
|
|
|
|
/**
|
|
diff --git a/js/ui/main.js b/js/ui/main.js
|
|
index c753ab6..2bcc819 100644
|
|
--- a/js/ui/main.js
|
|
+++ b/js/ui/main.js
|
|
@@ -309,6 +309,8 @@ function _initializeUI() {
|
|
sessionMode.currentMode !== 'initial-setup')
|
|
_handleLockScreenWarning();
|
|
|
|
+ LoginManager.registerDisplayWithGDM();
|
|
+
|
|
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
|
|
if (perfModuleName) {
|
|
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
|