Understanding the Service Transition
Fedora 37 introduced PipeWire as the default audio server, replacing PulseAudio. However, if you are upgrading from an older version or have manually installed PulseAudio, both services may coexist in a conflicting state. The goal is to deactivate the legacy PulseAudio daemon so that PipeWire can handle all audio routing. This process involves managing systemd user services, which control how background processes start and stop for your specific login session. It is crucial to understand that simply installing the packages is not enough; you must actively manage the running instances to ensure the switch takes effect without requiring a full reboot.Stopping the PulseAudio Service
The first step is to halt the currently running PulseAudio instance. Since this service runs per-user, you do not need root privileges to stop it, but you do need to target the user scope. Open your terminal and execute the following command to stop the service:systemctl --user stop pulseaudio.service
This command sends a termination signal to the PulseAudio daemon. You can verify that it has stopped by checking its status:
systemctl --user status pulseaudio.service
If the output indicates that the service is inactive or dead, you have successfully removed the old audio server from memory. At this point, your audio might be silent because no server is currently handling requests. This is expected behavior before we activate the replacement.
Enabling PipeWire Socket Units
PipeWire relies on socket activation to start only when needed, rather than running continuously in the background. To ensure this works correctly, you need to enable the socket units for both the session and system scopes. Run the following commands to enable these sockets:systemctl --user enable --now pipewire.socket
systemctl --user enable --now pipewire-pulse.socket
The pipewire.socket handles the core PipeWire protocol, while pipewire-pulse.socket provides the compatibility layer that makes applications think they are talking to PulseAudio. By enabling both with the --now flag, you start them immediately and ensure they persist across reboots. This dual-socket setup is critical because most desktop applications still use the PulseAudio API.
Activating the PipeWire Daemon
While the sockets are enabled, you should also explicitly start the main PipeWire daemon to ensure it is running and ready to accept connections. Execute the following command:systemctl --user start pipewire.service
You can verify the status of the entire audio stack by running:
systemctl --user status pipewire pipewire-pulse
Both services should show as active and running. If you encounter any errors here, check the journal logs using journalctl --user -u pipewire for detailed diagnostics. Once confirmed, your system is now routing audio through PipeWire.
Verifying Audio Functionality
After switching services, test your audio output. Play a media file or use a simple tone generator to confirm sound is working. You can also check the current audio server being used by running:pactl info
Look for the "Server Name" field. If it says "PulseAudio (on PipeWire)", the transition was successful. If it still references pure PulseAudio, you may need to log out and log back in to fully refresh the environment variables. For more information on preventing unintended audio device switches during this process, see our guide on How to Stop PipeWire Switching HDMI Audio.
Disabling Legacy Services
To prevent PulseAudio from accidentally starting again in the future, disable its autostart mechanism. Use the following command:systemctl --user disable --now pulseaudio.service
This ensures that even if you reinstall the package, it will not interfere with PipeWire. You can remove the PulseAudio packages entirely if you wish to save space, but keeping them installed is harmless as long as the service remains disabled.
Frequently Asked Questions
Why does my audio cut out after switching?
This usually happens if the PipeWire socket did not start correctly. Ensure that both pipewire.socket and pipewire-pulse.socket are active by checking their status with systemctl. Restarting the user session often resolves temporary connection glitches.
Can I revert to PulseAudio if PipeWire fails?
Yes, you can simply stop the PipeWire services and restart the PulseAudio service using systemctl --user start pulseaudio.service. However, since Fedora 37 defaults to PipeWire, you may need to reinstall PulseAudio if it was removed during the upgrade process.
Does this fix work for Wayland users?
Yes, PipeWire is particularly beneficial for Wayland users as it integrates better with screen sharing and audio routing compared to PulseAudio. The same systemctl commands apply regardless of whether you are using X11 or Wayland.
What if pactl info still shows PulseAudio?
If pactl info shows "PulseAudio" instead of "PipeWire," your application might be caching the old connection. Try logging out and logging back in, or restart the affected applications to force them to reconnect to the new PipeWire socket.
Is it safe to uninstall PulseAudio completely?
It is generally safe to uninstall PulseAudio on Fedora 37, but some legacy applications might rely on its libraries. Keeping the package installed but disabling the service is a safer middle ground that prevents conflicts while allowing easy reversion if needed.