unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: L  p R n  d n    <guix@lprndn.info>
To: Brice Waegeneire <brice@waegenei.re>
Cc: 35305@debbugs.gnu.org
Subject: [bug#35305] LightDM service
Date: Thu, 09 Apr 2020 18:02:15 +0200	[thread overview]
Message-ID: <87sghcir5k.fsf@lprndn.info> (raw)
In-Reply-To: <e0dd6ca666986ea18597f95873e3b1c1@waegenei.re> (Brice Waegeneire's message of "Tue, 07 Apr 2020 17:06:34 +0000")

[-- Attachment #1: Type: text/plain, Size: 4610 bytes --]

Hello,

Brice Waegeneire <brice@waegenei.re> 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 “lightdm-service-type” support “set-xorg-configuration”
> like the other login manager now does by using “handle-xorg-configuration”
> see 50be0da7bfd5c108697679effeb2a893d2f37598 for how it's done in GDM, SLIM
> and co.
>
>> +         (comment "LighDM user")
>                           ^ a “t” is missing here

Huh.. Done (I think...) and done!

>> +(define (lightdm-shepherd-service config)
>> +  "Return a <lightdm-service> for LightDM with CONFIG."
>> +
>> +  (define lightdm-command
>> +    #~(list (string-append #$(lightdm-configuration-lightdm config)
>> "/sbin/lightdm")))
> […]
>> + (fork+exec-command
>> + (list #$(file-append
>> + (lightdm-configuration-lightdm config)
>> + "/sbin/lightdm"))
>
> “lightdm-command” isn't used, I get the hint it ought to be the argument of
> “fork+exec-command.”

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
> “/etc” since it cause edge case during rollback and such, specifying the
> configuration by passing the “--config” argument to “lightdm” 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))))))
>
> “%user” could go in the “let”. BTW can't lightdm use its user home
> directory instead of “/var/lib/lightdm-data” or the reverse; IOW does it
> need to have to own two directories in “/var/lib”?

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 “gnu/services/lightdm.scm” exceed the maximal 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

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-lightdm-Update-1.30.0.patch --]
[-- Type: text/x-patch, Size: 1547 bytes --]

From 461b4c27816d4340a37209ca5389d7ec9f373581 Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-gnu-lightdm-Add-vala-bindings.patch --]
[-- Type: text/x-patch, Size: 851 bytes --]

From a2d8e9027e12dabb0acebd3c32aff555727c4129 Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-gnu-lightdm-Disable-python-tests-only.patch --]
[-- Type: text/x-patch, Size: 5405 bytes --]

From 524bf60a51f0775d165347a1f2bf5e82a842261d Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-gnu-lightdm-gtk-greeter-Update-to-2.0.7.patch --]
[-- Type: text/x-patch, Size: 1308 bytes --]

From 0f3bc9f7b17b4a099a9622c92b7b2fdb4076ba24 Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: 0005-gnu-lightdm-gtk-greeter-Fix-at-spi-runtime-dependenc.patch --]
[-- Type: text/x-patch, Size: 1315 bytes --]

From b394a0e2019c9780b669a3258fe8e9afb5dfb76d Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: 0006-gnu-lightdm-gtk-greeter-Fix-.desktop-file.patch --]
[-- Type: text/x-patch, Size: 1682 bytes --]

From f695692a52e5768e9d40a485140c148e88c51593 Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: 0007-gnu-lightdm-gtk-greeter-Wrap-binary.patch --]
[-- Type: text/x-patch, Size: 2275 bytes --]

From eaa49a238ab60f6a905506a750914ad3269c6e15 Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: 0008-gnu-lightdm-Build-accountsservice-files.patch --]
[-- Type: text/x-patch, Size: 997 bytes --]

From 967da134843193aaaded8a681d44734a9702e247 Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #10: 0009-gnu-lightdm-gtk-greeter-Fix-some-warnings.patch --]
[-- Type: text/x-patch, Size: 1122 bytes --]

From f5f2da7c91530ca4ad7aae38aa083cff81c1e9bc Mon Sep 17 00:00:00 2001
From: Lprndn <lprndn@gmail.com>
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


[-- Attachment #11: 0010-services-Add-lightdm-service-type.patch --]
[-- Type: text/x-patch, Size: 17924 bytes --]

From 5be647a2c7e1994f7cf970fa79fe693ffd4415b8 Mon Sep 17 00:00:00 2001
From: L  p R n  d n <guix@lprndn.info>
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
 
+@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-configuration-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-session-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 =				\
   %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 © 2019,2020 L  p R n  d n   <guix@lprndn.info>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+
+(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>
+  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 = " (lightdm-gtk-greeter-configuration-theme-name config) "
+icon-theme-name = "
+(lightdm-gtk-greeter-configuration-icon-theme-name config) "
+cursor-theme-name = "
+(lightdm-gtk-greeter-configuration-cursor-theme-name config) "
+cursor-theme-size = " (number->string
+                       (lightdm-gtk-greeter-configuration-cursor-size config))
+(if (string-null? (lightdm-gtk-greeter-configuration-background config)) ""
+    (string-append "
+background = " (lightdm-gtk-greeter-configuration-background config))) "
+" (lightdm-gtk-greeter-configuration-extra-config config)))
+
+;; LIGHTDM
+
+(define-record-type* <lightdm-configuration>
+  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 (= uid (stat:uid st)))
+                           (not (= 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 = lightdm
+greeters-directory = /run/current-system/profile/share/xgreeters
+sessions-directory = "  (lightdm-configuration-sessions-directory config) "
+
+
+[Seat:*]
+xserver-command = "  (xorg-start-command (lightdm-configuration-xorg config)) "
+greeter-session = "       (lightdm-configuration-greeter-name config) "
+user-session = "          (lightdm-configuration-default-session config)
+(if (string-null? (lightdm-configuration-autologin-user config)) ""
+    (string-append "
+autologin-user = " (lightdm-configuration-autologin-user config)))
+(if (string-null? (lightdm-configuration-default-session config)) ""
+    (string-append "
+autologin-session = " (lightdm-configuration-default-session config)))
+(if (lightdm-configuration-autologin-timeout config)
+    (string-append "
+autologin-user-timeout = " (number->string
+                            (lightdm-configuration-autologin-timeout config)))
+    "") "
+session-wrapper = " (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 <lightdm-service> for LightDM with CONFIG."
+
+  (define lightdm-command
+    #~(list #$(file-append (lightdm-configuration-lightdm config)
+                           "/sbin/lightdm")))
+ 
+  (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=/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-lightdm))
+                   (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."))))
-- 
2.25.1


  reply	other threads:[~2020-04-09 16:03 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-17 14:24 [bug#35305] [WIP] LightDM service L p R n d n
2019-04-18 11:20 ` Jonathan Brielmaier
     [not found] ` <handler.35305.B.155550391014002.ack@debbugs.gnu.org>
2019-04-18 13:20   ` [bug#35305] Acknowledgement ([WIP] LightDM service) L p R n d n
2019-04-18 16:03     ` L p R n d n
2019-08-26 15:58   ` L p R n d n
2020-03-15 21:50     ` Nicolò Balzarotti
2020-03-16  7:34       ` Efraim Flashner
2020-03-16  8:36         ` L p R n d n
2020-03-19 11:54       ` [bug#35305] LightDM service L p R n d n
2019-05-23 11:04 ` [bug#35305] [PATCH] " L p R n d n
2020-04-07 17:06 ` [bug#35305] " Brice Waegeneire
2020-04-09 16:02   ` L p R n d n [this message]
2020-04-12  9:53     ` Brice Waegeneire
2020-04-14  9:38       ` L p R n d n
2020-04-14 13:17         ` L p R n d n
2020-04-22 15:26       ` L p R n d n
2020-05-06 14:05 ` L p R n d n
2020-05-08 22:18   ` Ricardo Wurmus
2020-05-09 15:09     ` L p R n d n
2020-05-10 19:21       ` Ricardo Wurmus
2020-05-11 10:14         ` L p R n d n
2020-05-12  9:59         ` L p R n d n
2020-05-20 20:51           ` Ricardo Wurmus
2020-05-21  8:28             ` L p R n d n
2020-05-21  9:23               ` Ricardo Wurmus
2020-06-08 15:35                 ` L p R n d n
2022-08-04  5:09                   ` [bug#35305] [WIP] " Maxim Cournoyer
2020-06-19 14:47                 ` [bug#35305] " L p R n d n
2022-08-04  2:19   ` [bug#35305] [WIP] " Maxim Cournoyer
2022-08-31  7:13 ` bug#35305: " Ricardo Wurmus

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

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87sghcir5k.fsf@lprndn.info \
    --to=guix@lprndn.info \
    --cc=35305@debbugs.gnu.org \
    --cc=brice@waegenei.re \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).