~ruther/guix-local

e0e6756fbddc56b73640273ea8c6bf17825b337a — Andy Wingo 8 years ago 957dbc0
gnu: gdm: Fix environment of worker processes and sessions.

* gnu/packages/gnome.scm (gdm): Get X server path from GDM_X_SERVER
environment variable, and make sure this variable is propagated to internal
sub-processes.  Launch sessions with a reasonable XDG_CONFIG_DIRS setting.
Get the custom GDM conf from the current system's profile.
1 files changed, 32 insertions(+), 0 deletions(-)

M gnu/packages/gnome.scm
M gnu/packages/gnome.scm => gnu/packages/gnome.scm +32 -0
@@ 5142,6 5142,38 @@ libxml2.")
               "\"/run/current-system/profile/share/wayland")
              (("DATADIR \"/gnome")
               "\"/run/current-system/profile/share/gnome"))
            (substitute* '("daemon/gdm-session.c")
              (("set_up_session_environment \\(self\\);")
               (string-append
                "set_up_session_environment (self);\n"
                ;; Propagate GDM_X_SERVER environment variable (which is set
                ;; by the GDM service, as it's a function of what X modules
                ;; the user decides to have available) down to worker
                ;; processes.
                "gdm_session_set_environment_variable (self, \"GDM_X_SERVER\",\n"
                "    g_getenv (\"GDM_X_SERVER\"));\n"
                ;; FIXME: Really glib should be declaring XDG_CONFIG_DIRS as a
                ;; variable, but it doesn't do that right now.  Anyway
                ;; /run/current-system/profile/share/gnome-session/sessions/gnome.desktop
                ;; requires that a number of .desktop files be present, and
                ;; these special .desktop files are in $XDG_CONFIG_DIRS (which
                ;; defaults to /etc/xdg if it's not set).  Here we need to
                ;; provide a value such that the GNOME session's requirements
                ;; are met (provided GNOME is installed of course).
                "gdm_session_set_environment_variable (self, \"XDG_CONFIG_DIRS\",\n"
                "    \"/run/current-system/profile/etc/xdg\");\n"
                )))
            ;; Look for custom GDM conf in /run/current-system.
            (substitute* '("common/gdm-settings-backend.c")
              (("GDM_CUSTOM_CONF")
               "/run/current-system/etc/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-x-session.c")
              (("X_SERVER")
               "g_getenv (\"GDM_X_SERVER\")"))
            #t)))))
    (native-inputs
     `(("dconf" ,dconf)