summary refs log tree commit diff
diff options
context:
space:
mode:
authorBruno Victal <mirai@makinata.eu>2023-02-02 20:07:38 +0000
committerLiliana Marie Prikler <liliana.prikler@gmail.com>2023-02-05 06:56:43 +0100
commit637a9c3b264fe8eb76b6ed9f104b635d95632be6 (patch)
tree8b23e81b7735c67fd3b6bc03247e1c4c215e612b
parent5c5f0fc1135ff15f9c4adfc5f27eadd9a592b5d1 (diff)
downloadguix-637a9c3b264fe8eb76b6ed9f104b635d95632be6.tar.gz
services: mpd: Do not hardcode environment variables.
Services should not expect for XDG_RUNTIME_DIR to be set.
Inferring from the past comment, this seemed to resolve an issue when
the service was launched with an _interactive_ user-account,
which tends to have this variable set by the login-manager.

This is not the case for system accounts and setting this variable
results in PulseAudio (launched by the same system user) failing to start
since it attempts to use a nonexistent directory.

Ideally, this service should have a home-service counterpart but the old
behavior can be emulated by setting the environment-variables field to:

(environment-variables
  (list
    (string-append "XDG_RUNTIME_DIR=/run/user/"
                   (number->string (passwd:uid (getpwnam "myuser"))))))

* gnu/services/audio.scm
(mpd-configuration)[environment-variables]: New field.
(mpd-shepherd-service)[start]: Use new field.
* doc/guix.texi (Audio Services)[Music Player Daemon]: Document it.

Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
-rw-r--r--doc/guix.texi3
-rw-r--r--gnu/services/audio.scm14
2 files changed, 11 insertions, 6 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index cd18959db0..e7d56f2504 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -33199,6 +33199,9 @@ The group to run mpd as.
 This is a list of symbols naming Shepherd services that this service
 will depend on.
 
+@item @code{environment-variables} (default: @code{()}) (type: list-of-string)
+A list of strings specifying environment variables.
+
 @item @code{log-file} (default: @code{"/var/log/mpd/log"}) (type: maybe-string)
 The location of the log file.  Set to @code{syslog} to use the local
 syslog daemon or @code{%unset-value} to omit this directive from the
diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm
index 2bb8f66c96..3cbe21f23e 100644
--- a/gnu/services/audio.scm
+++ b/gnu/services/audio.scm
@@ -316,6 +316,11 @@ to be appended to the audio output configuration.")
 will depend on."
    empty-serializer)
 
+  (environment-variables
+   (list-of-string '())
+   "A list of strings specifying environment variables."
+   empty-serializer)
+
   (log-file
    (maybe-string "/var/log/mpd/log")
    "The location of the log file. Set to @code{syslog} to use the
@@ -464,7 +469,8 @@ appended to the configuration.")
 (define (mpd-shepherd-service config)
   (match-record config <mpd-configuration> (user package shepherd-requirement
                                             log-file playlist-directory
-                                            db-file state-file sticker-file)
+                                            db-file state-file sticker-file
+                                            environment-variables)
     (let* ((config-file (mpd-serialize-configuration config)))
       (shepherd-service
        (documentation "Run the MPD (Music Player Daemon)")
@@ -489,11 +495,7 @@ appended to the configuration.")
                    (list #$(file-append package "/bin/mpd")
                          "--no-daemon"
                          #$config-file)
-                   #:environment-variables
-                   ;; Required to detect PulseAudio when run under a user account.
-                   (list (string-append
-                          "XDG_RUNTIME_DIR=/run/user/"
-                          (number->string (passwd:uid (getpwnam #$user))))))))
+                   #:environment-variables '#$environment-variables)))
        (stop  #~(make-kill-destructor))
        (actions
         (list (shepherd-configuration-action config-file)