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>
This commit is contained in:
Bruno Victal 2023-02-02 20:07:38 +00:00 committed by Liliana Marie Prikler
parent 5c5f0fc113
commit 637a9c3b26
No known key found for this signature in database
GPG key ID: 442A84B8C70E2F87
2 changed files with 11 additions and 6 deletions

View file

@ -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

View file

@ -316,6 +316,11 @@ (define-configuration mpd-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 @@ (define (mpd-log-rotation config)
(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 @@ (define (mpd-shepherd-service config)
(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)