[email protected] (Ludovic Courtès) writes: > Oops, I had left an extra #:use-module line in there, sorry! > > Could you try this one?
On my GuixSD system, The new patch works with one problem: Network Manager still does not show any wireless networks. I solved this by adding wpa-supplicant-service (this service was mentioned in the manual, but it was actually missing from code!) and making 'network-manager-shepherd-service' require it. Here's the updated patch:
diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm
index 876f56d..26390a4 100644
--- a/gnu/services/dbus.scm
+++ b/gnu/services/dbus.scm
@@ -21,7 +21,9 @@
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (gnu system shadow)
+ #:use-module (gnu system pam)
#:use-module ((gnu packages glib) #:select (dbus))
+ #:use-module (gnu packages polkit)
#:use-module (gnu packages admin)
#:use-module (guix gexp)
#:use-module (guix records)
@@ -30,7 +32,10 @@
#:export (dbus-configuration
dbus-configuration?
dbus-root-service-type
- dbus-service))
+ dbus-service
+
+ polkit-service-type
+ polkit-service))
;;;
;;; D-Bus.
@@ -218,4 +223,91 @@ and policy files. For example, to allow avahi-daemon to use the system bus,
(dbus-configuration (dbus dbus)
(services services))))
+
+;;;
+;;; Polkit privilege management service.
+;;;
+
+(define-record-type* <polkit-configuration>
+ polkit-configuration make-polkit-configuration
+ polkit-configuration?
+ (polkit polkit-configuration-polkit ;<package>
+ (default polkit))
+ (actions polkit-configuration-actions ;list of <package>
+ (default '())))
+
+(define %polkit-accounts
+ (list (user-group (name "polkitd") (system? #t))
+ (user-account
+ (name "polkitd")
+ (group "polkitd")
+ (system? #t)
+ (comment "Polkit daemon user")
+ (home-directory "/var/empty")
+ (shell "/run/current-system/profile/sbin/nologin"))))
+
+(define %polkit-pam-services
+ (list (unix-pam-service "polkit-1")))
+
+(define (polkit-directory packages)
+ "Return a directory containing an @file{actions} and possibly a
+@file{rules.d} sub-directory, for use as @file{/etc/polkit-1}."
+ (with-imported-modules '((guix build union))
+ (computed-file "etc-polkit-1"
+ #~(begin
+ (use-modules (guix build union) (srfi srfi-26))
+
+ (union-build #$output
+ (map (cut string-append <>
+ "/share/polkit-1")
+ (list #$@packages)))))))
+
+(define polkit-etc-files
+ (match-lambda
+ (($ <polkit-configuration> polkit packages)
+ `(("polkit-1" ,(polkit-directory (cons polkit packages)))))))
+
+(define polkit-setuid-programs
+ (match-lambda
+ (($ <polkit-configuration> polkit)
+ (list (file-append polkit "/lib/polkit-1/polkit-agent-helper-1")
+ (file-append polkit "/bin/pkexec")))))
+
+(define polkit-service-type
+ (service-type (name 'polkit)
+ (extensions
+ (list (service-extension account-service-type
+ (const %polkit-accounts))
+ (service-extension pam-root-service-type
+ (const %polkit-pam-services))
+ (service-extension dbus-root-service-type
+ (compose
+ list
+ polkit-configuration-polkit))
+ (service-extension etc-service-type
+ polkit-etc-files)
+ (service-extension setuid-program-service-type
+ polkit-setuid-programs)))
+
+ ;; Extensions are lists of packages that provide polkit rules
+ ;; or actions under share/polkit-1/{actions,rules.d}.
+ (compose concatenate)
+ (extend (lambda (config actions)
+ (polkit-configuration
+ (inherit config)
+ (actions
+ (append (polkit-configuration-actions config)
+ actions)))))))
+
+(define* (polkit-service #:key (polkit polkit))
+ "Return a service that runs the
+@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
+management service}, which allows system administrators to grant access to
+privileged operations in a structured way. By querying the Polkit service, a
+privileged system component can know when it should grant additional
+capabilities to ordinary users. For example, an ordinary user can be granted
+the capability to suspend the system if the user is logged in locally."
+ (service polkit-service-type
+ (polkit-configuration (polkit polkit))))
+
;;; dbus.scm ends here
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index dfd1ea6..7555780 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -37,7 +37,6 @@
#:use-module (gnu packages gnome)
#:use-module (gnu packages xfce)
#:use-module (gnu packages avahi)
- #:use-module (gnu packages polkit)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages suckless)
#:use-module (gnu packages linux)
@@ -68,11 +67,6 @@
bluetooth-service
- polkit-configuration
- polkit-configuration?
- polkit-service
- polkit-service-type
-
elogind-configuration
elogind-configuration?
elogind-service
@@ -415,93 +409,6 @@ Users need to be in the @code{lp} group to access the D-Bus service.
;;;
-;;; Polkit privilege management service.
-;;;
-
-(define-record-type* <polkit-configuration>
- polkit-configuration make-polkit-configuration
- polkit-configuration?
- (polkit polkit-configuration-polkit ;<package>
- (default polkit))
- (actions polkit-configuration-actions ;list of <package>
- (default '())))
-
-(define %polkit-accounts
- (list (user-group (name "polkitd") (system? #t))
- (user-account
- (name "polkitd")
- (group "polkitd")
- (system? #t)
- (comment "Polkit daemon user")
- (home-directory "/var/empty")
- (shell "/run/current-system/profile/sbin/nologin"))))
-
-(define %polkit-pam-services
- (list (unix-pam-service "polkit-1")))
-
-(define (polkit-directory packages)
- "Return a directory containing an @file{actions} and possibly a
-@file{rules.d} sub-directory, for use as @file{/etc/polkit-1}."
- (with-imported-modules '((guix build union))
- (computed-file "etc-polkit-1"
- #~(begin
- (use-modules (guix build union) (srfi srfi-26))
-
- (union-build #$output
- (map (cut string-append <>
- "/share/polkit-1")
- (list #$@packages)))))))
-
-(define polkit-etc-files
- (match-lambda
- (($ <polkit-configuration> polkit packages)
- `(("polkit-1" ,(polkit-directory (cons polkit packages)))))))
-
-(define polkit-setuid-programs
- (match-lambda
- (($ <polkit-configuration> polkit)
- (list (file-append polkit "/lib/polkit-1/polkit-agent-helper-1")
- (file-append polkit "/bin/pkexec")))))
-
-(define polkit-service-type
- (service-type (name 'polkit)
- (extensions
- (list (service-extension account-service-type
- (const %polkit-accounts))
- (service-extension pam-root-service-type
- (const %polkit-pam-services))
- (service-extension dbus-root-service-type
- (compose
- list
- polkit-configuration-polkit))
- (service-extension etc-service-type
- polkit-etc-files)
- (service-extension setuid-program-service-type
- polkit-setuid-programs)))
-
- ;; Extensions are lists of packages that provide polkit rules
- ;; or actions under share/polkit-1/{actions,rules.d}.
- (compose concatenate)
- (extend (lambda (config actions)
- (polkit-configuration
- (inherit config)
- (actions
- (append (polkit-configuration-actions config)
- actions)))))))
-
-(define* (polkit-service #:key (polkit polkit))
- "Return a service that runs the
-@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
-management service}, which allows system administrators to grant access to
-privileged operations in a structured way. By querying the Polkit service, a
-privileged system component can know when it should grant additional
-capabilities to ordinary users. For example, an ordinary user can be granted
-the capability to suspend the system if the user is logged in locally."
- (service polkit-service-type
- (polkit-configuration (polkit polkit))))
-
-
-;;;
;;; Colord D-Bus service.
;;;
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 5a83240..1b4ad56 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -66,7 +66,8 @@
wicd-service
network-manager-service
connman-service
- wpa-supplicant-service-type))
+ wpa-supplicant-service-type
+ wpa-supplicant-service))
;;; Commentary:
;;;
@@ -682,7 +683,7 @@ and @command{wicd-curses} user interfaces."
(list (shepherd-service
(documentation "Run the NetworkManager.")
(provision '(networking))
- (requirement '(user-processes dbus-system loopback))
+ (requirement '(user-processes dbus-system loopback wpa-supplicant))
(start #~(make-forkexec-constructor
(list (string-append #$network-manager
"/sbin/NetworkManager")
@@ -695,6 +696,7 @@ and @command{wicd-curses} user interfaces."
(list (service-extension shepherd-root-service-type
network-manager-shepherd-service)
(service-extension dbus-root-service-type list)
+ (service-extension polkit-service-type list)
(service-extension activation-service-type
(const %network-manager-activation))
;; Add network-manager to the system profile.
@@ -777,4 +779,10 @@ configure networking."
(service-extension dbus-root-service-type list)
(service-extension profile-service-type list)))))
+(define* (wpa-supplicant-service #:key (wpa-supplicant wpa-supplicant))
+ "Return a service that runs WPA supplicant (https://w1.fi/wpa_supplicant/),
+an authentication daemon required to authenticate against encrypted WiFi or
+ethernet networks. Service is started to listen for requests on D-Bus."
+ (service wpa-supplicant-service-type wpa-supplicant))
+
;;; networking.scm ends here
I then updated my operating system configuration file as follows:
--- /home/marusich/config.scm 2016-11-23 19:01:54.635709804 -0800
+++ /home/marusich/config-with-network-manager.scm 2016-11-23 21:13:33.351383372 -0800
@@ -9,14 +9,20 @@
(use-package-modules certs cryptsetup xdisorg admin gnome)
(define %modified-desktop-services
- (modify-services %desktop-services
- (guix-service-type config =>
- (guix-configuration
- (inherit config)
- (substitute-urls
- '("https://hydra-mirror.marusich.info"
- "https://mirror.hydra.gnu.org"
- "https://hydra.gnu.org"))))))
+ (cons*
+ (network-manager-service)
+ (wpa-supplicant-service)
+ (remove
+ (lambda (service)
+ (eq? wicd-service-type (service-kind service)))
+ (modify-services %desktop-services
+ (guix-service-type config =>
+ (guix-configuration
+ (inherit config)
+ (substitute-urls
+ '("https://hydra-mirror.marusich.info"
+ "https://mirror.hydra.gnu.org"
+ "https://hydra.gnu.org"))))))))
(operating-system
After I ran 'guix system configuration', Network Manager pretty much just works. Specifically: * Network Manager starts automatically on boot. * Network Manager detects wireless networks. * I can connect manually to wireless networks using Network Manager. However, there is one problem: Even if I select "Connect automatically" (in the "Identity" section of the settings page within Network Manager for my wireless network), Network Manager does not automatically connect to the network. I'm not sure why. I would love to see this patch go into master, but I have a few concerns (which are probably non-blocking): * It looks like it's possible to have an "incomplete deployment" of services in GuixSD. For example, if you add (e.g., network-manager-service) without also adding wpa-supplicant-service, the 'reconfigure' will succeed, but the wireless aspects of Network Manager will not work. This seems undesirable. In the same way that Guix/Nix ensures "complete deployment" of components in the store, is there a way we can ensure complete deployment of services in GuixSD? * Should we update the desktop templates in gnu/system/examples/desktop.tmpl? It looks like it's impossible to add both wicd-service and network-manager-service to the same config file. Therefore, perhaps we should supply a "gnome-desktop.tmpl" example for those who want the GNOME desktop specifically? The changes necessary to get Network Manager working with the "desktop.tmpl" might not be easy for someone who is new to Guile. * I'm not sure (yet) how to investigate why Network Manager is failing to automatically connect. If you have any ideas, please let me know. -- Chris
signature.asc
Description: PGP signature
