unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
From: Marius Bakke <mbakke@fastmail.com>
To: Leo Prikler <leo.prikler@student.tugraz.at>, raingloom@riseup.net
Cc: 38172@debbugs.gnu.org
Subject: bug#38172: WebkitGTK-based browsers: System volume suddenly maxed out when playing audio or video
Date: Thu, 09 Jan 2020 21:48:12 +0100	[thread overview]
Message-ID: <87eew81hmb.fsf@devup.no> (raw)
In-Reply-To: <1e5ef8c196053fbeada65e8f525520fb6483530f.camel@student.tugraz.at>

[-- Attachment #1: Type: text/plain, Size: 5866 bytes --]

Leo,

Leo Prikler <leo.prikler@student.tugraz.at> writes:

> Hi Guix,
>
> After looking at my older patch (which no longer cleanly applies), I've
> noticed, that pulseaudio doesn't even read the files from /etc.  This
> is troublesome in multiple ways.  For one, pulseaudio causes >500
> rebuilds (with >900 dependent packages) and is therefore staging
> material, for the other, hardcoding /etc in such a way breaks
> pulseaudio without the service.
>
> So far, I've only tested containers via `guix environment --container`, 
> but from what I can gather with strace, the config file is indeed read
> and hence flat-volumes are eliminated.  Other ways of making pulseaudio
> accept /etc are very welcome.  Looking at Nix, they configure
> pulseaudio with "--sysconfdir=/etc", but then override sysconfdir and
> pulseconfdir during install.  I'm not quite sure which solution is
> "better", but neither is going to read the config shipped with the
> package.
>
> Note: before this can be applied on staging,
> a66ee82a05d8ff1ef7c5ff9ac7723cb32fc4e22a needs to be applied.

Thank you for these patches.  Overall it LGTM.

[...]

> From bf4708923d14356c87daec69209b30aa0427d64f Mon Sep 17 00:00:00 2001
> From: Leo Prikler <leo.prikler@student.tugraz.at>
> Date: Wed, 8 Jan 2020 19:50:51 +0100
> Subject: [PATCH 1/3] services: Add pulseaudio-configuration.
>
> * gnu/services/sound (<pulseaudio-configuration>): New record.
> (pulseaudio-etc): New procedure.
> (pulseaudio-service-type): Update accordingly.

[...]

> +(define-record-type* <pulseaudio-configuration>
> +  pulseaudio-configuration make-pulseaudio-configuration
> +  pulseaudio-configuration?
> +  (package pulseaudio-package (default pulseaudio))
> +  (client-conf pulseaudio-client-conf (default '()))
> +  (daemon-conf pulseaudio-daemon-conf (default '((flat-volumes no))))

I have a preference for making this field empty initially to have a 1:1
compatibility with the current PA client and daemon configuration
(i.e. nothing).  Then a follow-up patch can add this new configuration,
perhaps with an explaining comment.

> +  (default-script pulseaudio-default-script (default #f))
> +  (system-script pulseaudio-system-script (default #f)))
> +
>  (define (pulseaudio-environment config)
>    ;; Define this variable in the global environment such that
>    ;; pulseaudio swh-plugins works.
>    `(("LADSPA_PATH"
>       . ,(file-append swh-plugins "/lib/ladspa"))))
>  
> +(define (pulseaudio-conf-entry arg)
> +  (match arg
> +    ((key value)
> +     (format #f "~a = ~s~%" key value))
> +    ((? string? _)
> +     (string-append arg "\n"))))
> +
> +(define pulseaudio-etc
> +  (match-lambda
> +    (($ <pulseaudio-configuration> package client-conf daemon-conf
> +                                   default-script system-script)
> +     (let ((default.pa (if default-script
> +                           (apply mixed-text-file "default.pa"
> +                                  default-script)
> +                           (file-append package "/etc/pulse/default.pa"))))
> +       `(("pulse"
> +          ,(file-union
> +            "pulse"
> +            `(("client.conf"
> +               ,(apply mixed-text-file "client.conf"
> +                       (map pulseaudio-conf-entry client-conf)))
> +              ("daemon.conf"
> +               ,(apply mixed-text-file "daemon.conf"
> +                       "default-script-file = " default.pa "\n"
> +                       (map pulseaudio-conf-entry daemon-conf)))
> +              ("default.pa" ,default.pa)
> +              ("system.pa"
> +               ,(if system-script
> +                    (apply mixed-text-file "system.pa"
> +                           system-script)
> +                    (file-append package "/etc/pulse/system.pa")))))))))))
> +

Does it make sense to have default-script and system-script default to
(file-append pulseaudio "...") and avoid the conditional altogether?

[...]

> From 843d3968db990b5b7ff3f618db5847f83b999cb8 Mon Sep 17 00:00:00 2001
> From: Leo Prikler <leo.prikler@student.tugraz.at>
> Date: Thu, 9 Jan 2020 01:24:09 +0100
> Subject: [PATCH 2/3] gnu: pulseaudio: Honor /etc.
>
> * gnu/packages/pulseaudio.scm (pulseaudio) [phases]:
> Set PA_DEFAULT_CONFIG_DIR to "/etc/pulse".

This means pulseaudio will start looking in /etc/pulse for configuration
files on foreign distributions too, right?

I wonder if there is better way to give it configuration files.  Perhaps
by patching the D-Bus service files?  Not a blocker for this series, but
something to consider in case /etc/pulse causes trouble.

[...]

> +                 (add-after 'configure 'hardcode-default-config-dir
> +                   (lambda _
> +                     (substitute* "config.h"
> +                       (("(#define PA_DEFAULT_CONFIG_DIR).*$" all prefix)
> +                        (string-append prefix " \"/etc/pulse\"")))))

End on #t.

[...]

> From e24016f9a44a113847dd937ac47ab4bdb960236d Mon Sep 17 00:00:00 2001
> From: Leo Prikler <leo.prikler@student.tugraz.at>
> Date: Thu, 9 Jan 2020 01:29:13 +0100
> Subject: [PATCH 3/3] services: Add pulseaudio to %desktop-services.
>
> * gnu/services/desktop.scm (%desktop-services): Add pulseaudio service.

This will pull in "swh-plugins" which was the original intention behind
pulseaudio-service before this patch series.  Before adding it to
%desktop-services, I would prefer if the pulseaudio environment
configuration could be made modular, so that there are no configuration
differences for end users, i.e. they'd have to actively enable the
LADSPA plugin.

I'm not sure what the best approach would be though.  Ideas, Oleg?

As a final note, can you also update doc/guix.texi accordingly?

TIA,
Marius

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

  reply	other threads:[~2020-01-09 20:49 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <e9aba2fd590811bda70b65036f682b764c7141cf.camel@student.tugraz.at>
2019-11-11 21:09 ` bug#38172: fixing dangerous PulseAudio defaults and giving it a record type raingloom
2019-11-12 11:00   ` Leo Prikler
2020-01-09  1:22   ` bug#38172: WebkitGTK-based browsers: System volume suddenly maxed out when playing audio or video Leo Prikler
2020-01-09 20:48     ` Marius Bakke [this message]
2020-01-09 22:49       ` Leo Prikler
2020-01-11 16:48         ` Marius Bakke
     [not found] <pz4LLjGMExF6yjrqndx7uhuXMNQf95pbQOvVNBU16OrH7JDuHoTlsT3pzgAaUhRCyPB9QzgZP2gUO_D0H_gQbOrjG1yVWbf7_u5vYdpSzdw=@protonmail.com>
2020-01-07  6:07 ` raingloom

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87eew81hmb.fsf@devup.no \
    --to=mbakke@fastmail.com \
    --cc=38172@debbugs.gnu.org \
    --cc=leo.prikler@student.tugraz.at \
    --cc=raingloom@riseup.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).