From: Andy Wingo <wingo@igalia.com>
To: guix-devel@gnu.org
Subject: [PATCHES] Add elogind service
Date: Tue, 01 Sep 2015 13:42:41 +0200 [thread overview]
Message-ID: <874mjetlfy.fsf@igalia.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 328 bytes --]
Attached are two patches. The first updates elogind to a current
release tarball. The second adds a service. These are the bottom two
patches in wip-pam-elogind. If you run the service, you'll at least
have lid suspend support. Some patches more patches to follow but these
are the only elogind ones. OK to commit?
Andy
[-- Attachment #2: 0001-gnu-elogind-Update-to-version-219.12.patch --]
[-- Type: text/plain, Size: 5625 bytes --]
From fdd8893f287696fb016e9e78fbcba04d03840ee6 Mon Sep 17 00:00:00 2001
From: Andy Wingo <wingo@pobox.com>
Date: Tue, 18 Aug 2015 10:05:24 +0200
Subject: [PATCH 1/7] gnu: elogind: Update to version 219.12.
* gnu/packages/freedesktop.scm (elogind): Update to 219.12. Use a tarball
instead of a git checkout.
---
gnu/packages/freedesktop.scm | 104 ++++++++++++++++++++-----------------------
1 file changed, 48 insertions(+), 56 deletions(-)
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index d477668..c085fe5 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -41,6 +41,7 @@
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xorg)
#:use-module (gnu packages boost)
+ #:use-module (gnu packages m4)
#:use-module (gnu packages compression)
#:use-module (gnu packages doxygen)
#:use-module (gnu packages libffi)
@@ -130,65 +131,56 @@ the freedesktop.org XDG Base Directory specification.")
(license license:expat)))
(define-public elogind
- (let ((commit "14405a9"))
- (package
- (name "elogind")
- (version (string-append "219." commit))
- (source (origin
- (method git-fetch)
- (uri (git-reference
- (url "http://git.elephly.net/software/elogind.git")
- (commit commit)))
- (sha256
- (base32
- "1wz5lxj95qg64x2q5hf4zcb35hpxlw3wfswx6sb2srvsg50y3y72"))
- (file-name (string-append name "-checkout-" commit))
- (modules '((guix build utils)))
- (snippet
- '(begin
- (use-modules (guix build utils))
- (substitute* "Makefile.am"
- ;; Avoid validation against DTD because the DTDs for
- ;; both doctype 4.2 and 4.5 are needed.
- (("XSLTPROC_FLAGS = ") "XSLTPROC_FLAGS = --novalid"))))))
- (build-system gnu-build-system)
- (arguments
- `(#:configure-flags
- (list
- ;; pam_elogind fails because of bus-error.c hackery
- "--disable-pam"
- (string-append "--with-rootprefix=" (assoc-ref %outputs "out")))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'autogen
- (lambda _
- (and (zero? (system* "intltoolize" "--force" "--automake"))
- (zero? (system* "autoreconf" "-vif"))))))))
- (native-inputs
- `(("intltool" ,intltool)
- ("gettext" ,gnu-gettext)
- ("docbook-xsl" ,docbook-xsl)
- ("docbook-xml" ,docbook-xml)
- ("xsltproc" ,libxslt)
- ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
- ("pkg-config", pkg-config)
- ("autoconf" ,autoconf)
- ("automake" ,automake)
- ("libtool" ,libtool)
- ("gperf" ,gperf)))
- (inputs
- `(("linux-pam" ,linux-pam)
- ("linux-libre-headers" ,linux-libre-headers)
- ("libcap" ,libcap)
- ("dbus" ,dbus)
- ("eudev" ,eudev)))
- (home-page "https://github.com/andywingo/elogind")
- (synopsis "User, seat, and session management service")
- (description "Elogind is the systemd project's \"logind\" service,
+ (package
+ (name "elogind")
+ (version "219.12")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://wingolog.org/pub/" name "/"
+ name "-" version ".tar.xz"))
+ (sha256
+ (base32
+ "13qc4f0dl7ynnfp1y565z2k0jjizly5w3dqhiqkdk7v6jr4pksb7"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ (use-modules (guix build utils))
+ (substitute* "Makefile.am"
+ ;; Avoid validation against DTD because the DTDs for
+ ;; both doctype 4.2 and 4.5 are needed.
+ (("XSLTPROC_FLAGS = ") "XSLTPROC_FLAGS = --novalid"))))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "--with-libcap="
+ (assoc-ref %build-inputs "libcap"))
+ (string-append "--with-udevrulesdir="
+ (assoc-ref %outputs "out")
+ "/lib/udev/rules.d"))
+ #:make-flags '("PKTTYAGENT=/run/current-system/profile/bin/pkttyagent")))
+ (native-inputs
+ `(("intltool" ,intltool)
+ ("gettext" ,gnu-gettext)
+ ("docbook-xsl" ,docbook-xsl)
+ ("docbook-xml" ,docbook-xml)
+ ("xsltproc" ,libxslt)
+ ("m4" ,m4)
+ ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
+ ("pkg-config", pkg-config)
+ ("gperf" ,gperf)))
+ (inputs
+ `(("linux-pam" ,linux-pam)
+ ("linux-libre-headers" ,linux-libre-headers)
+ ("libcap" ,libcap)
+ ("dbus" ,dbus)
+ ("eudev" ,eudev)))
+ (home-page "https://github.com/andywingo/elogind")
+ (synopsis "User, seat, and session management service")
+ (description "Elogind is the systemd project's \"logind\" service,
extracted out as a separate project. Elogind integrates with PAM to provide
the org.freedesktop.login1 interface over the system bus, allowing other parts
of a the system to know what users are logged in, and where.")
- (license license:lgpl2.1+))))
+ (license license:lgpl2.1+)))
(define-public python-pyxdg
(package
--
2.4.3
[-- Attachment #3: 0002-gnu-Add-elogind-service.patch --]
[-- Type: text/plain, Size: 9440 bytes --]
From 4f32d646cf14133a98899c448d588088c80d680d Mon Sep 17 00:00:00 2001
From: Andy Wingo <wingo@pobox.com>
Date: Tue, 18 Aug 2015 11:56:17 +0200
Subject: [PATCH 2/7] gnu: Add elogind service.
* gnu/services/desktop.scm (elogind-configuration-file, elogind-service): New
functions.
(%desktop-services): Add elogind-service.
---
gnu/services/desktop.scm | 172 ++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 171 insertions(+), 1 deletion(-)
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 4e4b49d..764954c 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -26,6 +26,7 @@
#:use-module (gnu system shadow)
#:use-module (gnu packages glib)
#:use-module (gnu packages admin)
+ #:use-module (gnu packages freedesktop)
#:use-module (gnu packages gnome)
#:use-module (gnu packages avahi)
#:use-module (gnu packages wicd)
@@ -39,6 +40,7 @@
geoclue-application
%standard-geoclue-applications
geoclue-service
+ elogind-service
%desktop-services))
;;; Commentary:
@@ -374,6 +376,173 @@ site} for more information."
\f
;;;
+;;; Elogind login and seat management service.
+;;;
+
+(define (missing-keyword-argument name)
+ (error "missing keyword argument:" name))
+
+(define-syntax-rule (define-with-required-kwargs name (arg ...)
+ body ...)
+ (define name (lambda* (#:key (arg (missing-keyword-argument 'arg)) ...)
+ body ...)))
+
+(define-with-required-kwargs elogind-configuration-file
+ (kill-user-processes? kill-only-users kill-exclude-users
+ inhibit-delay-max-seconds
+ handle-power-key handle-suspend-key handle-hibernate-key
+ handle-lid-switch handle-lid-switch-docked
+ power-key-ignore-inhibited? suspend-key-ignore-inhibited?
+ hibernate-key-ignore-inhibited? lid-switch-ignore-inhibited?
+ holdoff-timeout-seconds
+ idle-action idle-action-seconds
+ runtime-directory-size-percent runtime-directory-size
+ remove-ipc?
+ suspend-state suspend-mode
+ hibernate-state hibernate-mode
+ hybrid-sleep-state hybrid-sleep-mode)
+ (define (yesno x)
+ (match x
+ (#t "yes")
+ (#f "no")
+ (_ (error "expected #t or #f, instead got:" x))))
+ (define char-set:user-name
+ (string->char-set "abcdefghijklmnopqrstuvwxyz0123456789_-"))
+ (define (valid-list? l pred)
+ (and-map (lambda (x) (string-every pred x)) l))
+ (define (user-name-list users)
+ (unless (valid-list? users char-set:user-name)
+ (error "invalid user list" users))
+ (string-join users " "))
+ (define (enum val allowed)
+ (unless (memq val allowed)
+ (error "invalid value" val allowed))
+ (symbol->string val))
+ (define (non-negative-integer x)
+ (unless (exact-integer? x) (error "not an integer" x))
+ (when (negative? x) (error "negative number not allowed" x))
+ (number->string x))
+ (define handle-actions
+ '(ignore poweroff reboot halt kexec suspend hibernate hybrid-sleep lock))
+ (define (handle-action x)
+ (enum x handle-actions))
+ (define (sleep-list tokens)
+ (unless (valid-list? tokens char-set:user-name)
+ (error "invalid sleep list" tokens))
+ (string-join tokens " "))
+ (text-file
+ "logind.conf"
+ (string-append
+ "[Login]\n"
+ "KillUserProcesses=" (yesno kill-user-processes?) "\n"
+ "KillOnlyUsers=" (user-name-list kill-only-users) "\n"
+ "KillExcludeUsers=" (user-name-list kill-exclude-users) "\n"
+ "InhibitDelayMaxSecs=" (non-negative-integer inhibit-delay-max-seconds) "\n"
+ "HandlePowerKey=" (handle-action handle-power-key) "\n"
+ "HandleSuspendKey=" (handle-action handle-suspend-key) "\n"
+ "HandleHibernateKey=" (handle-action handle-hibernate-key) "\n"
+ "HandleLidSwitch=" (handle-action handle-lid-switch) "\n"
+ "HandleLidSwitchDocked=" (handle-action handle-lid-switch-docked) "\n"
+ "PowerKeyIgnoreInhibited=" (yesno power-key-ignore-inhibited?) "\n"
+ "SuspendKeyIgnoreInhibited=" (yesno suspend-key-ignore-inhibited?) "\n"
+ "HibernateKeyIgnoreInhibited=" (yesno hibernate-key-ignore-inhibited?) "\n"
+ "LidSwitchIgnoreInhibited=" (yesno lid-switch-ignore-inhibited?) "\n"
+ "HoldoffTimeoutSecs=" (non-negative-integer holdoff-timeout-seconds) "\n"
+ "IdleAction=" (handle-action idle-action) "\n"
+ "IdleActionSeconds=" (non-negative-integer idle-action-seconds) "\n"
+ "RuntimeDirectorySize="
+ (if runtime-directory-size-percent
+ (string-append
+ (non-negative-integer runtime-directory-size-percent)
+ "%")
+ (non-negative-integer runtime-directory-size)) "\n"
+ "RemoveIpc=" (yesno remove-ipc?) "\n"
+
+ "[Sleep]\n"
+ "SuspendState=" (sleep-list suspend-state) "\n"
+ "SuspendMode=" (sleep-list suspend-mode) "\n"
+ "HibernateState=" (sleep-list hibernate-state) "\n"
+ "HibernateMode=" (sleep-list hibernate-mode) "\n"
+ "HybridSleepState=" (sleep-list hybrid-sleep-state) "\n"
+ "HybridSleepMode=" (sleep-list hybrid-sleep-mode) "\n")))
+
+(define* (elogind-service #:key (elogind elogind)
+ (kill-user-processes? #f)
+ (kill-only-users '()) (kill-exclude-users '("root"))
+ (inhibit-delay-max-seconds 5)
+ (handle-power-key 'poweroff)
+ (handle-suspend-key 'suspend)
+ (handle-hibernate-key 'hibernate)
+ (handle-lid-switch 'suspend)
+ (handle-lid-switch-docked 'ignore)
+ (power-key-ignore-inhibited? #f)
+ (suspend-key-ignore-inhibited? #f)
+ (hibernate-key-ignore-inhibited? #f)
+ (lid-switch-ignore-inhibited? #t)
+ (holdoff-timeout-seconds 30)
+ (idle-action 'ignore)
+ (idle-action-seconds (* 30 60))
+ (runtime-directory-size-percent 10)
+ (runtime-directory-size #f)
+ (remove-ipc? #t)
+
+ (suspend-state '("mem" "standby" "freeze"))
+ (suspend-mode '())
+ (hibernate-state '("disk"))
+ (hibernate-mode '("platform" "shutdown"))
+ (hybrid-sleep-state '("disk"))
+ (hybrid-sleep-mode '("suspend" "platform" "shutdown")))
+ "Return a service that runs the @command{elogind} login and seat management
+service. The @command{elogind} service integrates with PAM to allow other
+system components to know the set of logged-in users as well as their session
+types (graphical, console, remote, etc.). It can also clean up after users
+when they log out."
+ (mlet %store-monad
+ ((config
+ (elogind-configuration-file
+ #:kill-user-processes? kill-user-processes?
+ #:kill-only-users kill-only-users
+ #:kill-exclude-users kill-exclude-users
+ #:inhibit-delay-max-seconds inhibit-delay-max-seconds
+ #:handle-power-key handle-power-key
+ #:handle-suspend-key handle-suspend-key
+ #:handle-hibernate-key handle-hibernate-key
+ #:handle-lid-switch handle-lid-switch
+ #:handle-lid-switch-docked handle-lid-switch-docked
+ #:power-key-ignore-inhibited? power-key-ignore-inhibited?
+ #:suspend-key-ignore-inhibited? suspend-key-ignore-inhibited?
+ #:hibernate-key-ignore-inhibited? hibernate-key-ignore-inhibited?
+ #:power-key-ignore-inhibited? power-key-ignore-inhibited?
+ #:suspend-key-ignore-inhibited? suspend-key-ignore-inhibited?
+ #:hibernate-key-ignore-inhibited? hibernate-key-ignore-inhibited?
+ #:lid-switch-ignore-inhibited? lid-switch-ignore-inhibited?
+ #:holdoff-timeout-seconds holdoff-timeout-seconds
+ #:idle-action idle-action
+ #:idle-action-seconds idle-action-seconds
+ #:runtime-directory-size-percent runtime-directory-size-percent
+ #:runtime-directory-size runtime-directory-size
+ #:remove-ipc? remove-ipc?
+
+ #:suspend-state suspend-state
+ #:suspend-mode suspend-mode
+ #:hibernate-state hibernate-state
+ #:hibernate-mode hibernate-mode
+ #:hybrid-sleep-state hybrid-sleep-state
+ #:hybrid-sleep-mode hybrid-sleep-mode)))
+ (return
+ (service
+ (documentation "Run the elogind login and seat management service.")
+ (provision '(elogind))
+ (requirement '(dbus-system))
+
+ (start #~(make-forkexec-constructor
+ (list (string-append #$elogind "/libexec/elogind/elogind"))
+ #:environment-variables
+ (list (string-append "ELOGIND_CONF_FILE=" #$config))))
+ (stop #~(make-kill-destructor))))))
+
+\f
+;;;
;;; The default set of desktop services.
;;;
(define %desktop-services
@@ -389,7 +558,8 @@ site} for more information."
;; time, so we currently add them to the set of default services.
(colord-service)
(geoclue-service)
- (dbus-service (list avahi wicd upower colord geoclue))
+ (elogind-service)
+ (dbus-service (list avahi wicd upower colord geoclue elogind))
(ntp-service)
--
2.4.3
next reply other threads:[~2015-09-01 11:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-01 11:42 Andy Wingo [this message]
2015-09-01 11:53 ` [PATCHES] Whip polkit into shape Andy Wingo
2015-09-01 11:57 ` Andy Wingo
2015-09-02 19:18 ` Ludovic Courtès
2015-09-02 15:53 ` [PATCHES] Add elogind service Thompson, David
2015-09-02 19:10 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874mjetlfy.fsf@igalia.com \
--to=wingo@igalia.com \
--cc=guix-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.