From 224724693be2281117e0f220e9edeae33c53c6e3 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 28 Jul 2021 10:31:42 -0400 Subject: [PATCH] A few clean ups and fixes in session selection patch Related: #1985099 --- ...ctory-Provide-more-flexibility-for-c.patch | 111 ++++++++++++++---- gdm.spec | 6 +- 2 files changed, 94 insertions(+), 23 deletions(-) diff --git a/0001-local-display-factory-Provide-more-flexibility-for-c.patch b/0001-local-display-factory-Provide-more-flexibility-for-c.patch index 9b80dd9..64df572 100644 --- a/0001-local-display-factory-Provide-more-flexibility-for-c.patch +++ b/0001-local-display-factory-Provide-more-flexibility-for-c.patch @@ -1,4 +1,4 @@ -From bcf156120aa89cd9ba22bf862c42611e7984e211 Mon Sep 17 00:00:00 2001 +From 42958e082c611d2e2f466247e7d8759dfb5f607d Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 16 Jul 2021 12:34:57 -0400 Subject: [PATCH] local-display-factory: Provide more flexibility for @@ -26,10 +26,10 @@ fall back to "wayland". daemon/gdm-launch-environment.c | 9 ++ daemon/gdm-local-display-factory.c | 224 ++++++++++++++++++++++++----- daemon/gdm-manager.c | 11 +- - daemon/gdm-session.c | 109 +++++++------- + daemon/gdm-session.c | 115 ++++++++------- data/gdm.schemas.in | 10 ++ libgdm/gdm-sessions.c | 72 +++++++--- - 8 files changed, 355 insertions(+), 118 deletions(-) + 8 files changed, 361 insertions(+), 118 deletions(-) diff --git a/common/gdm-settings-keys.h b/common/gdm-settings-keys.h index f0059b5c..87685d3c 100644 @@ -98,7 +98,7 @@ index f0059b5c..87685d3c 100644 #endif /* _GDM_SETTINGS_KEYS_H */ diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c -index 3a260923..46d5a773 100644 +index 3a260923..34467856 100644 --- a/daemon/gdm-display.c +++ b/daemon/gdm-display.c @@ -66,83 +66,86 @@ typedef struct _GdmDisplayPrivate @@ -227,8 +227,8 @@ index 3a260923..46d5a773 100644 + GdmDisplayPrivate *priv; + g_autofree char *supported_session_types_string = NULL; + -+ if (supported_session_types != NULL) -+ supported_session_types_string = g_strjoinv (":", (GStrv) supported_session_types); ++ if (supported_session_types != NULL) ++ supported_session_types_string = g_strjoinv (":", (GStrv) supported_session_types); + + priv = gdm_display_get_instance_private (self); + g_debug ("GdmDisplay: supported session types: %s", supported_session_types_string); @@ -1436,7 +1436,7 @@ index 9c10adff..7c291013 100644 } diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c -index a010cecf..9f5e1e3f 100644 +index a010cecf..2b941e5e 100644 --- a/daemon/gdm-session.c +++ b/daemon/gdm-session.c @@ -106,84 +106,81 @@ struct _GdmSession @@ -1617,21 +1617,21 @@ index a010cecf..9f5e1e3f 100644 - g_array_prepend_val (search_array, wayland_search_dir); + if (g_str_equal (supported_type, "wayland") && + (type == NULL || g_str_equal (type, supported_type))) { -+ g_array_append_val (search_array, wayland_search_dir); - -- for (i = 0; system_data_dirs[i]; i++) { -- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL); -- g_array_insert_val (search_array, i, dir); -- } --#else -- for (i = 0; system_data_dirs[i]; i++) { -- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL); -- g_array_append_val (search_array, dir); + for (i = 0; system_data_dirs[i]; i++) { + gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL); + g_array_append_val (search_array, dir); + } + +- for (i = 0; system_data_dirs[i]; i++) { +- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL); +- g_array_insert_val (search_array, i, dir); ++ g_array_append_val (search_array, wayland_search_dir); } +-#else +- for (i = 0; system_data_dirs[i]; i++) { +- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL); +- g_array_append_val (search_array, dir); +- } - - g_array_append_val (search_array, wayland_search_dir); #endif @@ -1667,7 +1667,74 @@ index a010cecf..9f5e1e3f 100644 GError *error = NULL; gboolean res; char **search_dirs; -@@ -2230,68 +2235,72 @@ close_conversation (GdmSessionConversation *conversation) +@@ -444,60 +449,66 @@ load_key_file_for_file (GdmSession *self, + g_debug ("GdmSession: %s", error->message); + g_error_free (error); + } + g_key_file_free (key_file); + key_file = NULL; + } + + g_strfreev (search_dirs); + + return key_file; + } + + static gboolean + get_session_command_for_file (GdmSession *self, + const char *file, + const char *type, + char **command) + { + GKeyFile *key_file; + GError *error; + char *exec; + gboolean ret; + gboolean res; + + exec = NULL; + ret = FALSE; + if (command != NULL) { + *command = NULL; + } + ++ if (!supports_session_type (self, type)) { ++ g_debug ("GdmSession: ignoring %s session command request for file '%s'", ++ type, file); ++ goto out; ++ } ++ + g_debug ("GdmSession: getting session command for file '%s'", file); + key_file = load_key_file_for_file (self, file, type, NULL); + if (key_file == NULL) { + goto out; + } + + error = NULL; + res = g_key_file_get_boolean (key_file, + G_KEY_FILE_DESKTOP_GROUP, + G_KEY_FILE_DESKTOP_KEY_HIDDEN, + &error); + if (error == NULL && res) { + g_debug ("GdmSession: Session %s is marked as hidden", file); + goto out; + } + + exec = g_key_file_get_string (key_file, + G_KEY_FILE_DESKTOP_GROUP, + G_KEY_FILE_DESKTOP_KEY_TRY_EXEC, + NULL); + if (exec != NULL) { + res = is_prog_in_path (exec); + g_free (exec); + exec = NULL; + + if (! res) { + g_debug ("GdmSession: Command not found: %s", + G_KEY_FILE_DESKTOP_KEY_TRY_EXEC); + goto out; + } +@@ -2230,68 +2241,72 @@ close_conversation (GdmSessionConversation *conversation) if (conversation->worker_manager_interface != NULL) { unexport_worker_manager_interface (self, conversation->worker_manager_interface); @@ -1745,7 +1812,7 @@ index a010cecf..9f5e1e3f 100644 g_hash_table_insert (self->conversations, g_strdup (service_name), conversation); return TRUE; -@@ -3162,69 +3171,69 @@ gdm_session_get_session_id (GdmSession *self) +@@ -3162,69 +3177,69 @@ gdm_session_get_session_id (GdmSession *self) const char * gdm_session_get_conversation_session_id (GdmSession *self, @@ -1818,7 +1885,7 @@ index a010cecf..9f5e1e3f 100644 } else { set_session_type (self, NULL); } -@@ -3513,140 +3522,138 @@ gdm_session_set_property (GObject *object, +@@ -3513,140 +3528,138 @@ gdm_session_set_property (GObject *object, case PROP_DISPLAY_HOSTNAME: set_display_hostname (self, g_value_get_string (value)); break; @@ -1965,7 +2032,7 @@ index a010cecf..9f5e1e3f 100644 if (self->worker_server != NULL) { g_dbus_server_stop (self->worker_server); -@@ -4007,69 +4014,67 @@ gdm_session_class_init (GdmSessionClass *session_class) +@@ -4007,69 +4020,67 @@ gdm_session_class_init (GdmSessionClass *session_class) PROP_DISPLAY_X11_AUTHORITY_FILE, g_param_spec_string ("display-x11-authority-file", "display x11 authority file", @@ -2350,5 +2417,5 @@ index a1322505..f078e04b 100644 * Returns: (transfer full): a %NULL terminated list of session ids */ -- -2.31.1 +2.32.0 diff --git a/gdm.spec b/gdm.spec index 3276a13..c5c420a 100644 --- a/gdm.spec +++ b/gdm.spec @@ -11,7 +11,7 @@ Name: gdm Epoch: 1 Version: 40.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: The GNOME Display Manager License: GPLv2+ @@ -311,6 +311,10 @@ dconf update || : %{_libdir}/pkgconfig/gdm-pam-extensions.pc %changelog +* Wed Jul 28 2021 Ray Strode - 40.1-2 +- A few clean ups and fixes in session selection patch + Related: #1985099 + * Fri Jul 23 2021 Ray Strode - 40.1-1 - Update to 40.1 - Allow vendor nvidia users to choose wayland sessions