unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] Sddm pam authentication failure.
@ 2016-08-27 14:00 David Craven
  2016-08-27 14:00 ` [PATCH] gnu: Add sddm David Craven
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: David Craven @ 2016-08-27 14:00 UTC (permalink / raw)
  To: guix-devel

So I got sddm to start an xfce session when I build sddm with -DENABLE_PAM=OFF.

Any ideas what the problem might be? I tried all kinds of stuff to get PAM to
give me some more information than authentication failure. The /etc/pam_debug
file didn't work. Compiling PAM with --enable-debug didn't work. I enabled *.*
to /var/log/messages in syslog.conf and finally I tried inserting pam_debug.so
rules.

I'm also having trouble starting weston from sddm. I think it's because
XDG_RUNTIME_DIR isn't set. Who is responsible for setting it?

sddm or elogind are plausible options. I looked at the XDG Directory
Specification but couldn't find a straight answer.

David Craven (1):
  services: Add sddm service.

 gnu/local.mk          |   1 +
 gnu/services/sddm.scm | 312 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 313 insertions(+)
 create mode 100644 gnu/services/sddm.scm

-- 
2.9.0

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] gnu: Add sddm.
  2016-08-27 14:00 [PATCH] Sddm pam authentication failure David Craven
@ 2016-08-27 14:00 ` David Craven
  2016-08-27 14:22   ` Marius Bakke
  2016-08-27 14:00 ` [PATCH] services: Add sddm service David Craven
  2016-08-27 16:57 ` [PATCH] Sddm pam authentication failure David Craven
  2 siblings, 1 reply; 6+ messages in thread
From: David Craven @ 2016-08-27 14:00 UTC (permalink / raw)
  To: guix-devel

* gnu/packages/hawaii.scm (sddm): New variable.
---
 gnu/packages/hawaii.scm | 65 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/gnu/packages/hawaii.scm b/gnu/packages/hawaii.scm
index fbf642b..8c99e5f 100644
--- a/gnu/packages/hawaii.scm
+++ b/gnu/packages/hawaii.scm
@@ -17,6 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages hawaii)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gl)
@@ -34,6 +35,7 @@
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system cmake)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:))
 
@@ -382,3 +384,66 @@ It contains a Qt platform theme plugin, session manager, QML plugins and a
 convergent shell for multiple form factors such as desktops, netbooks, phones
 and tablets.")
     (license (list license:gpl2+ license:lgpl2.1+))))
+
+(define-public sddm
+  (package
+    (name "sddm")
+    (version "0.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/sddm/sddm"
+                    "/releases/download/v" version "/"
+                    "sddm-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0z9lvlb01np9ygdwhy0v4m3cpbfm8bj7jfwzg6nkwy7prjm8r1nx"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("extra-cmake-modules" ,extra-cmake-modules)
+       ("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)))
+    (inputs
+     `(("glib" ,glib)
+       ("greenisland" ,greenisland)
+       ("libxcb" ,libxcb)
+       ("libxkbcommon" ,libxkbcommon)
+       ("linux-pam" ,linux-pam)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("shadow" ,shadow)
+       ("wayland" ,wayland)))
+    (arguments
+     `(#:configure-flags
+       (list
+        ;; Currently doesn't do anything
+        ;; Option added by enable wayland greeters PR
+        "-DENABLE_WAYLAND=ON"
+        "-DENABLE_PAM=OFF"
+        "-DCONFIG_FILE=/etc/sddm.conf"
+        ;; Set path to /etc/login.defs
+        ;; Alternatively use -DUID_MIN and -DUID_MAX
+        (string-append "-DLOGIN_DEFS_PATH="
+                       (assoc-ref %build-inputs "shadow")
+                       "/etc/login.defs")
+        (string-append "-DQT_IMPORTS_DIR="
+                       (assoc-ref %outputs "out") "/qml")
+        (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
+                       (assoc-ref %outputs "out") "/etc"))
+       #:modules ((guix build cmake-build-system)
+                  (guix build qt-utils)
+                  (guix build utils))
+       #:imported-modules (,@%cmake-build-system-modules
+                           (guix build qt-utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-programs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-qt-program out "sddm")
+               (wrap-qt-program out "sddm-greeter")
+               #t))))))
+    (synopsis "QML based X11 and Wayland display manager")
+    (description "QML based X11 and Wayland display manager.")
+    (home-page "https://github.com/sddm/sddm")
+    (license license:gpl2)))
-- 
2.9.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH] services: Add sddm service.
  2016-08-27 14:00 [PATCH] Sddm pam authentication failure David Craven
  2016-08-27 14:00 ` [PATCH] gnu: Add sddm David Craven
@ 2016-08-27 14:00 ` David Craven
  2016-08-27 16:57 ` [PATCH] Sddm pam authentication failure David Craven
  2 siblings, 0 replies; 6+ messages in thread
From: David Craven @ 2016-08-27 14:00 UTC (permalink / raw)
  To: guix-devel

* gnu/services/sddm.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
 gnu/local.mk          |   1 +
 gnu/services/sddm.scm | 312 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 313 insertions(+)
 create mode 100644 gnu/services/sddm.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index 8c2f6b4..89a4783 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -390,6 +390,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/networking.scm			\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
+  %D%/services/sddm.scm				\
   %D%/services/spice.scm				\
   %D%/services/ssh.scm				\
   %D%/services/web.scm				\
diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm
new file mode 100644
index 0000000..e6e2828
--- /dev/null
+++ b/gnu/services/sddm.scm
@@ -0,0 +1,312 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 David Craven <david@craven.ch>
+;;;
+;;; 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 sddm)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages hawaii)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu services)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services xorg)
+  #:use-module (gnu system pam)
+  #:use-module (gnu system shadow)
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:export (sddm-configuration
+            sddm-confiugration?
+            sddm-service-type
+            sddm-service))
+
+(define-record-type* <sddm-configuration>
+  sddm-configuration      make-sddm-configuration
+  sddm-configuration?
+  (sddm                   sddm-configuration-sddm
+                          (default sddm))
+  (allow-empty-passwords? sddm-configuration-allow-empty-passwords?
+                          (default #t))
+
+  ;; [General]
+  ;; valid values are x11 and wayland
+  ;; currently doesn't do anything is enabled by wayland greeter PR
+  (display-server         sddm-configuration-display-server
+                          (default "x11"))
+  ;; valid values are on, off or none
+  (numlock                sddm-configuration-numlock
+                          (default "on"))
+  (halt-command           sddm-configuration-halt-command
+                          (default #~(string-append #$shepherd "/sbin/halt")))
+  (reboot-command         sddm-configuration-reboot-command
+                          (default #~(string-append #$shepherd "/sbin/reboot")))
+
+  ;; [Theme]
+  ;; valid values are elarun or maldives
+  (theme                  sddm-configuration-theme
+                          (default "maldives"))
+  (themes-directory       sddm-configuration-themes-directory
+                          (default #~(string-append #$sddm "/share/sddm/themes")))
+  (faces-directory        sddm-configuration-faces-directory
+                          (default #~(string-append #$sddm "/share/sddm/faces")))
+
+  ;; [Users]
+  (default-path           sddm-configuration-default-path
+                          (default "/run/current-system/profile/bin"))
+  (minimum-uid            sddm-configuration-minimum-uid
+                          (default 1000))
+  (maximum-uid            sddm-configuration-maximum-uid
+                          (default 2000))
+  (remember-last-user?    sddm-configuration-remember-last-user?
+                          (default #t))
+  (remember-last-session? sddm-configuration-remember-last-session?
+                          (default #t))
+  (hide-users             sddm-configuration-hide-users
+                          (default ""))
+  (hide-shells            sddm-configuration-hide-shells
+                          (default #~(string-append #$shadow "/sbin/nologin")))
+
+  ;; [Wayland]
+  (session-command        sddm-configuration-session-command
+                          (default #~(string-append #$sddm "/share/sddm/scripts/wayland-session")))
+  (sessions-directory     sddm-configuration-sessions-directory
+                          (default "/run/current-system/profile/share/wayland-sessions"))
+  ;; [X11]
+  (xorg-server-path       sddm-configuration-xorg-server-path
+                          (default (xorg-start-command)))
+  (xauth-path             sddm-configuration-xauth-path
+                          (default #~(string-append #$xauth "/bin/xauth")))
+  (xephyr-path            sddm-configuration-xephyr-path
+                          (default #~(string-append #$xorg-server "/bin/Xephyr")))
+  (xdisplay-start         sddm-configuration-xdisplay-start
+                          (default #~(string-append #$sddm "/share/sddm/scripts/Xsetup")))
+  (xdisplay-stop          sddm-configuration-xdisplay-stop
+                          (default #~(string-append #$sddm "/share/sddm/scripts/Xstop")))
+  (xsession-command       sddm-configuration-xsession-command
+                          (default (xinitrc)))
+  (xsessions-directory    sddm-configuration-xsessions-directory
+                          (default "/run/current-system/profile/share/xsessions"))
+  (minimum-vt             sddm-configuration-minimum-vt
+                          (default 7))
+  (xserver-arguments      sddm-configuration-xserver-arguments
+                          (default "-nolisten tcp"))
+
+  ;; [Autologin]
+  (auto-login-user        sddm-configuration-auto-login-user
+                          (default ""))
+  (auto-login-session     sddm-configuration-auto-login-session
+                          (default ""))
+  (relogin?               sddm-configuration-relogin?
+                          (default #f)))
+
+(define (sddm-configuration-file config)
+  ;; [XDisplay] -> [X11] in sddm 0.14.0
+  ;; [WaylandDisplay] -> [Wayland] in sddm 0.14.0
+  (mixed-text-file "sddm.conf" "
+[General]
+DisplayServer="        (sddm-configuration-display-server config)              "
+Numlock="              (sddm-configuration-numlock config)                     "
+HaltCommand="          (sddm-configuration-halt-command config)                "
+RebootCommand="        (sddm-configuration-reboot-command config)              "
+
+[Users]
+DefaultPath="          (sddm-configuration-default-path config)                "
+MinimumUid="           (number->string (sddm-configuration-minimum-uid config))"
+MaximumUid="           (number->string (sddm-configuration-maximum-uid config))"
+RememberLastUser="     (if (sddm-configuration-remember-last-user? config)
+                           "true" "false")                                     "
+RememberLastSession="  (if (sddm-configuration-remember-last-session? config)
+                           "true" "false")                                     "
+HideUsers="            (sddm-configuration-hide-users config)                  "
+Hideshells="           (sddm-configuration-hide-shells config)                 "
+
+[Theme]
+Current="              (sddm-configuration-theme config)                       "
+ThemeDir="             (sddm-configuration-themes-directory config)            "
+FacesDir="             (sddm-configuration-faces-directory config)             "
+
+[WaylandDisplay]
+SessionCommand="       (sddm-configuration-session-command config)             "
+SessionDir="           (sddm-configuration-sessions-directory config)          "
+
+[XDisplay]
+ServerPath="           (sddm-configuration-xorg-server-path config)            "
+XauthPath="            (sddm-configuration-xauth-path config)                  "
+XephyrPath="           (sddm-configuration-xephyr-path config)                 "
+DisplayCommand="       (sddm-configuration-xdisplay-start config)              "
+DisplayStopCommand="   (sddm-configuration-xdisplay-stop config)               "
+SessionCommand="       (sddm-configuration-xsession-command config)            "
+SessionDir="           (sddm-configuration-xsessions-directory config)         "
+MinimumVT="            (number->string (sddm-configuration-minimum-vt config)) "
+ServerArguments="      (sddm-configuration-xserver-arguments config)           "
+
+[Autologin]
+User="                 (sddm-configuration-auto-login-user config)             "
+Session="              (sddm-configuration-auto-login-session config)          "
+Relogin="              (if (sddm-configuration-relogin? config)
+                           "true" "false")                                     "
+"))
+
+(define (sddm-activation config)
+  "Return the activation gexp for CONFIG."
+  #~(begin
+      (open-output-file "/etc/pam_debug")
+      (symlink #$(sddm-configuration-file config) "/etc/sddm.conf")))
+
+(define (sddm-shepherd-service config)
+  "Return a <shepherd-service> for sddm with CONFIG."
+
+  (define sddm-command
+    #~(list (string-append #$(sddm-configuration-sddm config) "/bin/sddm")))
+
+  (list (shepherd-service
+         (documentation "SDDM display manager.")
+         (requirement '(user-processes))
+         (provision '(display-manager))
+         (start #~(make-forkexec-constructor #$sddm-command))
+         (stop #~(make-kill-destructor)))))
+
+(define (sddm-pam-service)
+  "Return a PAM service for @command{sddm}."
+  (pam-service
+   (name "sddm")
+   (auth
+    (list
+     (pam-entry
+      (control "include")
+      (module "other"))))
+   (account
+    (list
+     (pam-entry
+      (control "include")
+      (module "other"))))
+   (password
+    (list
+     (pam-entry
+      (control "include")
+      (module "other"))))
+   (session
+    (list
+     (pam-entry
+      (control "include")
+      (module "other"))))))
+
+(define (sddm-greeter-pam-service)
+  "Return a PAM service for @command{sddm-greeter}."
+  (pam-service
+   (name "sddm-greeter")
+   (auth
+    (list
+     ;; Load environment form /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"))))
+   (account
+    (list
+     ;; No action required for account management
+     (pam-entry
+      (control "required")
+      (module "pam_permit.so"))))
+   (password
+    (list
+     ;; Can't change password
+     (pam-entry
+      (control "required")
+      (module "pam_deny.so"))))
+   (session
+    (list
+     ;; Setup session
+     (pam-entry
+      (control "required")
+      (module "pam_unix.so"))
+     (pam-entry
+      (control "optional")
+      (module #~(string-append #$elogind "/lib/security/pam_elogind.so")))))))
+
+(define (sddm-autologin-pam-service)
+  "Return a PAM service for @command{sddm-autologin}"
+  (pam-service
+   (name "sddm-autologin")
+   (auth
+    (list
+     (pam-entry
+      (control "requisite")
+      (module "pam_nologin.so"))
+     (pam-entry
+      (control "required")
+      (module "pam_succeed_if.so")
+      (arguments (list "uid >= 1000 quiet")))
+     (pam-entry
+      (control "required")
+      (module "pam_permit.so"))))
+   (account
+    (list
+     (pam-entry
+      (control "include")
+      (module "sddm"))))
+   (password
+    (list
+     (pam-entry
+      (control "include")
+      (module "sddm"))))
+   (session
+    (list
+     (pam-entry
+      (control "include")
+      (module "sddm"))))))
+
+(define (startxfce4-pam-service)
+  (unix-pam-service "startxfce4" #:allow-empty-passwords? #t))
+
+(define (weston-pam-service)
+  (unix-pam-service "weston" #:allow-empty-passwords? #t))
+
+(define (sddm-pam-services config)
+  (list (sddm-pam-service)
+        (sddm-greeter-pam-service)
+        (sddm-autologin-pam-service)
+        (startxfce4-pam-service)))
+
+(define %sddm-accounts
+  (list (user-group (name "sddm") (system? #t))
+        (user-account
+         (name "sddm")
+         (group "sddm")
+         (system? #t)
+         (comment "SDDM user")
+         (home-directory "/var/lib/sddm")
+         (shell #~(string-append #$shadow "/sbin/nologin")))))
+
+(define sddm-service-type
+  (service-type (name 'sddm)
+                (extensions
+                  (list (service-extension shepherd-root-service-type
+                                           sddm-shepherd-service)
+                        (service-extension activation-service-type
+                                           sddm-activation)
+                        (service-extension pam-root-service-type
+                                           sddm-pam-services)
+                        (service-extension account-service-type
+                                           (const %sddm-accounts))))))
+
+(define* (sddm-service #:optional (config (sddm-configuration)))
+  "Run the @uref{https://github.com/sddm/sddm,SSDM display manager}
+with the given @var{config}, a @code{<sddm-configuration>} object."
+  (service sddm-service-type config))
-- 
2.9.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] gnu: Add sddm.
  2016-08-27 14:00 ` [PATCH] gnu: Add sddm David Craven
@ 2016-08-27 14:22   ` Marius Bakke
  2016-08-31 15:31     ` David Craven
  0 siblings, 1 reply; 6+ messages in thread
From: Marius Bakke @ 2016-08-27 14:22 UTC (permalink / raw)
  To: David Craven, guix-devel

David Craven <david@craven.ch> writes:

> * gnu/packages/hawaii.scm (sddm): New variable.

IMO this should go in display-managers.scm.

Even better if we can rename slim.scm first, to avoid moving it later.

> +    (license license:gpl2)))

This should be gpl2+. Additionally there are some expat and CC-BY files
according to the LICENSE section of the README.

The rest of the patch LGTM, although I have not tried it.

Nice work!

Marius

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Sddm pam authentication failure.
  2016-08-27 14:00 [PATCH] Sddm pam authentication failure David Craven
  2016-08-27 14:00 ` [PATCH] gnu: Add sddm David Craven
  2016-08-27 14:00 ` [PATCH] services: Add sddm service David Craven
@ 2016-08-27 16:57 ` David Craven
  2 siblings, 0 replies; 6+ messages in thread
From: David Craven @ 2016-08-27 16:57 UTC (permalink / raw)
  To: guix-devel

So it looks like elogind sets XDG_RUNTIME_DIR. Need to fix the pam
issue and then the weston session will hopefully just work (just
kidding, like that ever happens =P)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] gnu: Add sddm.
  2016-08-27 14:22   ` Marius Bakke
@ 2016-08-31 15:31     ` David Craven
  0 siblings, 0 replies; 6+ messages in thread
From: David Craven @ 2016-08-31 15:31 UTC (permalink / raw)
  To: Marius Bakke; +Cc: guix-devel

Hi Marius,

Thanks!

I got the pam issue resolved. hawaii sessions start now (still look
ugly, need to patch some paths so that it finds themes etc.). weston
still has a problem - can't open drm device. Seems to be elogind
related.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-08-31 15:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-27 14:00 [PATCH] Sddm pam authentication failure David Craven
2016-08-27 14:00 ` [PATCH] gnu: Add sddm David Craven
2016-08-27 14:22   ` Marius Bakke
2016-08-31 15:31     ` David Craven
2016-08-27 14:00 ` [PATCH] services: Add sddm service David Craven
2016-08-27 16:57 ` [PATCH] Sddm pam authentication failure David Craven

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).