[pulseaudio-discuss] Progress since PulseConf

David Henningsson david.henningsson at canonical.com
Mon Mar 4 02:47:03 PST 2013

On 02/27/2013 06:44 PM, Tanu Kaskinen wrote:
> On Mon, 2013-02-25 at 09:42 +0100, David Henningsson wrote:
>> === Splitting of configuration ===
>>    * I think we're currently waiting for Tanu to do some work on this
>> issue and come up with a more concrete proposal, is that correct?
> Yes, it probably is correct. I didn't know/think that people were really
> waiting for me, but now that I think about it, I probably did promise to
> do some work on this. I haven't yet done anything, but I'll try to focus
> on this "soon".
> As for proposals, here are some:
> === What to do first ===
> There are two separate improvements for the configuration handling that
> were discussed: splitting the configuration into "core", "policy" and
> "hardware" bits, and moving all configuration under $(datadir) with
> support for overriding in $(sysconfdir) and $XDG_CONFIG_HOME. I propose
> that the configuration move is done first, because I feel that it would
> provide a more solid base for thinking about how the configuration split
> should be implemented.

Hmm, reading the XDG spec, it says "Default configuration files should 
be installed to $sysconfdir/xdg/subdir/filename with $sysconfdir 
defaulting to /etc."

Would it feel weird to put the default in /etc/xdg/pulseaudio/ , with 
overrides in /etc/pulseaudio? I'm not an experienced admin, so I'm not 
sure how other software does it.

> === Including system configuration files from user configuration ===
> If /etc/pulse is only used for overriding the upstream defaults, a
> situation may arise where a user has ~/.config/pulse/default.pa, and he
> would like to include the system version of the file,
> but /etc/pulse/default.pa doesn't exist. In that
> case, /usr/share/pulseaudio/config/default.pa should be included, but
> how does the user express that in the configuration file? A couple of
> options:
>          .ifexists /etc/pulse/default.pa
>          .include /etc/pulse/default.pa
> 	.else
>          .include /usr/share/pulseaudio/config/default.pa
>          .endif
>          .include[search_start_level=system] default.pa
> The "search_start_level" option would accept values
> "base" (/usr/share/pulseaudio/config), "system" (/etc/pulse),
> "user" (~/.config/pulse) or
> "user-machine" (~/.config/pulse/machine-id-<machine-id>). The default
> would be "user-machine".
> The first option is annoyingly verbose, but it's easy to understand and
> supported today. I would really like this to be possible with one line,
> like in the second example, but I think it's more important that it's
> obvious what the include command does. I don't think it's obvious what
> "search_start_level=system" means, and I can't think of any better
> syntax, so if better proposals don't appear, I prefer the clear but
> verbose option.

We could also add something like a:




where this "include-fallback" or "include-default" would take the 
current file's "override level" and continue from there.

> === Including relative paths ===
> Currently, ".include somefile.conf" treats somefile.conf as a path
> relative to the directory of the current file. I propose that it's
> changed so that ".include somefile.conf" does a full search: first in
> the user configuration directory, then in the system directory, and so
> on. The reason is that if the system configuration is split into several
> files, without this change only the "root" file could be overridden by
> the user, because the non-root files would never be searched in the user
> directory (we could implement some extra syntax so that the system
> configuration could use ".ifexists $USER_CONF_DIR/somefile.conf", but I
> don't think that's a better solution than doing a full search for
> relative paths).

...hmm, given this example, we could instead just extend ".include" to 
never be recursive, i e skip files that are already included. Thus, 
writing ".include default.pa" inside default.pa would be perfectly valid 
(but look a bit confusing perhaps?).

> === Machine specific user configuration ===
> Configuration files should be searched in
> ~/.config/pulse/machine-id-<machine-id>/ too. The reason is that the
> configuration can be machine specific. I don't remember that anyone
> would ever have requested this feature, but this seems like the right
> thing to do, and adding another directory to the list of search paths
> should be trivial.

And another file to add to the list of things to check when things go 
wrong, perhaps.

> === Moving state files to $XDG_DATA_HOME ===
> I think a "configuration file" means a file that is meant to be directly
> edited by the user. The various module-foo-restore database files are
> not configuration files, so they should be moved under $XDG_DATA_HOME.

I don't have a strong opinion on this one, not sure if it's worth the 

> === "pulse" vs. "pulseaudio" ===
> There's an annoying inconsistency in the directories that pulseaudio
> uses: "pulse" vs. "pulseaudio". There's /usr/share/pulseaudio, but
> otherwise we use "pulse" in paths. I would prefer to use "pulseaudio"
> everywhere, but I don't think changing the current scheme is worth the
> effort. I brought this up, however, because if others think that yes,
> this change makes sense and is worth the effort, I could work on this
> too while files are moved around anyway.

I prefer pulseaudio over pulse too. I guess that at least every "new" 
subdirectory that is created due to this move should be "pulseaudio" 
rather than "pulse"?

Also the .config/pulse dir is quite new, perhaps we can just change it 
to .config/pulseaudio ?

>> === Better drain/underrun reporting ===
>>    * No work so far; and I can reiterate that it feels like it's quite
>> far down on the priority list. Do you agree or should I try to start
>> working on this (compared to other stuff)?
> I don't really have an opinion. I expect you to do what you want. But if
> I had to choose between "low latency", "HDMI improvements" and "fixing
> the drain bug" (I guess these were the things that you had some plans to
> work on?), it would not be an easy choice. I'd probably pick "low
> latency", but I'd assign pretty much the same priority to all three
> tasks.

Ok, I picked the drain bug because I figured it would be the least 
effort of the three...which is not to say it's easy :-)

David Henningsson, Canonical Ltd.

More information about the pulseaudio-discuss mailing list