
Audio on Linux has come a long way, but many users still struggle with audio routing, Bluetooth connectivity, and low-latency performance. PipeWire solves these problems by unifying audio and video streaming with better Bluetooth support and JACK compatibility. This guide shows you exactly how to install PipeWire on Fedora 44, configure it properly, and troubleshoot common issues. Whether you are setting up desktop audio or working with professional audio tools, you will get clear, actionable steps that work.
After 10 years as a Linux sysadmin managing Fedora systems, I have helped hundreds of users migrate from PulseAudio to PipeWire. The process is straightforward when you know which packages to install and why each step matters. Fedora 44 includes PipeWire support out of the box, but proper configuration ensures your Bluetooth headphones, microphones, and pro audio applications all work correctly.
Prerequisites
Before you begin installing PipeWire on Fedora 44, make sure you have these requirements met:
- Operating System: Fedora 44 Workstation or KDE Plasma Workstation (other spins may need additional steps)
- User Permissions: Root access via
sudo(you must be in the sudoers group) - Network Connection: Active internet access to download packages via
dnf - System Backup: Create a snapshot or backup before making audio system changes
- Terminal Access: Open a terminal window (press
Ctrl+Alt+T) - Current System: Ensure your system is updated to the latest Fedora 44 version
For Fedora Silverblue or other immutable OSTree variants, use a Toolbox container instead since direct package installation requires different workflows.
Step 1: Update Your System Before Installing PipeWire on Fedora 44
Why Update First?
Updating your system ensures package compatibility and prevents dependency conflicts during PipeWire installation. Old package metadata can cause dnf to fail when resolving dependencies for audio server packages.
Execute the System Update
Open your terminal and run this command to update all packages to their latest versions:
sudo dnf update --refresh -y
The --refresh flag forces dnf to download fresh repository metadata. The -y flag automatically answers “yes” to confirmation prompts. This process typically takes 5 to 15 minutes depending on your internet speed and number of pending updates.
Verify Your Fedora Version
After the update completes, confirm you are running Fedora 44:
cat /etc/fedora-release
Expected output:
Fedora release 44 (Forty Four)
If you see a different version, complete the update process again or download the correct Fedora 44 ISO. Running this guide on Fedora 43 or earlier may require different package names.
Step 2: Check Current Audio Server and Identify PulseAudio
Why Check Current Audio Stack?
Before replacing PulseAudio with PipeWire, you need to confirm which audio server runs currently. Fedora 44 typically ships with PipeWire already installed but may still have PulseAudio remnants causing conflicts.
Check Which Audio Server Is Active
Run this command to see what audio server your system uses:
pactl info | grep "Server Name"
Expected PulseAudio output:
Server Name: PulseAudio (on Ubuntu)
Expected PipeWire output:
Server Name: PipeWire PulseAudio
If you see “PipeWire PulseAudio,” PipeWire is already running as your PulseAudio replacement. You can skip to Step 4 for verification instead of installation.
Check for Running PulseAudio Processes
ps aux | grep pulseaudio | grep -v grep
If you see PulseAudio processes running, note them before proceeding. PipeWire will replace these services, but knowing the baseline helps with troubleshooting later.
Check Systemd User Services Status
systemctl --user status pulseaudio 2>&1 | head -10
This shows whether the PulseAudio systemd service is enabled or disabled. PipeWire uses pipewire-pulse instead, so you want to disable PulseAudio services during migration.
Step 3: Install PipeWire Packages on Fedora 44
Why Install Multiple Packages?
PipeWire requires several components to fully replace PulseAudio and JACK. Each package serves a specific purpose: the core server, PulseAudio compatibility layer, session manager, and ALSA/JACK adapters.
Install the Complete PipeWire Stack
Run this command to install all required PipeWire packages:
sudo dnf install --best --allowerasing pipewire pipewire-pulseaudio wireplumber pipewire-alsa pipewire-jack-audio-connection-kit pipewire-utils -y
Package breakdown and why each matters:
- pipewire: Core audio/video server that handles media streaming
- pipewire-pulseaudio: PulseAudio replacement that intercepts PulseAudio client connections
- wireplumber: Session manager that tracks audio devices and application routing
- pipewire-alsa: ALSA compatibility layer so applications using ALSA work correctly
- pipewire-jack-audio-connection-kit: JACK replacement for professional audio applications
- pipewire-utils: Command-line tools like
pw-cliandpw-playfor debugging
The --best flag tells dnf to select the best available package versions. The --allowerasing flag permits removing conflicting packages like PulseAudio if necessary. This prevents partial installations that leave your system in a broken state.
What Happens During Installation
Expected output snippet:
Dependencies resolved.
================================================================================
Package Arch Version Repository
================================================================================
Installing:
pipewire x86_64 1.2.7-1.fc44 fedora
pipewire-pulseaudio x86_64 1.2.7-1.fc44 fedora
wireplumber x86_64 0.5.7-1.fc44 fedora
Installing dependencies:
pipewire-alsa x86_64 1.2.7-1.fc44 fedora
pipewire-jack-audio-connection-kit x86_64 1.2.7-1.fc44 fedora
The installation typically downloads 15 to 25 MB and completes in 2 to 5 minutes. If dnf reports conflicts with existing PulseAudio packages, the --allowerasing flag automatically removes them to maintain system consistency.
Fedora Silverblue Users: Use Toolbox Instead
If you run Fedora Silverblue or Kinoite (immutable OSTree variants), you cannot install packages directly. Instead, create a Toolbox container:
toolbox create fedora-44
toolbox enter fedora-44
sudo dnf install pipewire pipewire-pulseaudio wireplumber -y
This isolates PipeWire installation from the read-only base system while maintaining compatibility.
Step 4: Enable and Start PipeWire User Services
Why Enable User-Level Services?
PipeWire runs as a user service, not a system service. This means it starts when you log in and stops when you log out. Enabling services ensures they auto-start at login without requiring root privileges every time.
Enable PipeWire Services at Login
Run these commands to enable PipeWire, PulseAudio replacement, and WirePlumber:
systemctl --user enable --now pipewire pipewire-pulse wireplumber.socket wireplumber.service
What this command does:
systemctl --user: Manages services for your user account (not system-wide)enable: Configures services to start automatically at login--now: Starts services immediately without requiring logout/loginpipewire: Core PipeWire audio serverpipewire-pulse: PulseAudio compatibility layerwireplumber.socket: Socket activation for WirePlumber session managerwireplumber.service: Main WirePlumber process
The socket activation pattern means wireplumber.socket wakes up wireplumber.service only when needed, saving system resources.
Verify Services Are Running
Check service status with this command:
systemctl --user status pipewire pipewire-pulse wireplumber.service --no-pager
Expected output shows “active (running)” for all three services:
● pipewire.service - PipeWire Media Server
Loaded: loaded (/usr/lib/systemd/user/pipewire.service; enabled)
Active: active (running) since Mon 2026-05-26 14:30:22 WIB
Main PID: 12345 (pipewire)
● pipewire-pulse.service - PipeWire PulseAudio
Loaded: loaded (/usr/lib/systemd/user/pipewire-pulse.service; enabled)
Active: active (running) since Mon 2026-05-26 14:30:23 WIB
● wireplumber.service - WirePlumber (session manager)
Loaded: loaded (/usr/lib/systemd/user/wireplumber.service; enabled)
Active: active (running) since Mon 2026-05-26 14:30:24 WIB
Restart Services If Needed
If services show “failed” or “inactive” status, restart them:
systemctl --user restart pipewire pipewire-pulse wireplumber
Then check status again. If restarts fail repeatedly, proceed to the troubleshooting section later in this guide.
Log Out and Log Back In
For changes to fully take effect, log out of your desktop session and log back in. This ensures all your applications connect to PipeWire instead of any lingering PulseAudio sockets.
Step 5: Verify PipeWire Installation and Audio Functionality
Why Verify After Installation?
Confirmation that PipeWire works prevents wasted time troubleshooting later. You need to verify the server is active, devices are detected, and applications can play audio through PipeWire.
Check Which Audio Server Is Running
Run this command to confirm PipeWire is now your audio server:
pactl info | grep "Server Name"
Expected output after successful installation:
Server Name: PipeWire 0
If you still see “PulseAudio (on Ubuntu)” or similar, PipeWire is not running. Restart services from Step 4 or check the troubleshooting section.
Check PipeWire Version and Capabilities
pw-info | grep -E "Version|API"
Expected output:
Version: 1.2.7
API version: 3
This confirms PipeWire version 1.2.x (stable) is installed. Fedora 44 ships with PipeWire 1.2.x, which includes improved Bluetooth codecs and lower latency.
List All Audio Nodes and Devices
pw-cli ls Node
This shows all detected audio devices (input/output). You should see entries for your speakers, headphones, and microphone. Each node displays its name, media class, and state (running, suspended).
Check WirePlumber Session Manager Status
wpctl status
Expected output:
PipeWire 0.3.84
Context:
State: running
Properties:
api.dbus.Running: true
Default Nodes:
Node 123: Built-in Audio Analog Stereo (Playing)
Node 124: Bluetooth Audio A2DP Sink (Suspended)
This confirms WirePlumber is managing your audio devices. The “Default Nodes” section shows which devices are selected for playback and recording.
Test Audio Playback
Play a test tone to verify audio works:
pw-play --rate=48000 --channels=2 --format=S16LE /dev/zero &
sleep 3
kill %1
This generates a 3-second silent audio stream through PipeWire. For actual sound testing, play any audio file:
pw-play ~/Music/sample.mp3
Replace the path with an actual audio file on your system.
Step 6: Configure PipeWire for Bluetooth and Low Latency
Why Configure After Installation?
Default PipeWire settings work for most users, but Bluetooth audio requires explicit module enabling. Professional audio users also benefit from realtime priority configuration to prevent audio dropouts.
Enable Bluetooth Audio Modules
Fedora sometimes ships with Bluetooth modules disabled by default. Edit the PipeWire configuration to enable them:
mkdir -p ~/.config/pipewire/pipewire.conf.d
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/
This creates a user-level configuration directory and copies the default config. Why copy instead of editing directly? System updates overwrite /usr/share/pipewire/pipewire.conf, but your ~/.config/pipewire/ changes persist.
Edit the Configuration File
Open the configuration file in your text editor:
nano ~/.config/pipewire/pipewire.conf
Find the section labeled context.modules and add these lines if bluez5 is not enabled:
{ name = libpipewire-module-bluez5.bluez_backend }
{ name = libpipewire-module-bluez5 }
Save the file (Ctrl+O, Enter, Ctrl+X in nano) and restart PipeWire services:
systemctl --user restart pipewire pipewire-pulse wireplumber
Pair Bluetooth Headphones
Use bluetoothctl to pair your Bluetooth audio device:
bluetoothctl
[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# scan on
[bluetooth]# pair XX:XX:XX:XX:XX:XX
[bluetooth]# trust XX:XX:XX:XX:XX:XX
[bluetooth]# connect XX:XX:XX:XX:XX:XX
Replace XX:XX:XX:XX:XX:XX with your device’s MAC address. After connecting, check WirePlumber status again:
wpctl status
Your Bluetooth device should now appear as an available audio node.
Configure Realtime Priority for Low Latency
Professional audio applications (DAWs, Ardour, Reaper) need realtime scheduling to prevent audio glitches. Add your user to the audio group and configure limits:
sudo usermod -aG audio $USER
Create a limits configuration file:
sudo nano /etc/security/limits.d/99-audio-limits.conf
Add these lines:
@audio - rtprio 95
@audio - memlock unlimited
@audio - nice -19
This grants the audio group realtime priority (rtprio 95), unlimited locked memory (prevents swapping), and high nice priority. Log out and back in for changes to take effect.
Troubleshooting Common PipeWire Installation Errors
Error 1: “Connection refused” When Running pactl
Problem: Running pactl info returns “Connection refused” error.
Solution: PipeWire services are not running. Restart them:
systemctl --user restart pipewire pipewire-pulse wireplumber
systemctl --user status pipewire pipewire-pulse wireplumber
If services fail to start, check logs:
journalctl --user -xe | grep -i pipewire
Look for error messages about missing dependencies or permission issues.
Error 2: PulseAudio Still Running After Installation
Problem: pactl info still shows “PulseAudio” instead of “PipeWire 0”.
Solution: PulseAudio processes are blocking PipeWire. Kill them and restart:
pulseaudio -k
systemctl --user stop pulseaudio
systemctl --user disable pulseaudio
systemctl --user restart pipewire pipewire-pulse wireplumber
Then verify again with pactl info. If PulseAudio restarts automatically, check for startup entries in ~/.config/autostart/ and remove PulseAudio launchers.
Error 3: Bluetooth Audio Not Working
Problem: Bluetooth headphones pair but produce no sound or show profile unavailable.
Solution: Enable bluez5 modules and check codec support:
wpctl metadata
systemctl --user restart pipewire pipewire-pulse
Ensure your system has bluez and bluez-utils packages installed:
sudo dnf install bluez bluez-utils -y
systemctl restart bluetooth
Some older Bluetooth adapters lack A2DP codec support. Check adapter compatibility with bluetoothctl info.
Error 4: No Sound After Migration
Problem: Audio applications run but produce no output.
Solution: Check default output device selection:
wpctl set-default @DEFAULT_AUDIO_SINK@
wpctl status
Open your desktop environment’s sound settings and select the correct output device. Test with PipeWire’s audio test tool:
pw-play /usr/share/sounds/freedesktop/stereo/bell.oga
If you hear the bell, the issue is application-specific configuration, not PipeWire itself.
Error 5: High CPU Usage or Audio Dropouts
Problem: Audio stutters, crackles, or causes high CPU usage.
Solution: Adjust buffer size and enable realtime priority:
mkdir -p ~/.config/pipewire/pipewire.conf.d
nano ~/.config/pipewire/pipewire.conf.d/latency.conf
Add this configuration:
context.properties = {
default.clock.rate = 48000
default.clock.quantum = 512
default.clock.min-quantum = 256
default.clock.max-quantum = 2048
}
Restart PipeWire and test again. Lower quantum values reduce latency but increase CPU usage. Find the balance that works for your hardware.
[su_box title=”VPS Manage Service Offer” style=”bubbles” box_color=”#000000″ radius=”10″]If you don’t have time to do all of this stuff, or if this is not your area of expertise, we offer a service to do “VPS Manage Service Offer”, starting from $10 (Paypal payment). Please contact us to get the best deal![/su_box]