Commit graph

40 commits

Author SHA1 Message Date
Wim Taymans
f38837d9e2 conf: look in conf.d directories and merge all sections
Load all sections found in all prefix/name.conf.d directories and add
them to the config as overrides.
If for example jack.conf is loaded, check in:

  /usr/share/pipewire/jack.conf.d/
  /etc/pipewire/jack.conf.d/
  $XDG_CONFIG_HOME/pipewire/jack.conf.d/
     or ~/.config/pipewire/jack.conf.d/

For .conf files and also process the sections. The files are processed
in sorted order so 10-remap.conf can be used to specify the order.

When processing a section, first the global conf is applied and then the
overrides in their order.

This makes it possible to override properties or add modules,
objects and custom matching rules.

Since the merging logic is handled either internally or by the
application, we can add more syntax later to do more complex merges.

See #207
2022-02-02 14:58:15 +01:00
Wim Taymans
92e851f61b conf: improve debug 2022-02-02 12:41:36 +01:00
Wim Taymans
58ebe0f88a conf: Parse the whole config with properties
There is no need to call the callbacks when reading the config file,
just store all properties.
We're only going to extract one when iterating later.
2022-02-02 12:37:49 +01:00
Wim Taymans
f273e2a716 conf: emit callback for config sections
Instead of reading all config section in properties, emit a callback
for each section, allow for filtering on a particular section as
well. In the callback, update the section value in the properties.

Deprecate get_conf_section(), it can't support multiple section
updates.
2022-02-01 17:16:33 +01:00
Wim Taymans
5839400aa0 context: implement prop updates with for_each 2022-02-01 16:51:59 +01:00
Wim Taymans
d6218b65ab conf: parse the context sections with iterator
Make a new function that calls a callback for each config section
and use that to parse the config sections internally.
2022-02-01 16:27:21 +01:00
Wim Taymans
50de4b1886 conf: add some properties in the conf
Add the path, prefix and name in the config properties.
2022-02-01 15:55:17 +01:00
Wim Taymans
2b569861b1 conf: refactor path generation
Make different methods for the different paths to search.
2022-02-01 15:37:48 +01:00
Wim Taymans
2013fb56cf conf: refactor abs path
We can simplify the check by shifting the prefix and name and use
the same code for both the config and state path.
2022-02-01 15:25:48 +01:00
Wim Taymans
25e565c34c conf: fix compiler warning about different signedness 2022-01-06 13:19:34 +01:00
Doğukan Korkmaztürk
adb02119b7 conf: eliminate an unnecessary narrowing conversion 2022-01-05 06:26:43 -05:00
Wim Taymans
611591d0fc json: add spa_json_parse_stringn()
It also checks the destination size.
2022-01-04 12:37:00 +01:00
Wim Taymans
c46113faa3 json: spa_json_get_string() writes up to len chars or fail 2022-01-04 10:42:32 +01:00
Peter Hutterer
a6e66d9180 pipewire: use the internal log topics 2021-09-28 09:35:38 +02:00
Wim Taymans
2d4ded2384 conf: waitpid needs a cleared status
It might not change the status when the process has changed state.
2021-08-18 09:45:15 +02:00
Wim Taymans
7fda66142b conf: try to load state from where we saved it
When XDG_STATE_HOME is unset, we save in $HOME/.local/state/pipewire,
so try to first load the state file from there as well before we
try to fall back to the old XDG_CONFIG_HOME location.
2021-08-09 09:47:58 +02:00
Peter Hutterer
55c264d2a5 conf: store state in XDG_STATE_HOME
Defaulting to $HOME/.local/state, this is the directory that state
information is to be kept.

As with the configuration loading, where a caller requests an absolute
path, that path will be honored, we only fall back to XDG_STATE_HOME for
relative paths.

This adds a new PIPEWIRE_STATE_DIR environment variable to override this
directory.
2021-08-09 16:52:43 +10:00
Peter Hutterer
956c83f1c8 conf: rework conf_load to take a path only
Refacturing to make it possible to read from different paths.
2021-08-09 16:48:50 +10:00
Peter Hutterer
bba9edabee conf: don't allow a NULL config name
No functional changes, this is enforced by the only in-tree callers of
pw_conf_load_conf() but let's enforce this properly.
2021-07-06 07:14:21 +00:00
Peter Hutterer
fb2d35895e conf: ignore the prefix if the config file name is an absolute path
Fixes:
$ export PIPEWIRE_CONFIG_PREFIX=/usr/share/pipewire
$ pipewire -c /etc/pipewire/bar.conf
[W][11925.530591][          conf.c:  253 conf_load()] config 0x560039ac6510: error loading config '/usr/share/pipewire//etc/pipewire/pipewire.conf': No such file or directory
[W][11925.530721][       context.c:  178 try_load_conf()] context 0x560039ac6190: can't load config /usr/share/pipewire//etc/pipewire/pipewire.conf: No such file or directory
2021-07-06 07:14:21 +00:00
Wim Taymans
77a4ae380e json: remove obsolete # comment handling
Comments are handled by the parser now. Keys and values starting
with # are intentional now.
2021-06-10 18:02:34 +02:00
Wim Taymans
342ae0b643 Revert "conf: Load and stack all config files."
This reverts commit db44fe47ee.

We should not be merging config files at this point. Generating config
files should be done offline and only the result is loaded here.
2021-06-10 11:28:37 +02:00
Wim Taymans
262e609b73 conf: use serialize_dict to write state files
Instead of our home-brew version.
2021-06-09 18:00:47 +02:00
Wim Taymans
db44fe47ee conf: Load and stack all config files.
Load and parse config files in the following order:

$PIPEWIRE_CONFIG_DIR or /usr/share/pipewire
/etc/pipewire
$XDG_CONFIG_DIR or ~/.config/pipewire

This ensure we always load a working base config and reduce the
chances of failing because of a back user config file.

The user config file now only needs to contain the section that
needs the be changed.

See #207
2021-06-09 12:15:39 +02:00
Wim Taymans
58d0e44664 pipewire: Add option to disable config files
Add env variable PIPEWIRE_NO_CONFIG to disable parsing
custom config files.
Add a method to check extra options.
Expose valgrind, no-config and no-color as options.
2021-06-02 15:55:24 +02:00
Wim Taymans
8027c9225e context: log some more errors when config file fails 2021-05-26 10:17:40 +02:00
Peter Hutterer
5e5b9e3050 conf: PIPEWIRE_CONFIG_DIR should take precedence if set
This matches the behavior of most applications - check environment variables
first, then fall back to the various built-in options (in our case xdg, /etc/
/usr/share, in that order).
2021-05-26 07:54:29 +00:00
Peter Hutterer
0b5f19f1d2 pipewire: fix scan-build errors for unused variables
All cases of value stored but never read
2021-05-26 07:51:27 +00:00
Peter Hutterer
7697ed0757 treewide: replace strcmp() == 0 with spa_streq()
This change is only done in source files for now, header files will be done
separately.
2021-05-18 22:10:27 +10:00
Wim Taymans
1609126bcd conf: move config file to datadir
Install the config file in $PREFIX/share/pipewire so that a factory
reset can be done by wiping /etc and /home.
Add this new directory to the search path.
System wide config can still be done in /etc, user config in
$HOME/.config/pipewire/ by copying files from $PREFIX/share/pipewire

Fixes #1191
2021-05-17 16:22:31 +02:00
Wim Taymans
577ad0c73a conf: improve config error handling
Make the config parser return the amount of parsed items.
Fail to create a context when parsing the config fails.
Log the number of items parsed from the config.
2021-05-13 15:09:57 +02:00
Wim Taymans
407489cd71 conf: remove X bit from config files
Fixes #1107
2021-04-27 15:38:59 +02:00
Wim Taymans
eb4a439488 conf: parse json config in-place
Avoid allocs by parsing the json in-place.
2021-03-14 09:32:01 +01:00
Wim Taymans
90b0410280 conf: improve config files
Make arrays from config sections that should really be an array.
Having the module name as the object key technically makes it
impossible to load the same module twice because the key can only
be once in the object.

The same applies to the context.objects and context.exec sections.

This also makes it somewhat easier to parse the config..
2021-03-12 12:39:58 +01:00
Wim Taymans
8d5cc7013d conf: write valid JSON by putting , between keys
Separate keys with , to make a valid json file
2021-03-05 12:40:28 +01:00
Gleb Popov
c5e42aa9db Define Linux-specific O_PATH and MAP_LOCKED flags to 0 on FreeBSD 2021-02-24 19:29:57 +00:00
Wim Taymans
c0d8edeb5a conf: improve state directory access checks
We only need RW permission on the last directory.
2021-02-17 20:21:14 +01:00
Wim Taymans
80825aeaea conf: more work on config changes
Add -c option to pipewire to select config file. Use this to select
the uninstalled conf file.
Rename conf properties, prefix with context.
Simplify the main daemon now that everything can go in config.
Simplify pipewire-pulse now that we can put everything in config, it's
now virtually the same as pipewire but with a differenct config file.
Parse server addresses as array of strings.
2021-02-12 10:31:29 +01:00
Wim Taymans
fc90a4e48a Implement config/state file handling
Make methods to load_config and load/save state. For now the config
and state directories are the same but it might not be. Implement
the search path for all config/state files as:

  $XDG_CONFIG_HOME/[$prefix]/$name
  $HOME/.config/[$prefix]/$name
  $PIPEWIRE_CONFIG_DIR/pipewire/[$prefix]/$name
  /etc/pipewire/[$prefix]/$name

Make some config files for jack and RT clients. Make pw-cat use the
client-rt config.

Use core state and config management in media-session.
Move all session manager state and config files to the build dir and
set the PIPEWIRE_CONFIG_DIR to this build dir.
2021-02-12 10:25:11 +01:00
Wim Taymans
c605672d43 Implement per client config files
Move the daemon config file loading to a new conf.c file used by
the context to load the configuration. This replaces the module
profiles and some hacks to move properties around.

If there is nothing other specified with $PIPEWIRE_CONFIG_NAME or
a property, the client.conf file is loaded as a fallback.

Update the session manager config file to load the modules via the
config now. Rename the session modules section to another name.

Update pipewire-pulse to also load a specific pulse property file.
This then makes it pssible to assign specific RT priorities for the
pipewire-pulse process.
2021-02-12 10:07:16 +01:00