GNU bug report logs -
#76289
[PATCH 0/2] Add speakersafetyd system service.
Previous Next
Reported by: Roman Scherer <roman <at> burningswell.com>
Date: Fri, 14 Feb 2025 13:56:01 UTC
Severity: normal
Tags: patch
Done: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
* gnu/services/sound.scm (speakersafetyd-service-type) New variable.
* doc/guix.texi: Document the speakersafetyd service.
Change-Id: Ib8fa19b056a2036019ae7c199d81e1139664e951
---
doc/guix.texi | 41 ++++++++++++++++++++++++++++
gnu/services/sound.scm | 61 +++++++++++++++++++++++++++++++++++++++++-
2 files changed, 101 insertions(+), 1 deletion(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index bd66adf326..3b82df5196 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -26575,6 +26575,47 @@ Sound Services
@end defvar
+@subsubheading Speaker Safety Daemon System Service
+
+@uref{https://github.com/AsahiLinux/speakersafetyd, Speaker Safety
+Daemon} is a userspace daemon that implements an analogue of the Texas
+Instruments Smart Amp speaker protection model. It can be used to
+protect the speakers on Apple Silicon devices.
+
+@defvar speakersafetyd-service-type
+This is the type for the @code{speakersafetyd} system service, whose
+value is a @command{speakersafetyd-configuration} record.
+
+@lisp
+(service speakersafetyd-service-type)
+@end lisp
+
+See below for details about @code{speakersafetyd-configuration}.
+@end defvar
+
+@deftp {Data Type} speakersafetyd-configuration
+Data type representing the configuration for @code{speakersafetyd-service}.
+
+@table @asis
+@item @code{blackbox-path} (default: @code{"/var/lib/speakersafetyd/blackbox"})
+The path to a directory to which "blackbox" files are written when the
+speakers are getting too hot. The blackbox files contain audio and
+debug information which the developers of @code{speakersafetyd} might
+ask for when reporting bugs.
+
+@item @code{config-path} (default: @code{(file-append speakersafetyd "/share/speakersafetyd")})
+Path to the base directory as a G-expression (@pxref{G-Expressions})
+that contains the configuration files of the speaker models.
+
+@item @code{max-reduction} (default: @code{7})
+Maximum gain reduction before panicing, useful for debugging.
+
+@item @code{package} (default: @var{speakersafetyd})
+The Speaker Safety Daemon package to use.
+
+@end table
+@end deftp
+
@node File Search Services
@subsection File Search Services
diff --git a/gnu/services/sound.scm b/gnu/services/sound.scm
index 8ca7acd737..fb8a8d3d17 100644
--- a/gnu/services/sound.scm
+++ b/gnu/services/sound.scm
@@ -35,6 +35,7 @@ (define-module (gnu services sound)
#:use-module (gnu packages audio)
#:use-module (gnu packages linux)
#:use-module (gnu packages pulseaudio)
+ #:use-module (gnu packages rust-apps)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:export (alsa-configuration
@@ -56,7 +57,15 @@ (define-module (gnu services sound)
ladspa-configuration
ladspa-configuration?
ladspa-configuration-plugins
- ladspa-service-type))
+ ladspa-service-type
+
+ speakersafetyd-configuration
+ speakersafetyd-configuration-blackbox-path
+ speakersafetyd-configuration-config-path
+ speakersafetyd-configuration-max-reduction
+ speakersafetyd-configuration-package
+ speakersafetyd-configuration?
+ speakersafetyd-service-type))
;;; Commentary:
;;;
@@ -263,4 +272,54 @@ (define ladspa-service-type
(default-value (ladspa-configuration))
(description "Configure LADSPA plugins.")))
+
+;;;
+;;; Speaker Safety Daemon
+;;;
+
+(define-record-type* <speakersafetyd-configuration>
+ speakersafetyd-configuration
+ make-speakersafetyd-configuration
+ speakersafetyd-configuration?
+ (blackbox-path speakersafetyd-configuration-blackbox-path
+ (default "/var/lib/speakersafetyd/blackbox"))
+ (config-path speakersafetyd-configuration-config-path
+ (default (file-append speakersafetyd "/share/speakersafetyd")))
+ (max-reduction speakersafetyd-configuration-max-reduction
+ (default 7))
+ (package speakersafetyd-configuration-package
+ (default speakersafetyd)))
+
+(define (speakersafetyd-shepherd-service config)
+ (let ((blackbox-path (speakersafetyd-configuration-blackbox-path config))
+ (config-path (speakersafetyd-configuration-config-path config))
+ (max-reduction (speakersafetyd-configuration-max-reduction config))
+ (package (speakersafetyd-configuration-package config)))
+ (shepherd-service
+ (documentation "Speaker saftey daemon")
+ (provision '(speakersafetyd))
+ (requirement '(udev))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/bin/speakersafetyd")
+ "--config-path" #$config-path
+ "--blackbox-path" #$blackbox-path
+ "--max-reduction" (number->string #$max-reduction))))
+ (stop #~(make-kill-destructor)))))
+
+(define speakersafetyd-service-type
+ (service-type
+ (name 'speakersafetyd)
+ (description "Speaker Saftey Daemon")
+ (extensions
+ (list (service-extension
+ profile-service-type
+ (compose list speakersafetyd-configuration-package))
+ (service-extension
+ shepherd-root-service-type
+ (compose list speakersafetyd-shepherd-service))
+ (service-extension
+ udev-service-type
+ (compose list speakersafetyd-configuration-package))))
+ (default-value (speakersafetyd-configuration))))
+
;;; sound.scm ends here
--
2.48.1
This bug report was last modified 91 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.