From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:470:142:3::10]:54400) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jMZdz-0007Gx-3d for guix-patches@gnu.org; Thu, 09 Apr 2020 12:03:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jMZdv-000794-0b for guix-patches@gnu.org; Thu, 09 Apr 2020 12:03:07 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:42809) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jMZdu-00078f-Cf for guix-patches@gnu.org; Thu, 09 Apr 2020 12:03:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jMZdu-0004qI-5K for guix-patches@gnu.org; Thu, 09 Apr 2020 12:03:02 -0400 Subject: [bug#35305] LightDM service Resent-Message-ID: From: L p R n d n References: Date: Thu, 09 Apr 2020 18:02:15 +0200 In-Reply-To: (Brice Waegeneire's message of "Tue, 07 Apr 2020 17:06:34 +0000") Message-ID: <87sghcir5k.fsf@lprndn.info> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Brice Waegeneire Cc: 35305@debbugs.gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello, Brice Waegeneire writes: > Hello L p R n d n, > > I never did a review before but I would like to see this patch merged, so > bear with me. Thank you for the review! It's my first service for guix so we're probably even here. ;) > The indentation of lightdm's origin should probably be done in the commit > 01 not 03. Done. >> `("XDG_DATA_DIRS" ":" prefix (,(string-append (assoc-ref inputs >> "hicolor-icon-theme") >> "/share") >> ,(string-append (assoc-ref inputs "glib") >> "/share") >> ,(string-append (assoc-ref inputs >> "shared-mime-info") >> "/share") >> ,(string-append (assoc-ref inputs "gtk+") >> "/share") >> ,(string-append (assoc-ref inputs "exo") >> "/share") >> ,(string-append (assoc-ref outputs "out") >> "/share") >> "/run/current-system/profile/share")) > This part can use a map procedure. Done. + cleaned some things that weren't necessary. > It would be nice if =E2=80=9Clightdm-service-type=E2=80=9D support =E2=80= =9Cset-xorg-configuration=E2=80=9D > like the other login manager now does by using =E2=80=9Chandle-xorg-confi= guration=E2=80=9D > see 50be0da7bfd5c108697679effeb2a893d2f37598 for how it's done in GDM, SL= IM > and co. > >> + (comment "LighDM user") > ^ a =E2=80=9Ct=E2=80=9D is missing here Huh.. Done (I think...) and done! >> +(define (lightdm-shepherd-service config) >> + "Return a for LightDM with CONFIG." >> + >> + (define lightdm-command >> + #~(list (string-append #$(lightdm-configuration-lightdm config) >> "/sbin/lightdm"))) > [=E2=80=A6] >> + (fork+exec-command >> + (list #$(file-append >> + (lightdm-configuration-lightdm config) >> + "/sbin/lightdm")) > > =E2=80=9Clightdm-command=E2=80=9D isn't used, I get the hint it ought to = be the argument of > =E2=80=9Cfork+exec-command.=E2=80=9D Done. > >> +(define (lightdm-etc-service config) >> + (list `("xdg/lightdm/lightdm.conf.d/lightdm.conf" >> + ,(lightdm-configuration-file config)) >> + `(,(string-append "xdg/lightdm/" >> + (computed-file-name >> + (lightdm-configuration-greeter-configuration >> config))) >> + ,(lightdm-configuration-greeter-configuration config)))) > > I've been told, in Guix, it's better to avoid putting configuration in > =E2=80=9C/etc=E2=80=9D since it cause edge case during rollback and such,= specifying the > configuration by passing the =E2=80=9C--config=E2=80=9D argument to =E2= =80=9Clightdm=E2=80=9D would be more > appropriate. Need some advices here as even if "--config" works for LightDM, greeters also search their config in /etc. They're all different so they might or might not provide a convenient way to do it... :/ In the meantime, kept the etc-service-extension + prevented errors in case a file wasn't provided. >> + (define %user >> + (getpw "lightdm")) >> + (let ((directory "/var/lib/lightdm-data")) >> + (mkdir-p directory) >> + (chown directory (passwd:uid %user) (passwd:gid %user)))))) > > =E2=80=9C%user=E2=80=9D could go in the =E2=80=9Clet=E2=80=9D. BTW can't = lightdm use its user home > directory instead of =E2=80=9C/var/lib/lightdm-data=E2=80=9D or the rever= se; IOW does it > need to have to own two directories in =E2=80=9C/var/lib=E2=80=9D? Reworked everything a little bit to match what is done for gdm. I think we can use a CFLAG to change "/var/lib/lightdm-data" to "/var/lib/lightdm/lightdm-data" for example. However, I think lightdm sometime cleans or delete stuff in "/var/lib/lightdm" so it might explain why there are two directories. I don't know what "/var/lib/lightdm-data" is used for but LightDM does complain if it doesn't exist. Advices needed here too. > Several lines in =E2=80=9Cgnu/services/lightdm.scm=E2=80=9D exceed the ma= ximal line length. > Tried to keep them below 80. Is it ok? > > Thank you very much for this patch series. I'm impatient seeing it in Guix > proper. > > - Brice + Corrected some typos in the documentation and added an extra-config field to lightd and lightdm-gtk-greeter's configuration. Hope it's better now, new patches are attached below. Have a nice day, L p R n d n --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-gnu-lightdm-Update-1.30.0.patch >From 461b4c27816d4340a37209ca5389d7ec9f373581 Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 13:16:39 +0200 Subject: [PATCH 01/10] gnu: lightdm: Update 1.30.0. * gnu/packages/display-managers.scm (lightdm): Update to 1.30.0. --- gnu/packages/display-managers.scm | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index bfe1a8f6dd..2f81f10140 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -125,16 +125,15 @@ create smooth, animated user interfaces.") (define-public lightdm (package (name "lightdm") - (version "1.24.0") + (version "1.30.0") (source (origin (method url-fetch) - (uri (string-append "https://launchpad.net/lightdm/" - (version-major+minor version) "/" - version "/+download/lightdm-" - version ".tar.xz")) + (uri (string-append + "https://github.com/CanonicalLtd/lightdm/releases/download/" + version "/lightdm-" version ".tar.xz")) (sha256 (base32 - "18j33bm54i8k7ncxcs69zqi4105s62n58jrydqn3ikrb71s9nl6d")))) + "158zb2d0v1309a8v19hh32y4yj3v6yg4yg6m0l7v59d3a2b7f651")))) (build-system gnu-build-system) (arguments '(#:parallel-tests? #f ; fails when run in parallel -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0002-gnu-lightdm-Add-vala-bindings.patch >From a2d8e9027e12dabb0acebd3c32aff555727c4129 Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 13:21:55 +0200 Subject: [PATCH 02/10] gnu: lightdm: Add vala bindings. * gnu/packages/display-managers.scm (lightdm) [native-inputs]: Add vala. --- gnu/packages/display-managers.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index 2f81f10140..1f4842bff3 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -180,6 +180,7 @@ create smooth, animated user interfaces.") ("pkg-config" ,pkg-config) ("itstool" ,itstool) ("intltool" ,intltool) + ("vala" ,vala) ;For vala bindings ;; For tests ("dbus" ,dbus) ("python" ,python-2) -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0003-gnu-lightdm-Disable-python-tests-only.patch >From 524bf60a51f0775d165347a1f2bf5e82a842261d Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 13:26:22 +0200 Subject: [PATCH 03/10] gnu: lightdm: Disable python tests only. * gnu/packages/patches/lightdm-disable-python-tests.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/display-managers.scm (lightdm)[source]: Use patch. * gnu/packages/display-managers.scm (lightdm)[arguments]: Remove test-python-greeter wrapping. * gnu/packages/display-managers.scm (lightdm)[native-inputs]: Remove python and python-gobject. --- gnu/local.mk | 1 + gnu/packages/display-managers.scm | 18 ++------- .../lightdm-disable-python-tests.patch | 40 +++++++++++++++++++ 3 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 gnu/packages/patches/lightdm-disable-python-tests.patch diff --git a/gnu/local.mk b/gnu/local.mk index caa73d44d4..fc9030b7f9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1144,6 +1144,7 @@ dist_patch_DATA = \ %D%/packages/patches/lierolibre-newer-libconfig.patch \ %D%/packages/patches/lierolibre-remove-arch-warning.patch \ %D%/packages/patches/lierolibre-try-building-other-arch.patch \ + %D%/packages/patches/lightdm-disable-python-tests.patch \ %D%/packages/patches/linkchecker-tests-require-network.patch \ %D%/packages/patches/linux-pam-no-setfsuid.patch \ %D%/packages/patches/lirc-localstatedir.patch \ diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index 1f4842bff3..eee7c6d841 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -133,7 +133,8 @@ create smooth, animated user interfaces.") version "/lightdm-" version ".tar.xz")) (sha256 (base32 - "158zb2d0v1309a8v19hh32y4yj3v6yg4yg6m0l7v59d3a2b7f651")))) + "158zb2d0v1309a8v19hh32y4yj3v6yg4yg6m0l7v59d3a2b7f651")) + (patches (search-patches "lightdm-disable-python-tests.patch")))) (build-system gnu-build-system) (arguments '(#:parallel-tests? #f ; fails when run in parallel @@ -152,19 +153,8 @@ create smooth, animated user interfaces.") (substitute* "src/seat.c" (("/bin/sh") (which "sh"))) #t)) - (add-after 'unpack 'disable-broken-tests - (lambda _ - (substitute* "tests/Makefile.in" - (("test-sessions-gobject ") "") - ((" test-sessions-python ") " ")) - #t)) (add-before 'check 'pre-check - ;; Run test-suite under a dbus session. (lambda* (#:key inputs #:allow-other-keys) - (wrap-program "tests/src/test-python-greeter" - `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))) - `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))) - ;; Avoid printing locale warnings, which trip up the text ;; matching tests. (unsetenv "LC_ALL") @@ -182,9 +172,7 @@ create smooth, animated user interfaces.") ("intltool" ,intltool) ("vala" ,vala) ;For vala bindings ;; For tests - ("dbus" ,dbus) - ("python" ,python-2) - ("python-pygobject" ,python2-pygobject))) + ("dbus" ,dbus))) ;; Required by liblightdm-gobject-1.pc. (propagated-inputs `(("glib" ,glib) diff --git a/gnu/packages/patches/lightdm-disable-python-tests.patch b/gnu/packages/patches/lightdm-disable-python-tests.patch new file mode 100644 index 0000000000..b1850f279c --- /dev/null +++ b/gnu/packages/patches/lightdm-disable-python-tests.patch @@ -0,0 +1,40 @@ + tests/Makefile.in | 23 ----------------------- + 1 file changed, 23 deletions(-) + +diff --git a/tests/Makefile.in b/tests/Makefile.in +index 9451a6f..46c027c 100644 +--- a/tests/Makefile.in ++++ b/tests/Makefile.in +@@ -810,29 +810,6 @@ TESTS = test-xserver-fail-start test-greeter-fail-start \ + test-wayland-autologin test-wayland-greeter \ + test-wayland-session test-invalid-seat \ + test-seatdefaults-still-supported \ +- test-autologin-timeout-python \ +- test-autologin-guest-timeout-python \ +- test-autologin-session-timeout-python \ +- test-cancel-authentication-python test-sessions-python \ +- test-users-python test-login-python test-login-manual-python \ +- test-login-manual-previous-session-python \ +- test-login-no-password-python test-login-long-username-python \ +- test-login-long-password-python test-login-two-factor-python \ +- test-login-new-authtok-python test-login-info-prompt-python \ +- test-login-multi-info-prompt-python \ +- test-login-previous-session-python \ +- test-login-wrong-password-python \ +- test-login-invalid-user-python \ +- test-login-invalid-session-python test-login-logout-python \ +- test-login-pick-session-python \ +- test-login-remember-session-python \ +- test-login-manual-remember-session-python \ +- test-login-guest-python test-login-guest-pick-session-python \ +- test-login-guest-disabled-python \ +- test-login-guest-no-setup-script-python \ +- test-login-guest-fail-setup-script-python \ +- test-login-guest-logout-python \ +- test-login-remote-session-python test-power-python \ + $(am__append_1) $(am__append_2) + EXTRA_DIST = \ + $(TESTS) \ +-- +2.25.1 + -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0004-gnu-lightdm-gtk-greeter-Update-to-2.0.7.patch >From 0f3bc9f7b17b4a099a9622c92b7b2fdb4076ba24 Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 13:40:38 +0200 Subject: [PATCH 04/10] gnu: lightdm-gtk-greeter: Update to 2.0.7. * gnu/packages/display-manager.scm (lightdm-gtk-greeter): Update to 2.0.7. --- gnu/packages/display-managers.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index eee7c6d841..49739a0064 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -187,7 +187,7 @@ display manager which supports different greeters.") (define-public lightdm-gtk-greeter (package (name "lightdm-gtk-greeter") - (version "2.0.2") + (version "2.0.7") (source (origin (method url-fetch) (uri (string-append @@ -196,7 +196,7 @@ display manager which supports different greeters.") "/+download/lightdm-gtk-greeter-" version ".tar.gz")) (sha256 (base32 - "1436sdm83xqhxyr1rzqxhsl8if2xmidlvb341xcv6dv83lyxkrlf")))) + "1g7wc3d3vqfa7mrdhx1w9ywydgjbffla6rbrxq9k3sc62br97qms")))) (build-system gnu-build-system) (native-inputs `(("exo" ,exo) -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0005-gnu-lightdm-gtk-greeter-Fix-at-spi-runtime-dependenc.patch >From b394a0e2019c9780b669a3258fe8e9afb5dfb76d Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 13:50:58 +0200 Subject: [PATCH 05/10] gnu: lightdm-gtk-greeter: Fix at-spi runtime dependency. * gnu/packages/display-manager.scm (lightdm): Fix at-spi runtime dependency. [inputs]: Add at-spi2-core. [arguments]: Add '--enable-at-spi-command' configure flag. --- gnu/packages/display-managers.scm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index 49739a0064..7b280fee6b 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -204,7 +204,13 @@ display manager which supports different greeters.") ("pkg-config" ,pkg-config))) (inputs `(("lightdm" ,lightdm) + ("at-spi2-core" ,at-spi2-core) ("gtk+" ,gtk+))) + (arguments + `(#:configure-flags + (list (string-append "--enable-at-spi-command=" + (assoc-ref %build-inputs "at-spi2-core") + "/libexec/at-spi-bus-launcher")))) (synopsis "GTK+ greeter for LightDM") (home-page "https://launchpad.net/lightdm-gtk-greeter") (description "This package provides a LightDM greeter implementation using -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0006-gnu-lightdm-gtk-greeter-Fix-.desktop-file.patch >From f695692a52e5768e9d40a485140c148e88c51593 Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 13:58:26 +0200 Subject: [PATCH 06/10] gnu: lightdm-gtk-greeter: Fix .desktop file. * gnu/packages/display-managers.scm (lightdm-gtk-greeter): Fix .desktop file path. [arguments]: Add fix-.desktop-path phase. --- gnu/packages/display-managers.scm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index 7b280fee6b..a97730ab1a 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -210,7 +210,17 @@ display manager which supports different greeters.") `(#:configure-flags (list (string-append "--enable-at-spi-command=" (assoc-ref %build-inputs "at-spi2-core") - "/libexec/at-spi-bus-launcher")))) + "/libexec/at-spi-bus-launcher")) + #:phases + (modify-phases %standard-phases + (add-after 'install 'fix-.desktop-path + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* (string-append + out "/share/xgreeters/lightdm-gtk-greeter.desktop") + (("Exec=lightdm-gtk-greeter") + (string-append "Exec=" out "/sbin/lightdm-gtk-greeter"))) + #t)))))) (synopsis "GTK+ greeter for LightDM") (home-page "https://launchpad.net/lightdm-gtk-greeter") (description "This package provides a LightDM greeter implementation using -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0007-gnu-lightdm-gtk-greeter-Wrap-binary.patch >From eaa49a238ab60f6a905506a750914ad3269c6e15 Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 14:17:18 +0200 Subject: [PATCH 07/10] gnu: lightdm-gtk-greeter: Wrap binary. * gnu/package/display-managers.scm (lightdm-gtk-greeter): Wrap binary. [inputs]: Add shared-mime-info. [arguments]: Add wrap-program phase. --- gnu/packages/display-managers.scm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index a97730ab1a..8636d713b0 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -204,6 +204,7 @@ display manager which supports different greeters.") ("pkg-config" ,pkg-config))) (inputs `(("lightdm" ,lightdm) + ("shared-mime-info" ,shared-mime-info) ("at-spi2-core" ,at-spi2-core) ("gtk+" ,gtk+))) (arguments @@ -220,7 +221,21 @@ display manager which supports different greeters.") out "/share/xgreeters/lightdm-gtk-greeter.desktop") (("Exec=lightdm-gtk-greeter") (string-append "Exec=" out "/sbin/lightdm-gtk-greeter"))) - #t)))))) + #t))) + (add-after 'fix-.desktop-path 'wrap-program + ;; try to mimic glib-or-gtk build system + ;; which doesn't wrap files in /sbin + (lambda* (#:key outputs inputs #:allow-other-keys) + (wrap-program (string-append (assoc-ref outputs "out") + "/sbin/lightdm-gtk-greeter") + `("XDG_DATA_DIRS" ":" prefix + ,(cons "/run/current-system/profile/share" + (map (lambda (pkg) + (string-append (assoc-ref inputs pkg) "/share")) + '("gtk+" "shared-mime-info" "glib")))) + `("GTK_PATH" ":" prefix (,(assoc-ref inputs "gtk+"))) + `("GIO_EXTRA_MODULES" ":" prefix (,(assoc-ref inputs "gtk+")))) + #t))))) (synopsis "GTK+ greeter for LightDM") (home-page "https://launchpad.net/lightdm-gtk-greeter") (description "This package provides a LightDM greeter implementation using -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0008-gnu-lightdm-Build-accountsservice-files.patch >From 967da134843193aaaded8a681d44734a9702e247 Mon Sep 17 00:00:00 2001 From: Lprndn Date: Tue, 16 Apr 2019 19:46:44 +0200 Subject: [PATCH 08/10] gnu: lightdm: Build accountsservice files. * gnu/packages/display-managers.scm (lightdm)[native-inputs]: Add accountsservice. --- gnu/packages/display-managers.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index 8636d713b0..fe45165b90 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -166,7 +166,8 @@ create smooth, animated user interfaces.") ("libgcrypt" ,libgcrypt) ("libxcb" ,libxcb))) (native-inputs - `(("gobject-introspection" ,gobject-introspection) + `(("accountsservice" ,accountsservice) + ("gobject-introspection" ,gobject-introspection) ("pkg-config" ,pkg-config) ("itstool" ,itstool) ("intltool" ,intltool) -- 2.25.1 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0009-gnu-lightdm-gtk-greeter-Fix-some-warnings.patch >From f5f2da7c91530ca4ad7aae38aa083cff81c1e9bc Mon Sep 17 00:00:00 2001 From: Lprndn Date: Wed, 17 Apr 2019 12:44:07 +0200 Subject: [PATCH 09/10] gnu: lightdm-gtk-greeter: Fix some warnings. * gnu/packages/display-managers.scm (lightdm-gtk-greeter): Fix some warnings. [arguments]: Add '--disable-indicator-services-command' configure flags. --- gnu/packages/display-managers.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm index fe45165b90..e13266ed03 100644 --- a/gnu/packages/display-managers.scm +++ b/gnu/packages/display-managers.scm @@ -210,7 +210,8 @@ display manager which supports different greeters.") ("gtk+" ,gtk+))) (arguments `(#:configure-flags - (list (string-append "--enable-at-spi-command=" + (list "--disable-indicator-services-command" + (string-append "--enable-at-spi-command=" (assoc-ref %build-inputs "at-spi2-core") "/libexec/at-spi-bus-launcher")) #:phases -- 2.25.1 --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0010-services-Add-lightdm-service-type.patch Content-Transfer-Encoding: quoted-printable >From 5be647a2c7e1994f7cf970fa79fe693ffd4415b8 Mon Sep 17 00:00:00 2001 From: L p R n d n Date: Thu, 18 Apr 2019 17:58:56 +0200 Subject: [PATCH 10/10] services: Add lightdm-service-type. * gnu/services/lightdm.scm: Add file. * doc/guix.texi (@deftp, @deffn): Add documentation. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. --- doc/guix.texi | 88 +++++++++++ gnu/local.mk | 1 + gnu/services/lightdm.scm | 313 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 402 insertions(+) create mode 100644 gnu/services/lightdm.scm diff --git a/doc/guix.texi b/doc/guix.texi index a0920adc1c..2d0230d5e6 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -14664,6 +14664,94 @@ auto-login session. @end table @end deftp =20 +@defvr {Scheme Variable} lightdm-service-type +Service type for the LightDM graphical login manager. +It uses the @code{lightdm-gtk-greeter} as default greeter. +See @code{lightdm-configuration} below for configuration of both lightdm +and lightdm-gtk-greeter or even using a different greeter. +@end defvr + +@deftp {Data Type} lightdm-configuration +Data type representing the lightDM service configuration. + +@table @asis +@item @code{session-directory} (default:"/run/current-system/profile/share= /xsessions:/run/current-system/profile/share/wayland-sessions") +Directories where LightDM will search for sessions' @code{.desktop} files. + +@item @code{allow-empty-passwords?} (default: @code{#f}) +Whether to allow logins with empty passwords. + +@item @code{greeter-name} (default: "lightdm-gtk-greeter") +The name of the default greeter to be used by LightDM. + +@item @code{greeter-package} (default: @code{lightdm-gtk-greeter}) +The package containing the greeter described by @code{greeter-name} +and that will be included in the system's profile. + +@item @code{greeter-assets} (default: @code{(list adwaita-icon-theme gnome= -themes-standard)}) +A list of packages needed by the greeter: icons, themes, fonts etc. + +@item @code{greeter-configuration-file} (default: (lightdm-gtk-greeter-con= figuration-file (lightdm-gtk-greeter-configuration))) +This file will be placed in @code{/etc/xdg/lightdm/} directory. +A @code{computed-file} is expected. + +@item @code{xorg-configuration} (default: @code{(xorg-configuration)}) +Configuration of the Xorg graphical server. + +@item @code{session-wrapper} (default: @code{(xinitrc)}) +Script to run before starting a X session. + +@item @code{default-session-name} (default: "") +The name of the default @code{.desktop} file describing a session. +If @code {autologin-user} and @code{autologin-timeout} are defined, +LightDM logs in directly using the session described by @code{default-sess= ion-name}. + +@item @code{autologin-user} (default: "") +If @code {default-session-name} and @code{autologin-timeout} are defined, +LightDM logs in directly as @code{autologin-user}. + +@item @code{autologin-timeout} (default: @code{#f}) +If @code {default-session-name} and @code{autologin-user} are defined, +LightDM logs in automatically after @code{autologin-timeout} seconds. +Any user activity during that time will cancel autologin +and allow usual login through authentification. + +@item @code{lightdm} (default: @code{lightdm}) +The LightDM package to use. + +@item @code{extra-config} (default: "") +String to append to the LightDM configuration file. + +@end table +@end deftp + +@deftp {Data Type} lightdm-gtk-greeter-configuration +This data type represents the configuration for ligtdm-gtk-greeter. +Use it as an argument of lightdm-gtk-greeter-configuration-file to +get the corresponding file. + +@table @asis +@item @code{theme-name} (default: "Adwaita") +The name of the GTK+ theme to be used. + +@item @code{icon-theme-name} (default: "Adwaita") +The name of the icon theme to be used for displaying icons. + +@item @code{cursor-theme-name} (default: "Adwaita") +The name of the theme to be used for the cursor. + +@item @code{cursor-size} (default: @code{16}) +The size of the cursor. + +@item @code{background} (default: "") +Path to the background image to be used. + +@item @code{extra-config} (default: "") +String to append to the @code{lightdm-gtk-greeter.conf}. + +@end table +@end deftp + @cindex Xorg, configuration @deftp {Data Type} xorg-configuration This data type represents the configuration of the Xorg graphical display diff --git a/gnu/local.mk b/gnu/local.mk index fc9030b7f9..5ab96c121e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -561,6 +561,7 @@ GNU_SYSTEM_MODULES =3D \ %D%/services/getmail.scm \ %D%/services/guix.scm \ %D%/services/kerberos.scm \ + %D%/services/lightdm.scm \ %D%/services/lirc.scm \ %D%/services/virtualization.scm \ %D%/services/mail.scm \ diff --git a/gnu/services/lightdm.scm b/gnu/services/lightdm.scm new file mode 100644 index 0000000000..4d69daaa49 --- /dev/null +++ b/gnu/services/lightdm.scm @@ -0,0 +1,313 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright =C2=A9 2019,2020 L p R n d n +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + + +(define-module (gnu services lightdm) + #:use-module (guix gexp) + #:use-module (guix records) + + #:use-module (gnu system pam) + #:use-module (gnu system shadow) + + #:use-module (gnu services) + #:use-module (gnu services dbus) + #:use-module (gnu services desktop) + #:use-module (gnu services shepherd) + #:use-module (gnu services xorg) + + #:use-module (gnu packages admin) + #:use-module (gnu packages display-managers) + #:use-module (gnu packages freedesktop) + #:use-module (gnu packages gnome) + #:use-module (gnu packages xorg) + + #:export (lightdm-configuration + lightdm-configuration? + lightdm-service-type + lightdm-gtk-greeter-configuration + lightdm-gtk-greeter-configuration-file)) + +;; GREETERS + +(define-record-type* + lightdm-gtk-greeter-configuration make-lightdm-gtk-greeter-configuration + lightdm-gtk-greeter-configuration? + (theme-name lightdm-gtk-greeter-configuration-theme-name + (default "Adwaita")) + (icon-theme-name + lightdm-gtk-greeter-configuration-icon-theme-name + (default "Adwaita")) + (cursor-theme-name + lightdm-gtk-greeter-configuration-cursor-theme-name + (default "Adwaita")) + (cursor-size lightdm-gtk-greeter-configuration-cursor-size + (default 16)) + (background lightdm-gtk-greeter-configuration-background + (default "")) + (extra-config lightdm-gtk-greeter-configuration-extra-config + (default ""))) + +(define (lightdm-gtk-greeter-configuration-file config) + (mixed-text-file "lightdm-gtk-greeter.conf" " +[greeter] +theme-name =3D " (lightdm-gtk-greeter-configuration-theme-name config) " +icon-theme-name =3D " +(lightdm-gtk-greeter-configuration-icon-theme-name config) " +cursor-theme-name =3D " +(lightdm-gtk-greeter-configuration-cursor-theme-name config) " +cursor-theme-size =3D " (number->string + (lightdm-gtk-greeter-configuration-cursor-size conf= ig)) +(if (string-null? (lightdm-gtk-greeter-configuration-background config)) "" + (string-append " +background =3D " (lightdm-gtk-greeter-configuration-background config))) " +" (lightdm-gtk-greeter-configuration-extra-config config))) + +;; LIGHTDM + +(define-record-type* + lightdm-configuration make-lightdm-configuration + lightdm-configuration? + + (lightdm lightdm-configuration-lightdm + (default lightdm)) + (sessions-directory + lightdm-configuration-sessions-directory + (default (string-append + "/run/current-system/profile/share/xsessions" + ":/run/current-system/profile/share/wayland-sessions"))) + (allow-empty-passwords? lightdm-configuration-allow-empty-passwords? + (default #f)) + ;; [Seat] + (xorg-configuration lightdm-configuration-xorg + (default (xorg-configuration))) + (session-wrapper lightdm-configuration-session-wrapper + (default (xinitrc))) + (default-session-name lightdm-configuration-default-session + (default "")) + + ;; [Autologin] + (autologin-user lightdm-configuration-autologin-user + (default "")) + (autologin-timeout lightdm-configuration-autologin-timeout + (default #f)) + ;; [Greeter] + (greeter-name lightdm-configuration-greeter-name + (default "lightdm-gtk-greeter")) + (greeter-package lightdm-configuration-greeter-package + (default lightdm-gtk-greeter)) + (greeter-assets lightdm-configuration-greeter-assets + (default (list adwaita-icon-theme + gnome-themes-standard))) + (greeter-configuration-file lightdm-configuration-greeter-configuration-= file + (default (lightdm-gtk-greeter-configuration-= file + (lightdm-gtk-greeter-configuration= )))) + (extra-config lightdm-configuration-extra-config + (default ""))) + +(define %lightdm-accounts + (list (user-group (name "lightdm") (system? #t)) + (user-account + (name "lightdm") + (group "lightdm") + (system? #t) + (comment "LightDM user") + (home-directory "/var/lib/lightdm") + (shell (file-append shadow "/sbin/nologin"))))) + +(define %lightdm-activation + ;; Ensure /var/lib/lightdm is owned by the "lightdm" user. + ;; Mimics what is done for gdm + ;; see a43e9157ef479e94c19951cc9d228cf153bf78ee + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + (define (ensure-ownership directory) + (let* ((lightdm (getpwnam "lightdm")) + (uid (passwd:uid lightdm)) + (gid (passwd:gid lightdm)) + (st (stat directory #f))) + ;; Recurse into directory only if it has wrong ownership. + (when (and st + (or (not (=3D uid (stat:uid st))) + (not (=3D gid (stat:gid st))))) + (for-each (lambda (file) + (chown file uid gid)) + (find-files "directory" + #:directories? #t))))) + + (when (not (stat "/var/lib/lightdm-data" #f)) + (mkdir-p "/var/lib/lightdm-data")) + (for-each ensure-ownership + '("/var/lib/lightdm" + "/var/lib/lightdm-data"))))) + +(define (lightdm-configuration-file config) + (mixed-text-file "lightdm.conf" " +[LightDM] +greeter-user =3D lightdm +greeters-directory =3D /run/current-system/profile/share/xgreeters +sessions-directory =3D " (lightdm-configuration-sessions-directory config= ) " + + +[Seat:*] +xserver-command =3D " (xorg-start-command (lightdm-configuration-xorg con= fig)) " +greeter-session =3D " (lightdm-configuration-greeter-name config) " +user-session =3D " (lightdm-configuration-default-session config) +(if (string-null? (lightdm-configuration-autologin-user config)) "" + (string-append " +autologin-user =3D " (lightdm-configuration-autologin-user config))) +(if (string-null? (lightdm-configuration-default-session config)) "" + (string-append " +autologin-session =3D " (lightdm-configuration-default-session config))) +(if (lightdm-configuration-autologin-timeout config) + (string-append " +autologin-user-timeout =3D " (number->string + (lightdm-configuration-autologin-timeout confi= g))) + "") " +session-wrapper =3D " (lightdm-configuration-session-wrapper config) " +" (lightdm-configuration-extra-config config))) + + +(define (lightdm-pam-service config) + "Return a PAM service for @command{lightdm}." + (unix-pam-service + "lightdm" + #:allow-empty-passwords? + (lightdm-configuration-allow-empty-passwords? config))) + + +(define (lightdm-greeter-pam-service) + "Return a PAM service for @command{lightdm-greeter}}." + (pam-service + (name "lightdm-greeter") + (auth + (list + ;; Load environment from /etc/environment and ~/.pam_environment + (pam-entry (control "required") (module "pam_env.so")) + ;; Always let the greeter start without authentication + (pam-entry (control "required") (module "pam_permit.so")))) + ;; No action required for account management + (account + (list + (pam-entry (control "required") (module "pam_permit.so")))) + ;; Can't change password + (password + (list + (pam-entry (control "required") (module "pam_deny.so")))) + ;; Setup session + (session + (list + (pam-entry (control "required") (module "pam_unix.so")) + (pam-entry (control "required") (module "pam_env.so")))))) + + +(define (lightdm-autologin-pam-service) + "Return a PAM service for @command{lightdm-autologin}}." + (pam-service + (name "lightdm-autologin") + (auth + (list + ;; Block login if they are globally disabled + (pam-entry (control "required") (module "pam_nologin.so")) + ;; Load environment from /etc/environment and ~/.pam_environment + (pam-entry (control "required") (module "pam_env.so")) + ;; Allow access without authentication + (pam-entry (control "required") (module "pam_permit.so")))) + ;; Stop autologin if account requires action + (account + (list + (pam-entry (control "required") (module "pam_unix.so")))) + ;; Can't change password + (password + (list + (pam-entry (control "required") (module "pam_deny.so")))) + ;; Setup session + (session + (list + (pam-entry (control "required") (module "pam_unix.so")))))) + +(define (lightdm-shepherd-service config) + "Return a for LightDM with CONFIG." + + (define lightdm-command + #~(list #$(file-append (lightdm-configuration-lightdm config) + "/sbin/lightdm"))) +=20 + (list (shepherd-service + (documentation "LightDM display manager.") + (requirement '(dbus-system user-processes host-name)) + (provision '(display-manager)) + (respawn? #f) + (start #~(lambda () + (fork+exec-command + #$lightdm-command + #:environment-variables + (list + (string-append + "PATH=3D/run/current-system/profile/sbin" + ":/run/current-system/profile/bin"))))) + (stop #~(make-kill-destructor))))) + +(define (lightdm-etc-service config) + (let ((lightdm-conf-file + (lightdm-configuration-file config)) + (greeter-conf-file + (lightdm-configuration-greeter-configuration-file config))) + (if greeter-conf-file + (list `("xdg/lightdm/lightdm.conf.d/lightdm.conf" + ,lightdm-conf-file) + `(,(string-append + "xdg/lightdm/" (computed-file-name greeter-conf-file)) + ,greeter-conf-file)) + (list `("xdg/lightdm/lightdm.conf.d/lightdm.conf" + ,lightdm-conf-file))))) + +(define (lightdm-pam-services config) + (list (lightdm-pam-service config) + (lightdm-greeter-pam-service) + (lightdm-autologin-pam-service))) + +(define (lightdm-profile-service config) + (append (list lightdm + (lightdm-configuration-greeter-package config)) + (lightdm-configuration-greeter-assets config))) + +(define lightdm-service-type + (handle-xorg-configuration lightdm-configuration + (service-type (name 'lightdm) + (extensions + (list + (service-extension shepherd-root-service-type + lightdm-shepherd-service) + (service-extension activation-service-type + (const %lightdm-activation)) + (service-extension etc-service-type + lightdm-etc-service) + (service-extension pam-root-service-type + lightdm-pam-services) + (service-extension dbus-root-service-type + (compose list + lightdm-configuration-light= dm)) + (service-extension account-service-type + (const %lightdm-accounts)) + (service-extension profile-service-type + lightdm-profile-service))) + (default-value (lightdm-configuration)) + (description "Return a service that spawns the + LightDM graphical login manager.")))) --=20 2.25.1 --=-=-=--