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.
This commit is contained in:
Andy Wingo 2017-08-22 18:39:39 +02:00
parent 957dbc0a4d
commit e0e6756fbd
No known key found for this signature in database
GPG Key ID: A8803732E4436885

View File

@ -5142,6 +5142,38 @@ (define-public gdm
"\"/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)