From fc3503f16e9de535d2a36b904720b360370f880f Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 15 May 2020 10:08:24 -0400 Subject: [PATCH 45/51] local-display-factory: Always force login screen to VT 1 These days we always want the login screen on VT 1, even when it's created by user switching. Unfortunately, since commit f843233ad the login screen won't naturally pick VT 1 when user switching. This commit forces it to make the right choice. Closes https://gitlab.gnome.org/GNOME/gdm/-/issues/602 --- daemon/gdm-local-display-factory.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c index 7a013c694..a288f8765 100644 --- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c @@ -197,84 +197,87 @@ store_display (GdmLocalDisplayFactory *factory, gdm_display_store_add (store, display); } static gboolean gdm_local_display_factory_use_wayland (void) { #ifdef ENABLE_WAYLAND_SUPPORT gboolean wayland_enabled = FALSE; if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) { if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) ) return TRUE; } #endif return FALSE; } /* Example: dbus-send --system --dest=org.gnome.DisplayManager \ --type=method_call --print-reply --reply-timeout=2000 \ /org/gnome/DisplayManager/Manager \ org.gnome.DisplayManager.Manager.GetDisplays */ gboolean gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *factory, char **id, GError **error) { gboolean ret; GdmDisplay *display = NULL; + gboolean is_initial = FALSE; g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); ret = FALSE; g_debug ("GdmLocalDisplayFactory: Creating transient display"); #ifdef ENABLE_USER_DISPLAY_SERVER display = gdm_local_display_new (); if (gdm_local_display_factory_use_wayland ()) g_object_set (G_OBJECT (display), "session-type", "wayland", NULL); + is_initial = TRUE; #else if (display == NULL) { guint32 num; num = take_next_display_number (factory); display = gdm_legacy_display_new (num); } #endif g_object_set (display, "seat-id", "seat0", "allow-timed-login", FALSE, + "is-initial", is_initial, NULL); store_display (factory, display); if (! gdm_display_manage (display)) { display = NULL; goto out; } if (! gdm_display_get_id (display, id, NULL)) { display = NULL; goto out; } ret = TRUE; out: /* ref either held by store or not at all */ g_object_unref (display); return ret; } static gboolean finish_display_on_seat_if_waiting (GdmDisplayStore *display_store, GdmDisplay *display, const char *seat_id) { if (gdm_display_get_status (display) != GDM_DISPLAY_WAITING_TO_FINISH) return FALSE; -- 2.27.0