Import OL

This commit is contained in:
eabdullin 2025-08-12 14:41:00 +03:00
parent ff546803f7
commit 68d14c63b1
10 changed files with 289 additions and 3495 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
gdm-47.alpha.tar.xz
gdm-47.0.tar.xz

View File

@ -0,0 +1,29 @@
From e938a72b8ee65b7db2ad76f63dc3f77713871a82 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Thu, 3 Jul 2025 12:09:40 +0200
Subject: [PATCH] headless-session: Fix autostarting on boot
Make it wanted by graphical.target, and make sure it launches after gdm.
---
data/gnome-headless-session@.service | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/data/gnome-headless-session@.service b/data/gnome-headless-session@.service
index 269d16288..cba7526f8 100644
--- a/data/gnome-headless-session@.service
+++ b/data/gnome-headless-session@.service
@@ -1,6 +1,10 @@
[Unit]
Description=Headless desktop session
+After=multi-user.target rescue.service rescue.target display-manager.service
[Service]
ExecStart=/usr/libexec/gdm-headless-login-session --user=%i
Restart=on-failure
+
+[Install]
+WantedBy=graphical.target
--
2.49.0

View File

@ -0,0 +1,26 @@
From 0d5fd96165d3bebc0d17245d31aee5bb424ea3ec Mon Sep 17 00:00:00 2001
From: Joan Torres <joantolo@redhat.com>
Date: Mon, 28 Apr 2025 11:51:58 +0200
Subject: [PATCH] meson: Define missing HAVE_LIBAUDIT
This allows using libaudit to use audit logs.
---
meson.build | 1 +
1 file changed, 1 insertion(+)
diff --git a/meson.build b/meson.build
index 8da5ae878..eaa93a652 100644
--- a/meson.build
+++ b/meson.build
@@ -263,6 +263,7 @@ conf.set_quoted('GNOME_SETTINGS_DAEMON_DIR', gnome_settings_daemon_dir)
conf.set_quoted('LANG_CONFIG_FILE', lang_config_file)
conf.set_quoted('PAM_PROFILES_DIR', pam_profiles_dir[0] == '/' ? pam_profiles_dir : '/' + pam_profiles_dir)
conf.set('HAVE_ADT', have_adt)
+conf.set('HAVE_LIBAUDIT', libaudit_dep.found())
conf.set('HAVE_UTMP_H', have_utmp_header)
conf.set('HAVE_UTMPX_H', have_utmpx_header)
conf.set('HAVE_POSIX_GETPWNAM_R', have_posix_getpwnam_r)
--
2.49.0

View File

@ -0,0 +1,63 @@
From 8e77b79f78111f67cf42acfad57ad2a7dc510dc7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 22 Nov 2024 16:23:58 +0100
Subject: [PATCH] schema: Add `banner-message-path` and `-source` settings
The new settings allows reading the banner message from a file
instead of GSettings. This is mainly useful for `/etc/motd`
and similar mechanisms, to show the same message for both
graphical and non-graphical logins.
---
data/org.gnome.login-screen.gschema.xml | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/data/org.gnome.login-screen.gschema.xml b/data/org.gnome.login-screen.gschema.xml
index 7b5c54d1b..5a547e9b8 100644
--- a/data/org.gnome.login-screen.gschema.xml
+++ b/data/org.gnome.login-screen.gschema.xml
@@ -1,5 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="gdm">
+ <enum id="org.gnome.login-screen.BannerSource">
+ <value value="1" nick="settings"/>
+ <value value="2" nick="file"/>
+ </enum>
+
<schema id="org.gnome.login-screen" path="/org/gnome/login-screen/">
<key name="enable-fingerprint-authentication" type="b">
<default>true</default>
@@ -70,6 +75,15 @@
Set to true to show the banner message text.
</description>
</key>
+ <key name="banner-message-source" enum="org.gnome.login-screen.BannerSource">
+ <default>"settings"</default>
+ <summary>
+ Banner message source
+ </summary>
+ <description>
+ The source of the text banner message on the login screen.
+ </description>
+ </key>
<key name="banner-message-text" type="s">
<default>''</default>
<summary>
@@ -79,6 +93,15 @@
Text banner message to show in the login window.
</description>
</key>
+ <key name="banner-message-path" type="s">
+ <default>''</default>
+ <summary>
+ Banner message path
+ </summary>
+ <description>
+ Path to text file with banner message to show in the login window.
+ </description>
+ </key>
<key name="disable-restart-buttons" type="b">
<default>false</default>
<summary>
--
2.48.1

View File

@ -0,0 +1,97 @@
From 3d67dc8e992b69c331b403b5ff7f680700392977 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joan=20Torres=20L=C3=B3pez?= <joantolo@redhat.com>
Date: Wed, 11 Jun 2025 17:54:52 +0200
Subject: [PATCH] session: Fix memory leak on new outside connection
On a new outside connection some new dbus interfaces are created and
assigned as properties to session. However the assignation wasn't
considering the previous reference of these interfaces, leading to a
memory leak.
Use g_set_object to fix it.
---
daemon/gdm-session.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 33dee7606..08ba39cf6 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -1840,7 +1840,8 @@ static void
export_user_verifier_interface (GdmSession *self,
GDBusConnection *connection)
{
- GdmDBusUserVerifier *user_verifier_interface;
+ g_autoptr (GdmDBusUserVerifier) user_verifier_interface = NULL;
+
user_verifier_interface = GDM_DBUS_USER_VERIFIER (gdm_dbus_user_verifier_skeleton_new ());
g_object_set_data (G_OBJECT (connection), "gdm-session", self);
@@ -1871,14 +1872,14 @@ export_user_verifier_interface (GdmSession *self,
GDM_SESSION_DBUS_OBJECT_PATH,
NULL);
- self->user_verifier_interface = user_verifier_interface;
+ g_set_object (&self->user_verifier_interface, user_verifier_interface);
}
static void
export_greeter_interface (GdmSession *self,
GDBusConnection *connection)
{
- GdmDBusGreeter *greeter_interface;
+ g_autoptr (GdmDBusGreeter) greeter_interface = NULL;
greeter_interface = GDM_DBUS_GREETER (gdm_dbus_greeter_skeleton_new ());
@@ -1912,8 +1913,7 @@ export_greeter_interface (GdmSession *self,
GDM_SESSION_DBUS_OBJECT_PATH,
NULL);
- self->greeter_interface = greeter_interface;
-
+ g_set_object (&self->greeter_interface, greeter_interface);
}
static gboolean
@@ -1931,7 +1931,7 @@ static void
export_remote_greeter_interface (GdmSession *self,
GDBusConnection *connection)
{
- GdmDBusRemoteGreeter *remote_greeter_interface;
+ g_autoptr (GdmDBusRemoteGreeter) remote_greeter_interface = NULL;
remote_greeter_interface = GDM_DBUS_REMOTE_GREETER (gdm_dbus_remote_greeter_skeleton_new ());
@@ -1945,8 +1945,7 @@ export_remote_greeter_interface (GdmSession *self,
GDM_SESSION_DBUS_OBJECT_PATH,
NULL);
- self->remote_greeter_interface = remote_greeter_interface;
-
+ g_set_object (&self->remote_greeter_interface, remote_greeter_interface);
}
static gboolean
@@ -1966,7 +1965,7 @@ static void
export_chooser_interface (GdmSession *self,
GDBusConnection *connection)
{
- GdmDBusChooser *chooser_interface;
+ g_autoptr (GdmDBusChooser) chooser_interface = NULL;
chooser_interface = GDM_DBUS_CHOOSER (gdm_dbus_chooser_skeleton_new ());
@@ -1980,7 +1979,7 @@ export_chooser_interface (GdmSession *self,
GDM_SESSION_DBUS_OBJECT_PATH,
NULL);
- self->chooser_interface = chooser_interface;
+ g_set_object (&self->chooser_interface, chooser_interface);
}
static void
--
2.49.0

View File

@ -1,19 +0,0 @@
Avoid the Xorg build-time dependency, as we already know the answers
to the questions that are trying to be determined.
diff --git a/meson.build b/meson.build
index bf0e58506..7d8f964c3 100644
--- a/meson.build
+++ b/meson.build
@@ -92,8 +92,9 @@ if find_x_server_out != ''
else
# what to do, what to do, this is wrong, but this just sets the
# defaults, perhaps this user is cross compiling or some such
- x_path = '/usr/bin/X11:/usr/X11R6/bin:/opt/X11R6/bin'
- x_bin = '/usr/bin/X'
+ x_path = '/usr/bin'
+ x_bin = '/usr/bin/Xorg'
+ xserver_has_listen = true
endif
xdmcp_dep = cc.find_library('Xdmcp', required: get_option('xdmcp'))
if xdmcp_dep.found() and get_option('tcp-wrappers')

3198
gdm.spec

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
From 37c6a13fd6b605206120f99bc145d1a65a1404d1 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Tue, 4 Apr 2023 07:40:14 -0700
Subject: [PATCH] Disable Wayland on Matrox chipsets
Orabug: 34816116
Signed-off-by: Alex Burmashev <alexander.burmashev@oracle.com>
Signed-off-by: Darren Archibald <darren.archibald@oracle.com>
---
data/61-gdm.rules.in | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in
index 7fb3d61..81a9269 100644
--- a/data/61-gdm.rules.in
+++ b/data/61-gdm.rules.in
@@ -18,6 +18,16 @@ ATTR{vendor}=="0x1234", ATTR{device}=="0x1111", RUN+="/usr/bin/touch /run/udev/g
# disable Wayland on Hi1710 chipsets
ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", GOTO="gdm_disable_wayland"
+# disable Wayland on Matrox chipsets
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0522", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0524", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0530", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0532", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0533", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0534", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0536", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0538", GOTO="gdm_disable_wayland"
+
LABEL="gdm_pci_device_end"
# disable Wayland if modesetting is disabled
--
2.31.1

View File

@ -1 +1 @@
SHA512 (gdm-47.alpha.tar.xz) = 768931fc80b09754135ea0f8014bd3ba24ab2f74428efcfafb09720915264644186fbbcfd59004ca76df8ff29c8f41a224afb1d3ccaead47fae1e77ab4e7ae2e
5578b2839ec78ef0b155a6ef6b82384495ef0f3ceb49f4bc7c656bf9dafa95b260148c7fc9b8295b71d4a2d33f6fe6c4a47485cd9eba5c0929f0492ba06e0893 gdm-47.0.tar.xz

View File

@ -1,311 +0,0 @@
From a5dcb9699cbb18c70da0a6ee57faa20124130787 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Fri, 26 Jul 2024 16:21:35 -0400
Subject: [PATCH] wayland-only.patch
---
daemon/gdm-local-display-factory.c | 12 +++++++++++-
libgdm/gdm-sessions.c | 20 ++++++++++++--------
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index f2d8e15..cfbd598 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -192,75 +192,81 @@ take_next_display_number (GdmLocalDisplayFactory *factory)
/* now reserve this number */
g_debug ("GdmLocalDisplayFactory: Reserving X display: %u", ret);
g_hash_table_insert (factory->used_display_numbers, GUINT_TO_POINTER (ret), NULL);
return ret;
}
static char *
get_preferred_display_server (GdmLocalDisplayFactory *factory)
{
g_autofree gchar *preferred_display_server = NULL;
gboolean wayland_enabled = FALSE, xorg_enabled = FALSE;
gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled);
gdm_settings_direct_get_boolean (GDM_KEY_XORG_ENABLE, &xorg_enabled);
if (wayland_enabled && !xorg_enabled) {
return g_strdup ("wayland");
}
if (!wayland_enabled && !xorg_enabled) {
return g_strdup ("none");
}
gdm_settings_direct_get_string (GDM_KEY_PREFERRED_DISPLAY_SERVER, &preferred_display_server);
if (g_strcmp0 (preferred_display_server, "wayland") == 0) {
if (wayland_enabled)
return g_strdup (preferred_display_server);
+#ifdef ENABLE_XORG_SUPPORT
else
return g_strdup ("xorg");
+#endif
}
if (g_strcmp0 (preferred_display_server, "xorg") == 0) {
+#ifdef ENABLE_XORG_SUPPORT
if (xorg_enabled)
return g_strdup (preferred_display_server);
else
+#endif
return g_strdup ("wayland");
}
+#ifdef ENABLE_XORG_SUPPORT
if (g_strcmp0 (preferred_display_server, "legacy-xorg") == 0) {
if (xorg_enabled)
return g_strdup (preferred_display_server);
}
+#endif
return g_strdup ("none");
}
struct GdmDisplayServerConfiguration {
const char *display_server;
const char *key;
const char *binary;
const char *session_type;
} display_server_configuration[] = {
#ifdef ENABLE_WAYLAND_SUPPORT
{ "wayland", GDM_KEY_WAYLAND_ENABLE, "/usr/bin/Xwayland", "wayland" },
#endif
{ "xorg", GDM_KEY_XORG_ENABLE, "/usr/bin/Xorg", "x11" },
{ NULL, NULL, NULL },
};
static gboolean
display_server_enabled (GdmLocalDisplayFactory *factory,
const char *display_server)
{
size_t i;
for (i = 0; display_server_configuration[i].display_server != NULL; i++) {
const char *key = display_server_configuration[i].key;
const char *binary = display_server_configuration[i].binary;
gboolean enabled = FALSE;
if (!g_str_equal (display_server_configuration[i].display_server,
display_server))
@@ -289,74 +295,78 @@ get_session_type_for_display_server (GdmLocalDisplayFactory *factory,
display_server))
continue;
return display_server_configuration[i].session_type;
}
return NULL;
}
static char **
gdm_local_display_factory_get_session_types (GdmLocalDisplayFactory *factory,
gboolean should_fall_back)
{
g_autofree gchar *preferred_display_server = NULL;
const char *fallback_display_server = NULL;
gboolean wayland_preferred = FALSE;
gboolean xorg_preferred = FALSE;
g_autoptr (GPtrArray) session_types_array = NULL;
char **session_types;
session_types_array = g_ptr_array_new ();
preferred_display_server = get_preferred_display_server (factory);
g_debug ("GdmLocalDisplayFactory: Getting session type (prefers %s, falling back: %s)",
preferred_display_server, should_fall_back? "yes" : "no");
wayland_preferred = g_str_equal (preferred_display_server, "wayland");
xorg_preferred = g_str_equal (preferred_display_server, "xorg");
+#ifdef ENABLE_XORG_SUPPORT
if (wayland_preferred)
fallback_display_server = "xorg";
else if (xorg_preferred)
fallback_display_server = "wayland";
else
return NULL;
+#endif
- if (!should_fall_back) {
+ if (!should_fall_back || fallback_display_server == NULL) {
if (display_server_enabled (factory, preferred_display_server))
g_ptr_array_add (session_types_array, (gpointer) get_session_type_for_display_server (factory, preferred_display_server));
}
+#ifdef ENABLE_XORG_SUPPORT
if (display_server_enabled (factory, fallback_display_server))
g_ptr_array_add (session_types_array, (gpointer) get_session_type_for_display_server (factory, fallback_display_server));
+#endif
if (session_types_array->len == 0)
return NULL;
g_ptr_array_add (session_types_array, NULL);
session_types = g_strdupv ((char **) session_types_array->pdata);
return session_types;
}
static void
on_display_disposed (GdmLocalDisplayFactory *factory,
GdmDisplay *display)
{
g_debug ("GdmLocalDisplayFactory: Display %p disposed", display);
}
static void
store_display (GdmLocalDisplayFactory *factory,
GdmDisplay *display)
{
GdmDisplayStore *store;
store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
gdm_display_store_add (store, display);
}
/*
Example:
diff --git a/libgdm/gdm-sessions.c b/libgdm/gdm-sessions.c
index 0aedcf9..211b6f6 100644
--- a/libgdm/gdm-sessions.c
+++ b/libgdm/gdm-sessions.c
@@ -304,115 +304,119 @@ collect_sessions_from_directory (const char *dirname)
g_autofree char *other_path = g_build_filename (dirname, other_name, NULL);
if (g_file_test (other_path, G_FILE_TEST_EXISTS)) {
g_debug ("Running under X11, ignoring %s", filename);
continue;
}
}
}
id = g_strndup (filename, strlen (filename) - strlen (".desktop"));
full_path = g_build_filename (dirname, filename, NULL);
load_session_file (id, full_path);
g_free (id);
g_free (full_path);
}
g_dir_close (dir);
}
static void
collect_sessions (void)
{
g_autoptr(GHashTable) names_seen_before = NULL;
g_autoptr(GPtrArray) xorg_search_array = NULL;
g_autoptr(GPtrArray) wayland_search_array = NULL;
gchar *session_dir = NULL;
int i;
- const char *xorg_search_dirs[] = {
- "/etc/X11/sessions/",
- DMCONFDIR "/Sessions/",
- DATADIR "/gdm/BuiltInSessions/",
- DATADIR "/xsessions/",
- };
const gchar *supported_session_types_env = NULL;
g_auto (GStrv) supported_session_types = NULL;
+ const gchar * const *system_data_dirs = g_get_system_data_dirs ();
supported_session_types_env = g_getenv ("GDM_SUPPORTED_SESSION_TYPES");
if (supported_session_types_env != NULL) {
supported_session_types = g_strsplit (supported_session_types_env, ":", -1);
}
names_seen_before = g_hash_table_new (g_str_hash, g_str_equal);
- xorg_search_array = g_ptr_array_new_with_free_func (g_free);
- const gchar * const *system_data_dirs = g_get_system_data_dirs ();
+#ifdef ENABLE_XORG_SUPPORT
+ const char *xorg_search_dirs[] = {
+ "/etc/X11/sessions/",
+ DMCONFDIR "/Sessions/",
+ DATADIR "/gdm/BuiltInSessions/",
+ DATADIR "/xsessions/",
+ };
+ xorg_search_array = g_ptr_array_new_with_free_func (g_free);
for (i = 0; system_data_dirs[i]; i++) {
session_dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
g_ptr_array_add (xorg_search_array, session_dir);
}
for (i = 0; i < G_N_ELEMENTS (xorg_search_dirs); i++) {
g_ptr_array_add (xorg_search_array, g_strdup (xorg_search_dirs[i]));
}
+#endif
#ifdef ENABLE_WAYLAND_SUPPORT
const char *wayland_search_dirs[] = {
DATADIR "/wayland-sessions/",
};
wayland_search_array = g_ptr_array_new_with_free_func (g_free);
for (i = 0; system_data_dirs[i]; i++) {
session_dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
g_ptr_array_add (wayland_search_array, session_dir);
}
for (i = 0; i < G_N_ELEMENTS (wayland_search_dirs); i++) {
g_ptr_array_add (wayland_search_array, g_strdup (wayland_search_dirs[i]));
}
#endif
if (gdm_available_sessions_map == NULL) {
gdm_available_sessions_map = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, (GDestroyNotify)gdm_session_file_free);
}
+#ifdef ENABLE_XORG_SUPPORT
if (!supported_session_types || g_strv_contains ((const char * const *) supported_session_types, "x11")) {
for (i = xorg_search_array->len - 1; i >= 0; i--) {
collect_sessions_from_directory (g_ptr_array_index (xorg_search_array, i));
}
}
+#endif
#ifdef ENABLE_WAYLAND_SUPPORT
#ifdef ENABLE_USER_DISPLAY_SERVER
if (!supported_session_types || g_strv_contains ((const char * const *) supported_session_types, "wayland")) {
for (i = wayland_search_array->len - 1; i >= 0; i--) {
collect_sessions_from_directory (g_ptr_array_index (wayland_search_array, i));
}
}
#endif
#endif
g_hash_table_foreach_remove (gdm_available_sessions_map,
remove_duplicate_sessions,
names_seen_before);
}
static gint
compare_session_ids (gconstpointer a,
gconstpointer b)
{
GdmSessionFile *session_a, *session_b;
session_a = (GdmSessionFile *) g_hash_table_lookup (gdm_available_sessions_map, a);
session_b = (GdmSessionFile *) g_hash_table_lookup (gdm_available_sessions_map, b);
if (session_a == NULL)
return -1;
if (session_b == NULL)
return 1;
--
2.44.0