[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group.
From: |
muradm |
Subject: |
[bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group. |
Date: |
Mon, 08 Aug 2022 21:50:43 +0300 |
User-agent: |
mu4e 1.8.7; emacs 29.0.50 |
From e733977a5cbd2bb34cf129908b16a4a0af830f02 Mon Sep 17 00:00:00 2001
From: muradm <mail@muradm.net>
Date: Fri, 22 Jul 2022 07:09:54 +0300
Subject: [PATCH v3] gnu: seatd-service-type: Should use seat group.
To: 56690@debbugs.gnu.org
* gnu/services/desktop.scm (seatd-service-type): Uses "seat" group.
[extensions]: Added account-service-type with seatd-accounts.
(seatd-accounts): Conditionally produces list with "seat" group.
(<seatd-configuration>):
[user] Removed user field, since it is not going to be used.
[group] Change default value to "seat".
* doc/guix.texi: Mention that users may need to become members of
"seat" group and update default value for group field. Add
explanation on seatd.sock file. Remove dropped user field.
---
doc/guix.texi | 29 +++++++++++++++++++++++++----
gnu/services/desktop.scm | 14 +++++++++-----
gnu/tests/desktop.scm | 9 +++++++++
3 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 9a6a5c307d..92701fca10 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -23171,6 +23171,30 @@ input), without requiring the applications needing
access to be root.
%base-services)
@end lisp
+
+@code{seatd} operates over a UNIX domain socket, with @code{libseat}
+providing the client-side of the protocol. Then applications dealing
+with seat management (e.g. @code{sway}) connects to @code{seatd} via
+mentioned socket.
+
+When seat management is provided by @code{seatd}, @code{libseat} users
+that acquire resources provided by @code{seatd} should have permissions
+to access its UNIX domain socket. By default, @code{seatd-service-type}
+provides ``seat'' group. And @code{libseat} user should become its
+member.
+
+@lisp
+(user-account
+ (name "alice")
+ (group "users")
+ (supplementary-groups '("wheel" ;allow use of sudo, etc.
+ "seat" ;interact with seatd
+ "audio" ;sound card
+ "video" ;video devices such as webcams
+ "cdrom")) ;the good ol' CD-ROM
+ (comment "Bob's sister"))
+@end lisp
+
@end defvr
@deftp {Data Type} seatd-configuration
@@ -23180,10 +23204,7 @@ Configuration record for the seatd daemon service.
@item @code{seatd} (default: @code{seatd})
The seatd package to use.
-@item @code{user} (default: @samp{"root"})
-User to own the seatd socket.
-
-@item @code{group} (default: @samp{"users"})
+@item @code{group} (default: @samp{"seat"})
Group to own the seatd socket.
@item @code{socket} (default: @samp{"/run/seatd.sock"})
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 29a3722f1b..fbd5a46a06 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -13,7 +13,7 @@
;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Reza Alizadeh Majd <r.majd@pantherx.org>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
-;;; Copyright © 2021 muradm <mail@muradm.net>
+;;; Copyright © 2021, 2022 muradm <mail@muradm.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1645,8 +1645,7 @@ (define-record-type* <seatd-configuration>
seatd-configuration
make-seatd-configuration
seatd-configuration?
(seatd seatd-package (default seatd))
- (user seatd-user (default "root"))
- (group seatd-group (default "users"))
+ (group seatd-group (default "seat"))
(socket seatd-socket (default "/run/seatd.sock"))
(logfile seatd-logfile (default "/var/log/seatd.log"))
(loglevel seatd-loglevel (default "info")))
@@ -1660,7 +1659,6 @@ (define (seatd-shepherd-service config)
(provision '(seatd elogind))
(start #~(make-forkexec-constructor
(list #$(file-append (seatd-package config) "/bin/seatd")
- "-u" #$(seatd-user config)
"-g" #$(seatd-group config))
#:environment-variables
(list (string-append "SEATD_LOGLEVEL="
@@ -1670,9 +1668,14 @@ (define (seatd-shepherd-service config)
#:log-file #$(seatd-logfile config)))
(stop #~(make-kill-destructor)))))
+(define seatd-accounts
+ (match-lambda
+ (($ <seatd-configuration> _ group)
+ (list (user-group (name group) (system? #t))))))
+
(define seatd-environment
(match-lambda
- (($ <seatd-configuration> _ _ _ socket)
+ (($ <seatd-configuration> _ _ socket)
`(("SEATD_SOCK" . ,socket)))))
(define seatd-service-type
@@ -1683,6 +1686,7 @@ (define seatd-service-type
applications needing access to be root.")
(extensions
(list
+ (service-extension account-service-type seatd-accounts)
(service-extension session-environment-service-type seatd-environment)
;; TODO: once cgroups is separate dependency we should not mount it here
;; for now it is mounted here, because elogind mounts it
diff --git a/gnu/tests/desktop.scm b/gnu/tests/desktop.scm
index 25971f9225..6fe6ec21be 100644
--- a/gnu/tests/desktop.scm
+++ b/gnu/tests/desktop.scm
@@ -255,6 +255,15 @@ (define (sock-var-sock var)
(socks (map wait-for-unix-socket-m socks)))
(and (= 2 (length socks)) (every identity socks)))))
+ (test-equal "seatd.sock ownership"
+ '("root" "seat")
+ `(,(marionette-eval
+ '(passwd:name (getpwuid (stat:uid (stat "/run/seatd.sock"))))
+ marionette)
+ ,(marionette-eval
+ '(group:name (getgrgid (stat:gid (stat "/run/seatd.sock"))))
+ marionette)))
+
(test-assert "greetd is ready"
(begin
(marionette-type "ps -C greetd -o pid,args --no-headers >
ps-greetd\n"
--
2.37.1
Liliana Marie Prikler <liliana.prikler@ist.tugraz.at> writes:
Am Sonntag, dem 07.08.2022 um 23:05 +0300 schrieb muradm:
* gnu/services/desktop.scm (seatd-service-type): Uses "seat"
group.
[extensions]: Added account-service-type with seatd-accounts.
(seatd-accounts): Conditionally produces list with "seat"
group.
(<seatd-configuration>):
[user] Drop user field, since it is not going to be used.
Removed field.
done
[group] Change default value to "seat".
[existing-group?] Add field which controls if group should be
created or not.
Would be Added field, but see below.
obsolete
* doc/guix.texi: Mention that users may need to become members
of
"seat" group and update default value for group field. Add
explanation on seatd.sock file. Remove dropped user field.
+When seat mamanagement is provided by @code{seatd}, users that
acquire
management.
done
+resources provided by @code{seatd} should have permissions to
access
+its UNIX domain socket. By default, @code{seatd-service-type}
provides
+``seat'' group. And user should become its member.
Which user? Closely related, who acquires resources provided by
@code{seatd}? Just the greeter? A regular user logging in?
What access level is needed/provided? Read access? Write
access?
While I understand what you are saying, for me user is fine, and I
can't come up with better description, as my eyes too blurred on
this subject. Anyway for now I specified it as "libseat user".
+ (group seatd-group (default "seat"))
+ (existing-group? seatd-existing-group? (default #f))
AFAIK this is not necessary. accounts-service-type can handle
multiple
eq? groups, so as long as you're careful with what you put into
group,
you shouldn't get an error.
ok field removed
Cheers
signature.asc
Description: PGP signature
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., (continued)
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., muradm, 2022/08/07
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., muradm, 2022/08/07
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., Liliana Marie Prikler, 2022/08/08
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group.,
muradm <=
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., Liliana Marie Prikler, 2022/08/09
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., muradm, 2022/08/09
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., Liliana Marie Prikler, 2022/08/10
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., muradm, 2022/08/13
- [bug#56690] [PATCH] gnu: seatd-service-type: Should use seat group., muradm, 2022/08/22