guix_mirror_bot pushed a commit to branch gnome-team
in repository guix.
commit 668d82e7c7042c9b906c4d68675805b257f663fc
Author: Maxim Cournoyer <[email protected]>
AuthorDate: Wed Aug 26 23:00:01 2026 +0900
[WIP] gnu: gdm: Update to 50.2.
Note: this patch is marked as WIP, as it appears in a VM that GDM does not
start correctly; instead, a regular GNOME Session for the ‘gdm-greeter’ user
is started. Once this problem is taken care of, remove the WIP mark and
this
comment.
* gnu/packages/gnome.scm (gdm): Update to 50.2.
[source]: Delete "gdm-remove-hardcoded-xwayland-path.patch" patch.
[#:configure-flags]: Delete obsolete udev-dir flag.
[#:phases] {patch-paths}: Delete.
{patch-gnome-session}: New.
{pre-configure}: Remove obsolete patching; move most
static patching to the 'gdm-wayland-session-wrapper-from-env.patch' patch,
for
safety and maintainability.
{install-placeholder-desktop-entry}: Remove obsolete phase.
[inputs]: Replace gtk+ with gtk.
[home-page]: Update.
* gnu/packages/patches/gdm-default-session.patch
* gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch: Rebase patches.
* gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch: Delete.
This
is now handled via the GDM-honored GDM_X_SERVER_PATH environment variable.
* gnu/services/xorg.scm (gdm-shepherd-service): Rename GDM_X_SERVER
environment variable to GDM_X_SERVER_PATH to match upstream.
Signed-off-by: Liliana Marie Prikler <[email protected]>
---
gnu/local.mk | 1 -
gnu/packages/gnome.scm | 126 ++-------------------
gnu/packages/patches/gdm-default-session.patch | 37 +++---
.../patches/gdm-pass-gdk-pixbuf-loader-env.patch | 4 +-
.../gdm-remove-hardcoded-xwayland-path.patch | 15 ---
.../gdm-wayland-session-wrapper-from-env.patch | 125 ++++++++++++++++----
gnu/services/xorg.scm | 2 +-
7 files changed, 140 insertions(+), 170 deletions(-)
diff --git a/gnu/local.mk b/gnu/local.mk
index af61adbfa2e..8a2dbdc14a3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1450,7 +1450,6 @@ dist_patch_DATA =
\
%D%/packages/patches/gdbm-lockwait-test.patch \
%D%/packages/patches/gdk-pixbuf-honor-GUIX_GDK_PIXBUF_MODULE_FILES.patch
\
%D%/packages/patches/gdm-default-session.patch \
- %D%/packages/patches/gdm-remove-hardcoded-xwayland-path.patch \
%D%/packages/patches/gdm-wayland-session-wrapper-from-env.patch \
%D%/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch \
%D%/packages/patches/gemmi-fix-pegtl-usage.patch \
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 0569f8dfd2e..bb372c8159d 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -8986,7 +8986,7 @@ library.")
(define-public gdm
(package
(name "gdm")
- (version "49.2")
+ (version "50.2")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnome/sources/" name "/"
@@ -8994,11 +8994,10 @@ library.")
name "-" version ".tar.xz"))
(sha256
(base32
- "01ksb7gf2pfccnvw7dr363nppz0fwrk7hhsal478c3szkwgn64wq"))
+ "0hf5dxdxqc86zlnydrxhw6rqzdny89h87lyr3c58pznxgkj7jila"))
(patches
(search-patches
"gdm-default-session.patch"
- "gdm-remove-hardcoded-xwayland-path.patch"
"gdm-wayland-session-wrapper-from-env.patch"
"gdm-pass-gdk-pixbuf-loader-env.patch"))))
(build-system meson-build-system)
@@ -9025,8 +9024,6 @@ library.")
;; systemd-specific '/etc/locale.conf'.
"-Dlang-file=/etc/environment"
- (string-append "-Dudev-dir=" #$output "/lib/udev")
-
"--localstatedir=/var"
(string-append "-Ddefault-path="
(string-join '("/run/privileged/bin"
@@ -9038,95 +9035,18 @@ library.")
"--sbindir" (string-append #$output "/bin"))
#:phases
#~(modify-phases %standard-phases
- (add-after 'unpack 'patch-paths
+ (add-after 'unpack 'patch-gnome-session
(lambda* (#:key inputs #:allow-other-keys)
- (substitute* "daemon/gdm-session.c"
- (("dbus-run-session")
- (search-input-file inputs "bin/dbus-run-session")))))
+ (substitute* '("data/gnome-greeter.desktop.in"
+ "data/gnome-initial-setup.desktop.in")
+ (("gnome-session")
+ (search-input-file inputs "bin/gnome-session")))))
(add-before 'configure 'pre-configure
(lambda* (#:key inputs #:allow-other-keys)
;; We don't want to write to other packages.
(substitute* "meson.build"
(("if dconf_dep\\.found\\(\\)" all)
- (string-append all " and false")))
- ;; We don't have <systemd/sd-daemon.h>.
- (substitute* '("common/gdm-log.c"
- "daemon/gdm-server.c"
- "daemon/gdm-session-worker.c"
- "daemon/gdm-session-worker-job.c")
- (("#include <systemd/sd-daemon\\.h>") ""))
- ;; Use elogind for sd-login.
- (substitute* '("common/gdm-common.c"
- "daemon/gdm-local-display-factory.c"
- "daemon/gdm-manager.c"
- "libgdm/gdm-user-switching.c")
- (("#include <systemd/sd-login\\.h>")
- "#include <elogind/sd-login.h>"))
- ;; Look for system-installed sessions in
- ;; /run/current-system/profile/share.
- (substitute* '("libgdm/gdm-sessions.c"
- "daemon/gdm-session.c"
- "daemon/gdm-display.c"
- "daemon/gdm-launch-environment.c")
- (("DATADIR \"/x")
- "\"/run/current-system/profile/share/x")
- (("DATADIR \"/wayland")
- "\"/run/current-system/profile/share/wayland")
- (("DATADIR \"/gnome")
- "\"/run/current-system/profile/share/gnome"))
- (let ((propagate '("GDM_CUSTOM_CONF"
- "GDM_DBUS_DAEMON"
- "GDM_X_SERVER"
- "GDM_X_SESSION"
- ;; XXX: Remove this once GNOME Shell is
- ;; a dependency of GDM.
- "XDG_DATA_DIRS")))
- (substitute* "daemon/gdm-session.c"
- (("set_up_session_environment \\(self\\);")
- (apply string-append
- "set_up_session_environment (self);\n"
- (map (lambda (name)
- (string-append
- "gdm_session_set_environment_variable "
- "(self, \"" name "\","
- "g_getenv (\"" name "\"));\n"))
- propagate)))
- ;; This is used by remote sessions, such as when using VNC.
- (("\\(GDMCONFDIR \"/Xsession \\\\\"%s\\\\\"\", command)")
- "(\"%s \\\"%s\\\"\", g_getenv (\"GDM_X_SESSION\"),
command)")))
- ;; Find the configuration file using an environment variable.
- (substitute* '("common/gdm-settings.c")
- (("GDM_CUSTOM_CONF")
- (string-append "(g_getenv(\"GDM_CUSTOM_CONF\") != NULL"
- " ? g_getenv(\"GDM_CUSTOM_CONF\")"
- " : GDM_CUSTOM_CONF)")))
- ;; Use service-supplied path to X.
- (substitute* '("daemon/gdm-server.c")
- (("\\(X_SERVER X_SERVER_ARG_FORMAT")
- "(\"%s\" X_SERVER_ARG_FORMAT, g_getenv (\"GDM_X_SERVER\")"))
- (substitute* '("daemon/gdm-wayland-session.c"
- "daemon/gdm-x-session.c")
- (("\"dbus-daemon\"")
- "g_getenv (\"GDM_DBUS_DAEMON\")")
- (("X_SERVER")
- "g_getenv (\"GDM_X_SERVER\")")
- (("GDMCONFDIR \"/Xsession\"")
- "g_getenv (\"GDM_X_SESSION\")"))
- ;; Use an absolute path for GNOME Session.
- (substitute* "daemon/gdm-launch-environment.c"
- (("\"gnome-session\"")
- (format #f "~s"
- (search-input-file inputs "bin/gnome-session"))))
- ;; Do not automatically select the placeholder session.
- (substitute* "daemon/gdm-session.c"
- (("!g_str_has_suffix [(]base_name, \"\\.desktop\"[)]")
- (string-append "!g_str_has_suffix (base_name, \".desktop\")
|| "
- "(g_strcmp0(search_dirs[i], \""
- #$output "/share/gdm/BuiltInSessions/"
- "\") == 0 && "
- "g_strcmp0(base_name, \"fail.desktop\") ==
0)"))
- (("g_error [(]\"GdmSession: no session desktop files
installed, aborting\\.\\.\\.\"[)];")
- "{ self->fallback_session_name = g_strdup(\"fail\"); goto
out; }"))))
+ (string-append all " and false")))))
(add-before 'install 'install-logo
(lambda* (#:key inputs #:allow-other-keys)
(let ((icon (search-input-file inputs "share/icons/hicolor/\
@@ -9139,34 +9059,12 @@ org.gnome.login-screen.gschema.override")))
(format #t "\
[org.gnome.login-screen]
logo='~a'~%" icon))))))
- ;; GDM requires that there be at least one desktop entry
- ;; file. This phase installs a hidden one that simply
- ;; fails. This enables users to use GDM with a
- ;; '~/.xsession' script with no other desktop entry files.
- ;; See <https://bugs.gnu.org/35068>.
- (add-after 'install 'install-placeholder-desktop-entry
- (lambda _
- (let* ((sessions (string-append #$output
- "/share/gdm/BuiltInSessions"))
- (fail (string-append sessions "/fail.desktop")))
- (mkdir-p sessions)
- (with-output-to-file fail
- (lambda ()
- (for-each
- display
- '("[Desktop Entry]\n"
- "Encoding=UTF-8\n"
- "Type=Application\n"
- "Name=Fail\n"
- "Comment=This session fails immediately.\n"
- "NoDisplay=true\n"
- "Exec=false\n")))))))
;; GDM needs some additional programs available via XDG_DATA_DIRS,
;; to make accessibility settings and related services available.
(add-after 'install 'wrap-accessibility-dependencies
- (lambda _
+ (lambda* (#:key inputs #:allow-other-keys)
(wrap-program (string-append #$output "/bin/gdm")
- `("XDG_DATA_DIRS" ":" prefix
+ `("XDG_DATA_DIRS" prefix
#$(map (lambda (input)
(file-append (this-package-input input) "/share"))
'("at-spi2-core"
@@ -9192,14 +9090,14 @@ logo='~a'~%" icon))))))
gnome-session-shepherd
gnome-control-center
gnome-settings-daemon
- gtk+
+ gtk
iso-codes/pinned
json-glib
libcanberra
libgudev
linux-pam))
(synopsis "Display manager for GNOME")
- (home-page "https://wiki.gnome.org/Projects/GDM/")
+ (home-page "https://gitlab.gnome.org/GNOME/gdm")
(description
"GNOME Display Manager is a system service that is responsible for
providing graphical log-ins and managing local and remote displays.")
diff --git a/gnu/packages/patches/gdm-default-session.patch
b/gnu/packages/patches/gdm-default-session.patch
index cdadd9ad24c..745a1df6157 100644
--- a/gnu/packages/patches/gdm-default-session.patch
+++ b/gnu/packages/patches/gdm-default-session.patch
@@ -4,11 +4,24 @@ and not in the directories listed in $XDG_DATA_DIRS. The
latter includes
/run/current-system/profile, and only then.
Fixes <https://bugs.gnu.org/37831>.
+diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
+index 9305de956..7f06853e5 100644
+--- a/daemon/gdm-display.c
++++ b/daemon/gdm-display.c
+@@ -46,7 +46,7 @@
+ #include "gdm-launch-environment.h"
+ #include "gdm-dbus-util.h"
+
+-#define GNOME_SESSION_SESSIONS_PATH DATADIR "/gnome-session/sessions"
++#define GNOME_SESSION_SESSIONS_PATH "/run/current-system/profile/share/gnome"
+
+ typedef struct _GdmDisplayPrivate
+ {
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
-index 644aad022..d54406e93 100644
+index 0f86a1d91..df470c2c8 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
-@@ -378,16 +378,15 @@ get_system_session_dirs (GdmSession *self,
+@@ -371,17 +371,16 @@ get_system_session_dirs (GdmSession *self,
GArray *search_array = NULL;
char **search_dirs;
int i, j;
@@ -22,12 +35,13 @@ index 644aad022..d54406e93 100644
+ "/run/current-system/profile/share/xsessions/",
};
+ static const char *gdm_wayland_search_dir = DATADIR
"/gdm/greeter/wayland-sessions/";
- static const char *wayland_search_dir = DATADIR "/wayland-sessions/";
+ static const char *wayland_search_dir =
"/run/current-system/profile/share/wayland-sessions/";
search_array = g_array_new (TRUE, TRUE, sizeof (char *));
-@@ -396,11 +395,6 @@ get_system_session_dirs (GdmSession *self,
+@@ -390,23 +389,12 @@ get_system_session_dirs (GdmSession *self,
if (g_str_equal (supported_type, "x11") &&
(type == NULL || g_str_equal (type, supported_type))) {
@@ -39,10 +53,10 @@ index 644aad022..d54406e93 100644
g_array_append_vals (search_array, x_search_dirs,
G_N_ELEMENTS (x_search_dirs));
}
-@@ -408,11 +402,6 @@ get_system_session_dirs (GdmSession *self,
- #ifdef ENABLE_WAYLAND_SUPPORT
if (g_str_equal (supported_type, "wayland") &&
(type == NULL || g_str_equal (type, supported_type))) {
+ g_array_append_val (search_array,
gdm_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_append_val (search_array, dir);
@@ -50,12 +64,12 @@ index 644aad022..d54406e93 100644
-
g_array_append_val (search_array, wayland_search_dir);
}
- #endif
+ }
diff --git a/libgdm/gdm-sessions.c b/libgdm/gdm-sessions.c
-index df8e377b7..e80acf7e4 100644
+index 05d1f9d2d..cd7746785 100644
--- a/libgdm/gdm-sessions.c
+++ b/libgdm/gdm-sessions.c
-@@ -347,27 +347,21 @@ collect_sessions (void)
+@@ -291,24 +291,18 @@ collect_sessions (void)
"/etc/X11/sessions/",
DMCONFDIR "/Sessions/",
DATADIR "/gdm/BuiltInSessions/",
@@ -72,10 +86,7 @@ index df8e377b7..e80acf7e4 100644
- g_ptr_array_add (dirs_search_array, session_dir);
- }
}
- #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 = 0; system_data_dirs[i]; i++) {
- session_dir = g_build_filename (system_data_dirs[i],
"wayland-sessions", NULL);
@@ -84,5 +95,5 @@ index df8e377b7..e80acf7e4 100644
+ g_ptr_array_add (dirs_search_array,
+ g_strdup
("/run/current-system/profile/share/wayland-sessions/"));
}
- #endif
- #endif
+
+ if (gdm_available_sessions_map == NULL) {
diff --git a/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
b/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
index 0181dc58a6d..a4dad619a73 100644
--- a/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
+++ b/gnu/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch
@@ -1,8 +1,8 @@
diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c
-index 67f6c291e..86d8e718f 100644
+index 110520c0b..5739e8c3d 100644
--- a/daemon/gdm-launch-environment.c
+++ b/daemon/gdm-launch-environment.c
-@@ -294,6 +294,7 @@ build_launch_environment (GdmLaunchEnvironment
*launch_environment,
+@@ -277,6 +277,7 @@ build_launch_environment (GdmLaunchEnvironment
*launch_environment,
"WINDOWPATH",
"XCURSOR_PATH",
"XDG_CONFIG_DIRS",
diff --git a/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch
b/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch
deleted file mode 100644
index f2c29467980..00000000000
--- a/gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Remove check for hardcoded Xorg path in gdm.
-
-diff --git a/daemon/gdm-local-display-factory.c
b/daemon/gdm-local-display-factory.c
-index ad2e65cf7..84637d1ef 100644
---- a/daemon/gdm-local-display-factory.c
-+++ b/daemon/gdm-local-display-factory.c
-@@ -272,7 +272,7 @@ struct GdmDisplayServerConfiguration {
- { "wayland", GDM_KEY_WAYLAND_ENABLE, NULL, "wayland" },
- #endif
- #ifdef ENABLE_X11_SUPPORT
-- { "xorg", GDM_KEY_XORG_ENABLE, "/usr/bin/Xorg", "x11" },
-+ { "xorg", GDM_KEY_XORG_ENABLE, NULL, "x11" },
- #endif
- { NULL, NULL, NULL },
- };
diff --git a/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
b/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
index 1ad326a9f9f..7b6a6ac8302 100644
--- a/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
+++ b/gnu/packages/patches/gdm-wayland-session-wrapper-from-env.patch
@@ -1,28 +1,105 @@
-Get wayland-session wrapper from environment.
+Get session wrappers and configs from environment.
+This works in tandem with the environment variables set by the
+gdm-service-type.
+
+diff --git a/common/gdm-settings.c b/common/gdm-settings.c
+index 77b3316c7..ad370f0b5 100644
+--- a/common/gdm-settings.c
++++ b/common/gdm-settings.c
+@@ -199,7 +199,8 @@ gdm_settings_reload (GdmSettings *settings)
+ g_list_free (settings->backends);
+ settings->backends = NULL;
+
+- backend = gdm_settings_desktop_backend_new (GDM_CUSTOM_CONF);
++ const char *custom_conf = g_getenv ("GDM_CUSTOM_CONF");
++ backend = gdm_settings_desktop_backend_new (custom_conf ? custom_conf
: GDM_CUSTOM_CONF);
+ if (backend)
+ settings->backends = g_list_prepend (NULL, backend);
+
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
-index b78068d42..644aad022 100644
+index 7a0a638bd..0f86a1d91 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
-@@ -3172,8 +3172,9 @@ gdm_session_start_session (GdmSession *self,
-
allow_remote_connections? "--allow-remote-connections " : "",
- command);
- } else {
-- program = g_strdup_printf (LIBEXECDIR
"/gdm-wayland-session %s\"%s\"",
-+ program = g_strdup_printf (LIBEXECDIR
"/gdm-wayland-session %s\"%s %s\"",
- register_session ?
"--register-session " : "",
-+ g_getenv
("GDM_WAYLAND_SESSION"),
- command);
- }
- } else if (run_xsession_script) {
-@@ -3190,8 +3191,9 @@ gdm_session_start_session (GdmSession *self,
- register_session ?
"--register-session " : "",
-
self->selected_program);
- } else {
-- program = g_strdup_printf (LIBEXECDIR
"/gdm-wayland-session %s\"%s\"",
-+ program = g_strdup_printf (LIBEXECDIR
"/gdm-wayland-session %s\"%s %s\"",
- register_session ?
"--register-session " : "",
-+ g_getenv
("GDM_WAYLAND_SESSION"),
-
self->selected_program);
- }
- } else {
+@@ -2870,6 +2870,22 @@ set_up_session_environment (GdmSession *self)
+ "XDG_SESSION_DESKTOP",
+ get_session_name (self));
+
++ /* Added by Guix */
++ const char *propagate[] = {
++ "GDM_CUSTOM_CONF",
++ "GDM_DBUS_DAEMON",
++ "GDM_X_SERVER_PATH",
++ "GDM_X_SESSION",
++ /* TODO: Remove once GNOME Shell is a dependency of GDM. */
++ "XDG_DATA_DIRS",
++ NULL };
++ for (const char **env = propagate; *env; ++env) {
++ const char *value = g_getenv(*env);
++ if (value) {
++ gdm_session_set_environment_variable(self, *env, value);
++ }
++ }
++
+ desktop_names = get_session_desktop_names (self);
+ if (desktop_names != NULL) {
+ gdm_session_set_environment_variable (self,
"XDG_CURRENT_DESKTOP", desktop_names);
+@@ -3081,11 +3097,16 @@ gdm_session_start_session (GdmSession *self,
+
+ if (g_strcmp0 (self->session_type, "wayland") == 0) {
+ gboolean needs_registration = !gdm_session_session_registers
(self);
+- program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session
%s\"%s\"",
++ const char *gdm_wayland_session = g_getenv
("GDM_WAYLAND_SESSION");
++ program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session
%s\"%s %s\"",
+ needs_registration ?
"--handle-registration " : "",
++ gdm_wayland_session ?
gdm_wayland_session : "",
+ command);
+ } else {
+- program = g_strdup_printf (LIBEXECDIR "/gdm-x-session
\"%s\"", command);
++ const char *gdm_x_session = g_getenv ("GDM_X_SESSION");
++ program = g_strdup_printf (LIBEXECDIR "/gdm-x-session \"%s
%s\"",
++ gdm_x_session ? gdm_x_session : "",
++ command);
+ }
+
+ set_up_session_environment (self);
+diff --git a/daemon/gdm-wayland-session.c b/daemon/gdm-wayland-session.c
+index 3ca2d1496..82b72d941 100644
+--- a/daemon/gdm-wayland-session.c
++++ b/daemon/gdm-wayland-session.c
+@@ -136,7 +136,8 @@ spawn_bus (State *state,
+
+ bus_address_fd_string = g_strdup_printf ("%d", BUS_ADDRESS_FILENO);
+
+- g_ptr_array_add (arguments, "dbus-daemon");
++ const char *dbus_daemon = g_getenv ("GDM_DBUS_DAEMON");
++ g_ptr_array_add (arguments, dbus_daemon ? dbus_daemon :
"dbus-daemon");
+
+ g_ptr_array_add (arguments, "--print-address");
+ g_ptr_array_add (arguments, bus_address_fd_string);
+diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c
+index ed01fbe52..1787c96e2 100644
+--- a/daemon/gdm-x-session.c
++++ b/daemon/gdm-x-session.c
+@@ -451,7 +451,8 @@ spawn_bus (State *state,
+
+ bus_address_fd_string = g_strdup_printf ("%d", BUS_ADDRESS_FILENO);
+
+- g_ptr_array_add (arguments, "dbus-daemon");
++ const char *dbus_daemon = g_getenv ("GDM_DBUS_DAEMON");
++ g_ptr_array_add (arguments, dbus_daemon ? dbus_daemon :
"dbus-daemon");
+
+ g_ptr_array_add (arguments, "--print-address");
+ g_ptr_array_add (arguments, bus_address_fd_string);
+@@ -670,9 +671,10 @@ spawn_session (State *state,
+ g_subprocess_launcher_setenv (launcher, "WINDOWPATH", vt,
TRUE);
+ }
+
++ const char *xsession = g_getenv ("GDM_X_SESSION");
+ subprocess = g_subprocess_launcher_spawn (launcher,
+ &error,
+- GDMCONFDIR "/Xsession",
++ xsession ? xsession :
GDMCONFDIR "/Xsession",
+ state->session_command,
+ NULL);
+
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 97cc378dfb9..d7b8cb706ba 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -1337,7 +1337,7 @@ argument.")))
"GDM_DBUS_DAEMON="
#$(gdm-configuration-dbus-daemon config))
(string-append
- "GDM_X_SERVER="
+ "GDM_X_SERVER_PATH="
#$(xorg-wrapper
(gdm-configuration-xorg config)))
(string-append