You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Replace PulseAudio with PipeWire/WirePlumber audio stack in WSLg - #1418
Triage note (2026-05): Thanks for the substantial work — replacing PulseAudio with PipeWire/WirePlumber is squarely on the roadmap (tracked in #290, with 40+ reactions) and we want to land this. A few things will hold the merge button:
We need to validate audio behavior end-to-end against current RDP audio playback and capture paths. The pipewire-wslg-rdp.patch and pipewire-rdp-module.c carry the equivalent of the existing PulseAudio RDP module — verifying parity (sample rates, latency, capture devices, mute/volume integration with Windows) is the bulk of the review.
cgmanifest.json will need entries for PipeWire / WirePlumber so Component Governance is happy.
An internal buddy build through the full Azure Pipelines flow before merge.
Not asking for changes yet — just setting expectations. If you want to chip away at (1) and (2) preemptively that would help.
The reason will be displayed to describe this comment to others. Learn more.
I'm glad Microsoft is willing to take on this work, especially since I don't actually have an Azure account to test the corresponding CI files. Should I close this PR?
The reason will be displayed to describe this comment to others. Learn more.
I am not sure whether I should resolve the merge conflicts; even if I did, I wouldn't be able to register for an account on https://www.azure.cn/ as an individual to test the CI, as accounts there require corporate registration.
This hardcoded path bypasses the existing PULSE_AUDIO_RDP_SINK override set by WSLGd and configurable through .wslgconfig; the former PulseAudio RDP module read that environment variable. Private/test deployments that redirect Weston's sink socket will now keep connecting to /mnt/wslg/PulseAudioRDPSink. Preserve the environment fallback in the new module and avoid overriding it here.
Preserve PULSE_AUDIO_RDP_SOURCE endpoint override
config/pipewire-pulse.conf:47
This likewise bypasses the existing PULSE_AUDIO_RDP_SOURCE override set by WSLGd and configurable through .wslgconfig; the former source module consumed that variable. Any deployment using a redirected microphone socket will silently connect to the default path instead. Preserve the environment fallback in the module rather than fixing the endpoint in this config.
Defer stream parameter updates to the main loop
config/pipewire-rdp-module.c:616
pw_stream_update_params() is called from the RT/data-loop process callback, but PipeWire 1.4.10 enforces that this API runs on the stream's main loop (ensure_loop(impl->main_loop, return -EIO)). The update therefore fails, and published_seq is still advanced, so the measured RDP transport latency is never published or retried. Defer the parameter update to the main-loop timer and only mark the sequence published after a successful call.
The native pipewire-0 socket is created without explicit permissions, so protocol-native leaves its mode to the process umask; unlike the Pulse socket (which PipeWire chmods to 0777), it is not connectable by user-distro accounts whose UID differs from the fixed wslg UID 1000. That prevents the native PipeWire/JACK/Flatpak use case motivating this migration for such accounts. Configure socket ownership/mode and the matching access policy explicitly for projected user-distro access.
The reason will be displayed to describe this comment to others. Learn more.
Needs a closer look
I’ve reviewed it and don’t see any issues; I tested it locally using that Dockerfile in rootless Docker.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.