services: elogind: Start from the Shepherd.

Fixes <http://bugs.gnu.org/27580>.
Reported by William <w@vieta.uk>.

* gnu/services/desktop.scm (elogind-shepherd-service): New procedure.
(elogind-service-type): Extend SHEPHERD-ROOT-SERVICE-TYPE.
This commit is contained in:
Ludovic Courtès 2017-07-11 10:54:12 +02:00
parent 082725b502
commit 94a881178a
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Andy Wingo <wingo@igalia.com> ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com> ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
@ -653,6 +653,20 @@ (module (file-append (elogind-package config)
(inherit pam) (inherit pam)
(session (cons pam-elogind (pam-service-session pam))))))) (session (cons pam-elogind (pam-service-session pam)))))))
(define (elogind-shepherd-service config)
"Return a Shepherd service to start elogind according to @var{config}."
(list (shepherd-service
(requirement '(dbus-system))
(provision '(elogind))
(start #~(make-forkexec-constructor
(list #$(file-append (elogind-package config)
"/libexec/elogind/elogind"))
#:environment-variables
(list (string-append "ELOGIND_CONF_FILE="
#$(elogind-configuration-file
config)))))
(stop #~(make-kill-destructor)))))
(define elogind-service-type (define elogind-service-type
(service-type (name 'elogind) (service-type (name 'elogind)
(extensions (extensions
@ -663,6 +677,12 @@ (define elogind-service-type
(service-extension polkit-service-type (service-extension polkit-service-type
(compose list elogind-package)) (compose list elogind-package))
;; Start elogind from the Shepherd rather than waiting
;; for bus activation. This ensures that it can handle
;; events like lid close, etc.
(service-extension shepherd-root-service-type
elogind-shepherd-service)
;; Provide the 'loginctl' command. ;; Provide the 'loginctl' command.
(service-extension profile-service-type (service-extension profile-service-type
(compose list elogind-package)) (compose list elogind-package))