From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andy Wingo Subject: [PATCHES] Add elogind service Date: Tue, 01 Sep 2015 13:42:41 +0200 Message-ID: <874mjetlfy.fsf@igalia.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:33324) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZWjyL-0004GY-2q for guix-devel@gnu.org; Tue, 01 Sep 2015 07:43:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZWjyE-0001dW-6H for guix-devel@gnu.org; Tue, 01 Sep 2015 07:43:29 -0400 Received: from pb-sasl0.int.icgroup.com ([208.72.237.25]:52184 helo=sasl.smtp.pobox.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZWjyE-0001Tr-0J for guix-devel@gnu.org; Tue, 01 Sep 2015 07:43:22 -0400 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-sasl0.pobox.com (Postfix) with ESMTP id BA20411A31 for ; Tue, 1 Sep 2015 07:42:45 -0400 (EDT) Received: from pb-sasl0. (unknown [127.0.0.1]) by pb-sasl0.pobox.com (Postfix) with ESMTP id B395011A2F for ; Tue, 1 Sep 2015 07:42:45 -0400 (EDT) Received: from rusty (unknown [88.160.190.192]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by pb-sasl0.pobox.com (Postfix) with ESMTPSA id 8711011A2E for ; Tue, 1 Sep 2015 07:42:44 -0400 (EDT) List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel@gnu.org --=-=-= Content-Type: text/plain 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 --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=0001-gnu-elogind-Update-to-version-219.12.patch >From fdd8893f287696fb016e9e78fbcba04d03840ee6 Mon Sep 17 00:00:00 2001 From: Andy Wingo 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 --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=0002-gnu-Add-elogind-service.patch >From 4f32d646cf14133a98899c448d588088c80d680d Mon Sep 17 00:00:00 2001 From: Andy Wingo 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." ;;; +;;; 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)))))) + + +;;; ;;; 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 --=-=-=--