How to Install and Use a Standalone Compositor on Fedora (Wayland)

Install PipeWire on Fedora Wayland using dnf and enable it as a standalone compositor for audio and video handling.

Story / scenario

You installed Fedora and decided the default desktop environment is too heavy for your workflow. You want a standalone compositor like Hyprland or Sway. You found a guide telling you to install PipeWire as a compositor. That guide is wrong. PipeWire is not a compositor. It is a multimedia server. If you follow that advice, you will get audio but no windows. Or you will install a compositor and find your audio is dead because you missed the audio stack. This article shows how to install a standalone compositor and wire up PipeWire so your system has both windows and sound.

What's actually happening

Wayland splits responsibilities that older systems bundled together. The compositor draws windows, handles input, and manages the screen. It does not route audio. PipeWire routes audio and video streams between applications and hardware. In a full desktop environment, GNOME or KDE starts both the compositor and the audio server for you. In a standalone setup, you are the conductor. You must start the compositor and the audio server.

PipeWire also includes a session manager called Wireplumber. Wireplumber handles device routing, policy, and hot-plugging. It ensures your microphone routes to the correct app and your headphones activate when you plug them in. Fedora uses Wireplumber by default. If you skip Wireplumber, your audio devices may not appear or may fail to switch automatically.

The pipewire-pulse package provides a compatibility layer. Many applications still speak the PulseAudio protocol. Without this package, those apps will fail to find an audio server. Install pipewire-pulse to bridge the gap. The compositor and PipeWire run independently. The compositor does not start PipeWire. You must enable the user services.

The fix

Install the compositor and the full PipeWire stack. Hyprland is available in the Fedora repositories and serves as a modern example. The commands below install Hyprland, PipeWire, the ALSA compatibility layer, the PulseAudio compatibility layer, and Wireplumber.

sudo dnf install hyprland pipewire pipewire-alsa pipewire-pulse wireplumber
# WHY: Hyprland is the Wayland compositor. PipeWire handles audio/video.
# WHY: pipewire-alsa provides ALSA compatibility for legacy apps.
# WHY: pipewire-pulse provides PulseAudio compatibility for most desktop apps.
# WHY: wireplumber manages the PipeWire session and device routing.

Enable the user services. Wayland compositors and audio servers run as user services, not system services. The --user flag targets your user instance. The --now flag starts the services immediately.

systemctl --user enable --now pipewire pipewire-pulse wireplumber
# WHY: Enable and start PipeWire and PulseAudio compatibility for your user.
# WHY: wireplumber must run to manage device policies and routing.
# WHY: --user targets the user session. System services cannot manage user audio.

If you plan to use the compositor on a headless server or want the services to start automatically on boot without a login, enable linger. This keeps user services alive after logout.

loginctl enable-linger $USER
# WHY: Keeps user services running across reboots and after logout.
# WHY: Useful for kiosk setups or when the compositor auto-starts via a display manager.

Configure your display manager to launch the compositor. GDM supports Wayland sessions out of the box. Log out, select your user, and choose the Hyprland session from the gear menu. If you use SDDM, ensure the .desktop file is in /usr/share/wayland-sessions/. Fedora packages this automatically.

Backup your config before editing. A syntax error in the compositor config can prevent the session from starting. Keep a TTY open with Ctrl+Alt+F3 to recover if the GUI fails.

Verify it worked

Check that the compositor is running and managing windows. The hyprctl command queries the compositor state. If the command returns output, the compositor is alive.

hyprctl clients
# WHY: Lists all windows managed by Hyprland.
# WHY: Empty output means the compositor is running but no windows are open.
# WHY: An error means the compositor is not running or the socket is missing.

Check that PipeWire sees your audio devices. The pw-cli tool inspects the PipeWire graph. Look for audio nodes.

pw-cli info objects | grep -A 5 "Node" | grep "audio"
# WHY: Filters PipeWire objects for audio nodes.
# WHY: Confirms PipeWire has detected your sound card and microphone.
# WHY: No output suggests a missing driver or a failed PipeWire service.

Play a test sound to confirm the full pipeline works. The speaker-test command generates a tone. Press Ctrl+C to stop.

speaker-test -t wav -c 2
# WHY: Plays a WAV tone on the default audio sink.
# WHY: -c 2 tests stereo channels.
# WHY: If you hear sound, the compositor, PipeWire, and hardware are all working.

Run journalctl -xeu pipewire if audio fails. The x flag adds explanatory text. The e flag jumps to the end. Read the actual error before guessing.

Common pitfalls and what the error looks like

If you see Error: Could not connect to PipeWire in an application, the pipewire-pulse service is likely not running. Check the service status.

systemctl --user status pipewire-pulse
# WHY: Shows the state and recent logs for the PulseAudio compatibility service.
# WHY: Look for "Active: active (running)" and recent log lines.
# WHY: If inactive, enable and start it with the systemctl command above.

If X11 applications fail to launch, ensure Xwayland is enabled. Hyprland includes Xwayland by default. Some compositors require explicit configuration. Check the compositor documentation for Xwayland support.

If you see [FAILED] Failed to start wireplumber.service, your user session may lack the required D-Bus socket. Restart the user session manager.

systemctl --user restart dbus
# WHY: Restarts the user D-Bus daemon.
# WHY: Wireplumber relies on D-Bus for session management.
# WHY: A stale D-Bus socket can cause service failures after a crash.

Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/. Compositor configs live in ~/.config/hypr/. PipeWire configs live in ~/.config/pipewire/. Create these directories if they do not exist.

When to use this vs alternatives

Use Hyprland when you want a tiling compositor with animations, floating windows, and modern Wayland features. Use Sway when you need i3 compatibility and a stable, minimal tiling experience. Use GNOME when you want a full desktop environment with integrated settings, accessibility tools, and a polished workflow. Use KDE Plasma when you need a traditional desktop with heavy customization and widget support. Stay on the upstream Workstation if you only deviate from the defaults occasionally.

Snapshot the system before the upgrade. Future-you will thank you.

Where to go next