From 3560f3ba2d41a8596c40ee3894fe2484039aac47 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 14 Oct 2021 13:52:28 +1000 Subject: [PATCH] media-session: add MEDIA_SESSION_CONFIG_DIR as lookup location Use this to override the default $PIPEWIRE_CONFIG_DIR/media-session.d directory. This allows us to have separate configuration directories for pipewire and media-session. --- doc/media-session.dox | 14 ++++++++++++++ src/media-session/media-session.c | 13 +++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/doc/media-session.dox b/doc/media-session.dox index 91343711f..c15a1b606 100644 --- a/doc/media-session.dox +++ b/doc/media-session.dox @@ -5,6 +5,20 @@ PipeWire Media Session is the reference/example session manager provided by the PipeWire project. +On startup, Media Session reads the `media-session.conf` +configuration file to configure itself. The following directories are searched +for this file: + +- in `$XDG_CONFIG_HOME/pipewire/media-session.d/` (usually +`$HOME/.config/pipewire/media-session.d/`) +- `$sysconfdir/pipewire/media-session.d` (usually +`/etc/pipewire/media-session.d/`) +- `$datadir/pipewire/media-session.d/` (usually +`/usr/share/pipewire/media-session.d/`) + +The environment variable `MEDIA_SESSION_CONFIG_DIR` can be used to +specify an alternative config directory. + ## Access management The \ref page_media_session_module_access_flatpak module handles clients diff --git a/src/media-session/media-session.c b/src/media-session/media-session.c index 9cf8b4dd8..3380a8c26 100644 --- a/src/media-session/media-session.c +++ b/src/media-session/media-session.c @@ -2360,13 +2360,16 @@ static int collect_modules(struct impl *impl, const char *str) { struct spa_json it[3]; char key[512], value[512]; - const char *dir, *val; + const char *dir, *prefix = NULL, *val; char check_path[PATH_MAX]; struct stat statbuf; int count = 0; - if ((dir = getenv("PIPEWIRE_CONFIG_DIR")) == NULL) + dir = getenv("MEDIA_SESSION_CONFIG_DIR"); + if (dir == NULL && (dir = getenv("PIPEWIRE_CONFIG_DIR")) == NULL) { dir = PIPEWIRE_CONFDATADIR; + prefix = SESSION_PREFIX; + } if (dir == NULL) return -ENOENT; @@ -2382,7 +2385,7 @@ again: add = true; } else { snprintf(check_path, sizeof(check_path), - "%s/"SESSION_PREFIX"/%s", dir, key); + "%s%s%s/%s", dir, prefix ? "/" : "", prefix ? prefix : "", key); add = (stat(check_path, &statbuf) == 0); } if (add) { @@ -2474,6 +2477,7 @@ int main(int argc, char *argv[]) size_t i; const struct spa_dict_item *item; enum spa_log_level level = pw_log_level; + const char *config_dir; pw_init(&argc, &argv); @@ -2504,8 +2508,9 @@ int main(int argc, char *argv[]) } } + config_dir = getenv("MEDIA_SESSION_CONFIG_DIR"); impl.this.props = pw_properties_new( - PW_KEY_CONFIG_PREFIX, SESSION_PREFIX, + PW_KEY_CONFIG_PREFIX, config_dir ? config_dir : SESSION_PREFIX, PW_KEY_CONFIG_NAME, config_name, NULL); if (impl.this.props == NULL)