parent
1b44d3556e
commit
224724693b
@ -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 <rstrode@redhat.com>
|
||||
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
|
||||
|
||||
|
6
gdm.spec
6
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 <rstrode@redhat.com> - 40.1-2
|
||||
- A few clean ups and fixes in session selection patch
|
||||
Related: #1985099
|
||||
|
||||
* Fri Jul 23 2021 Ray Strode <rstrode@redhat.com> - 40.1-1
|
||||
- Update to 40.1
|
||||
- Allow vendor nvidia users to choose wayland sessions
|
||||
|
Loading…
Reference in New Issue
Block a user