WirePlumber 0.5.5

WirePlumber is a modular session / policy manager for PipeWire and a GObject-based high-level library that wraps PipeWire’s API, providing convenience for writing the daemon’s modules as well as external tools for managing PipeWire. The WirePlumber daemon implements the session & policy management service. It follows a modular design, having plugins that implement the actual management functionality. The WirePlumber Library provides API that allows you to extend the WirePlumber daemon, to write management or status tools for PipeWire (apps that don’t do actual media streaming) and to write custom session managers for embedded devices.

Tags audio session-manager policy-manager pipewire c lua
License Other
State stable

Recent Releases

0.5.502 Jul 2024 08:45 minor feature: Highlights: - Hotrelease to address crashes in the Bluetooth HSP/HFP autoswitch functionality that were side-effects of some changes that were part of the role-based linking policy. Improvements: - wpctl will now properly show a '*' in front of sink filters when they are selected as the default sink (!660). Past releases.
0.5.427 Jun 2024 13:25 minor bugfix: Highlights: - Refactored the role-based linking policy (previously known also as. "endpoints" or "virtual items" policy) to blend in with the standard desktop. Policy. It is now possible use role-based sinks alongside standard desktop Audio operations and they will only be used for streams that have a "media.role" defined. It is also possible to force streams to have a. Media.role, using a setting. Other features include: blending with smart Filters in the graph and allowing hardware DSP nodes to be also used easily Instead of requiring software loopbacks for all roles. (#610, !649) Improvements: - Filters that are not declared as smart will now behave again as normal. Application streams, instead of being treated sometimes differently (!657) : - an that would cause WirePlumber to crash at startup if an. Empty configuration file was present in one of the search paths - Bluetooth profile auto-switching when a filter is permanently linked to the Bluetooth source (!650). - an in the software-dsp script that would cause DSP filters to. Stay around and cause after their device node was destroyed (!651) - an in the autoswitch-bluetooth-profile script that could cause an infinite loop of switching between profiles (!652, #617). - a rare that could cause WirePlumber to crash when dealing with a device object that didn't have the "device.name" property set. Past releases.
0.5.303 Jun 2024 02:05 minor bugfix: : - a long standing that would cause many device nodes to have. Inconsistent naming, with a '.N' suf(where N is a number = 2) being Appended at seemingly random times - an that would cause unavailable device profiles to be selected if they were previously stored in the state file, sometimes requiring users to manually remove the state file to get things working again. - an occasional crash that could sometimes be triggered by hovering. The volume icon on the KDE taskbar, and possibly other similar actions (#628, !644). Camera device deduplication logic when the same device is available. Through both V4L2 and libcamera, and the libcamera one groups multiple V4L2 Devices together (#623, !636) Applying the default volume on streams that have no volume previously. Stored in the state file - an that would prevent some camera nodes - in some cases -. From being destroyed when the camera device is removed - an that would cause video stream nodes to be linked with audio. Smart filters, if smart audio filters were configured (!647) - an that would cause WP to re-activate device profiles even. Though they were already active (!639) - Configuration files in standard JSON format (starting with a ' ', among. Other things) are now correctly parsed Overriding non-container values when merging JSON objects. - Functions marked with WP_PRIVATE_API are now also marked as. Non-introspectable in the gobject-introspection metadata Improvements: - Logging on the systemd journal now includes the log topic and also the log. Level and location directly on the message string when the log level is High enough, which is useful for gathering additional context in logs Submitted by users (!640) - Added a video-only profile in wireplumber.conf, for systems where only. Camera screensharing are to be used - Improved seat state monitoring so that Bluetooth devices are only enabled. When the user is active on a local seat, instead of allowing remote users as well (!641). - Impr
0.5.223 Apr 2024 09:05 minor bugfix: Highlights: - Added support for loading configuration files other than the default wireplumber.conf within Lua scripts (!629). - Added support for loading single-section configuration files, without fragments (!629). - Updated the node.software-dsp script to be able to load filter-chain graphs from external configuration files, which is needed for Asahi Linux audio DSP configuration (!629). : - destroying camera nodes when the camera device is removed (#627, !631). - an with Bluetooth BAP device set naming (!632). - an caused by the pipewire event loop not being "entered" as expected (!634, #638). - A false positive warning about no modules being loaded is now suppressed when using libpipewire = 1.0.5. - Default nodes can now be selected using priority.driver when priority.session is not set. Changes: - The library version is now generated following pipewire's versioning scheme: libwireplumber-0.5.so.0.5.2 becomes libwireplumber-0.5.so.0.0502.0 (!633). Past releases.
0.5.131 Mar 2024 12:05 minor bugfix: Highlights: - Added a guide documenting how to migrate configuration from 0.4 to 0.5. Also available online at: Https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/migration.html If you are packaging WirePlumber for a distribution, please consider. Informing users about this. : - an odd where microphones would stop being usable when a Bluetooth headset was connected in the HSP/HFP profile (#598, !620). - an where it was not possible to store the volume/mute state of. System notifications - a rare crash that could occur when a node was destroyed while the. 'select-target' event was still being processed (!621). Deleting all the persistent settings via `wpctl --delete` (!622). Using Bluetooth autoswitch with A2DP profiles that have an input route. (!624). Sending an error to clients when linking fails due to a format. Mismatch (!625) Additions: - Added a check that prints a verbose warning when old-style 0.4.x Lua. Configuration files are found in the system. - The "policy-dsp" script, used in Asahi Linux to provide a software DSP. For Apple Sillicon devices, has now been ported to 0.5 properly and Documented (#619, !627) Past releases.
0.5.020 Mar 2024 07:05 major bugfix: Changes: - Bumped the minimum required version of PipeWire to 1.0.2, because we. Make use of the 'api.bluez5.internal' property of the BlueZ monitor (!613) - Improved the naming of Bluetooth nodes when the auto-switching loopback. Node is present (!614) - Updated the documentation on "settings", the Bluetooth monitor, the Access. Configuration, the file search locations and added a document on how to Modify the configuration file (#595, !616) : Checking for available routes when selecting the default node (!609). - an that was causing an infinite loop storing routes in the. State file (!610) The interpretation of boolean values in the alsa monitor rules (#586, !611). - a Lua crash when we have 2 smart filters, one with a target and one. Without (!612) - an where the default nodes would not be updated when the. Currently selected default node became unavailable (#588, !615) - an that would cause the Props (volume, mute, etc) of loopbacks. And other filter nodes to not be restored at startup (#577, !617) How some constants were represented in the gobject-introspection file. Mostly by converting them from defines to enums (#540, #591) - an using WirePlumber headers in other projects due to. Redefinition of G_LOG_DOMAIN Past releases.
0.4.9005 Mar 2024 10:25 minor feature: This is the first release candidate (RC1) of WirePlumber 0.5.0. Highlights: - The configuration system has been changed back to load files from the WirePlumber configuration directories, such as `/etc/wireplumber` and. ` XDG_CONFIG_HOME/wireplumber`, unlike in the pre-releases. This was done. Because were observed with installations that use a different pre for pipewire and wireplumber. If you had a `wireplumber.conf` file in `/etc/pipewire` or ` XDG_CONFIG_HOME/pipewire`, you should move it to. `/etc/wireplumber` or ` XDG_CONFIG_HOME/wireplumber` respectively (!601). - The internal base directories lookup system now also respects the. `XDG_CONFIG_DIRS` and `XDG_DATA_DIRS` environment variables, and their. Default values as per the XDG spec, so it is possible to install Configuration files also in places like `/etc/xdg/wireplumber` and Override system-wide data paths (!601) - `wpctl` now has a `settings` subcommand to show, change and delete. Settings at runtime. This comes with changes in the `WpSettings` system to Validate settings using a schema that is defined in the configuration file. The schema is also exported on a metadata object, so it is available to any. Client that wants to expose WirePlumber settings (!599, !600) - The `WpConf` API has changed to not be a singleton and support opening. Arbitrary config files. The main config file now needs to be opened prior to Creating a `WpCore` and passed to the core using a property. The core uses That without letting the underlying `pw_context` open and read the default `client.conf`. The core also the `WpConf` after all components. Are loaded, which means all the config loading is done early at startup. Finally, `WpConf` loads all sections lazily, keeping the underlying files. Memory mapped until it is and merging them on demand (!601, !606) Past releases.
0.4.8215 Feb 2024 07:05 minor feature: This is a second pre-release of WirePlumber 0.5.0, made available for testing Purposes. This is not API/ABI stable yet and there is still pending work to do Before the final 0.5.0 release, both in the codebase and the documentation. Highlights: - Bluetooth auto-switching is now implemented with a virtual source node. When an application links to it, the actual device switches to the HSP/HFP. Profile to provide the real audio stream. This is a more robust solution That works with more applications and is more user-friendly than the Previous application whitelist approach - Added support for dynamic log level changes via the PipeWire `settings`. Metadata. Also added support for log level patterns in the configuration File - The "persistent" (i.e. stored) settings approach has changed to use two. Different metadata objects: `sm-settings` and `persistent-sm-settings`. Changes in the former are applied in the current session but not stored. While changes in the latter are stored and restored at startup. Some work Was also done to expose a `wpctl` interface to read and change these Settings, but more is underway - Several WirePlumber-specific node properties that used to be called. `target.*` have been renamed to `node.*` to match the PipeWire. Convention of `node.dont-reconnect`. These are also now fully documented Other changes: - Many documentation updates. - Added support for SNAP container permissions. Multiple related to restoring the Route parameter of devices. Which includes volume state - Smart filters can now be targetted by specific streams directly when. The `filter.smart.targetable` property is set - Ported the mechanism to override device profile priorities in the. Configuration, which is used to re-prioritize Bluetooth codecs - WpSettings is no longer a singleton class and there is a built-in component to preload an instance of it. Past releases.
0.4.8131 Jan 2024 14:14 minor feature: This is a preliminary release of WirePlumber 0.5.0, which is made available for testing purposes. Please test it and report feedback (merge requests are also welcome ;) ). This is not API/ABI stable yet and there is still pending work to do before the final 0.5.0 release, both in the codebase and the documentation. Highlights: - Lua scripts have been refactored to use the new event dispatcher API, which allows them to be split into multiple small fragments that react to events in a specified order. This allows scripts to be more modular and easier to maintain, as well as more predictable in terms of execution order. - The configuration system has been refactored to use a single SPA-JSON file, like PipeWire does, with support for fragments that can override options. This file is also now loaded using PipeWire's configuration API, which effectively means that the file is now loaded from the PipeWire configuration directories, such as ``/etc/pipewire`` and `` XDG_CONFIG_HOME/pipewire``. - The configuration system now has the concept of profiles, which are groups of components that can be loaded together, with the ability to mark certain components as optional. This allows having multiple configurations that can be loaded using the same configuration file. Optional components also allow loading the same profile gracefully on different setups, where some components may not be available (ex, loading of the session D-Bus plugin on a system-wide PipeWire setup now does not fail). - Many configuration options are now exposed in the ``sm-settings`` metadata, which allows changing them at runtime. This can be leveraged in the future to implement configuration tools that can modify WirePlumber's behaviour dynamically, without restarting. - A new "filters" system has been implemented, which allows specifying chains of "filter" nodes to be dynamically linked in-between streams and devices.