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

Reply via email to