gnu: desktop: Add seatd-service-type.

* gnu/services/desktop.scm (seatd-service-type): New variable
* gnu/services/desktop.scm (seatd-configuration): New data type

Signed-off-by: Lars-Dominik Braun <ldb@leibniz-psychology.org>
This commit is contained in:
muradm 2022-06-15 12:17:41 +03:00 committed by Lars-Dominik Braun
parent 167b8f29b3
commit d6dda325c1
No known key found for this signature in database
GPG Key ID: 421377011A378446
2 changed files with 107 additions and 1 deletions

@ -22875,6 +22875,52 @@ and ``passwd'' is with the value @code{passwd}.
@end table
@end deftp
@defvr {Scheme Variable} seatd-service-type
@uref{https://sr.ht/~kennylevinsen/seatd/, seatd} is a minimal seat
management daemon.
Seat management takes care of mediating access to shared devices (graphics,
input), without requiring the applications needing access to be root.
@lisp
(append
(list
;; make sure seatd is running
(service seatd-service-type))
;; normally one would want %base-services
%base-services)
@end lisp
@end defvr
@deftp {Data Type} seatd-configuration
Configuration record for the seatd daemon service.
@table @asis
@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"})
Group to own the seatd socket.
@item @code{socket} (default: @samp{"/run/seatd.sock"})
Where to create the seatd socket.
@item @code{logfile} (default: @samp{"/var/log/seatd.log"})
Log file to write to.
@item @code{loglevel} (default: @samp{"error"})
Log level to output logs. Possible values: @samp{"silent"}, @samp{"error"},
@samp{"info"} and @samp{"debug"}.
@end table
@end deftp
@node Sound Services
@subsection Sound Services

@ -13,6 +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>
;;;
;;; This file is part of GNU Guix.
;;;
@ -39,7 +40,9 @@
#:use-module (gnu services networking)
#:use-module (gnu services sound)
#:use-module ((gnu system file-systems)
#:select (%elogind-file-systems file-system))
#:select (%control-groups
%elogind-file-systems
file-system))
#:autoload (gnu services sddm) (sddm-service-type)
#:use-module (gnu system)
#:use-module (gnu system setuid)
@ -157,6 +160,9 @@
gnome-keyring-configuration?
gnome-keyring-service-type
seatd-configuration
seatd-service-type
%desktop-services))
;;; Commentary:
@ -1630,6 +1636,60 @@ or setting its password with passwd.")))
(define polkit-wheel-service
(simple-service 'polkit-wheel polkit-service-type (list polkit-wheel)))
;;;
;;; seatd-service-type -- minimal seat management daemon
;;;
(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"))
(socket seatd-socket (default "/run/seatd.sock"))
(logfile seatd-logfile (default "/var/log/seatd.log"))
(loglevel seatd-loglevel (default "info")))
(define (seatd-shepherd-service config)
(list (shepherd-service
(documentation "Minimal seat management daemon")
(requirement '())
;; TODO: once cgroups is separate dependency
;; here we should depend on it rather than elogind
(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="
#$(seatd-loglevel config))
(string-append "SEATD_DEFAULTPATH="
#$(seatd-socket config)))
#:log-file #$(seatd-logfile config)))
(stop #~(make-kill-destructor)))))
(define seatd-environment
(match-lambda
(($ <seatd-configuration> _ _ _ socket)
`(("SEATD_SOCK" . ,socket)))))
(define seatd-service-type
(service-type
(name 'seatd)
(description "Seat management takes care of mediating access
to shared devices (graphics, input), without requiring the
applications needing access to be root.")
(extensions
(list
(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
(service-extension file-system-service-type (const %control-groups))
(service-extension shepherd-root-service-type seatd-shepherd-service)))
(default-value (seatd-configuration))))
;;;
;;; The default set of desktop services.