Artix has used PipeWire as its default audio server since 2023, replacing PulseAudio. This episode covers WirePlumber, wpctl for volume control, bluetooth with bluez, gstreamer and ffmpeg codecs, and the mesa and NVIDIA GPU drivers for smooth multimedia.

A desktop without sound feels flat. Episode 9 covers Artix's multimedia layer: PipeWire as the default audio server, WirePlumber as its session manager, bluez for bluetooth, gstreamer/ffmpeg codecs, and the mesa and NVIDIA GPU drivers so video and gaming run smoothly.
The good news: all of this is managed as services on your chosen init. After episode 8, you're already used to the service activation pattern — this episode just applies it to audio and multimedia components.
Since 2023, Artix uses PipeWire as its main audio server, replacing PulseAudio. PipeWire handles both audio and video, has low latency for pro-audio applications, and is compatible with applications written for PulseAudio and ALSA. One server for everything.
Install the core PipeWire packages along with the WirePlumber session manager:
sudo pacman -S pipewire pipewire-pulse wireplumberpipewire-pulse provides PulseAudio compatibility, so older applications keep producing sound without configuration. WirePlumber manages connection policies between devices and applications.
Audio services are enabled per-user or per-session. On OpenRC, enable the system-wide services:
rc-update add pipewire default
rc-update add pipewire-pulse default
rc-update add wireplumber defaultThe pipewire-openrc subpackage provides init scripts for all three. After rebooting, audio is immediately available. For other inits, use the matching services from each subpackage.
wpctl is PipeWire's control tool. List devices and change volume:
wpctl status
wpctl inspect @DEFAULT_AUDIO_SINK@
wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.7
wpctl set-mute @DEFAULT_AUDIO_SINK@ toggleThe output of wpctl status lists sinks, sources, and audio sessions. set-volume accepts decimal values from 0.0 to 1.5; set-mute toggles mute status.
If there are several devices, find the sink ID you want from the list in wpctl status. Then operate on it directly by ID:
wpctl set-volume 45 0.5
wpctl set-default 45wpctl set-default 45 makes sink number 45 the default. This is handy when switching between earphones and speakers.
For bluetooth, install bluez and enable its daemon per your init:
sudo pacman -S bluez bluez-utils
rc-update add bluetoothd default
rc-service bluetoothd startThe service name bluetoothd on OpenRC handles all bluetooth adapters. Check adapter status with bluetoothctl.
Pair a bluetooth audio device from the terminal:
bluetoothctl
power on
scan on
pair 00:11:22:33:44:55
connect 00:11:22:33:44:55
trust 00:11:22:33:44:55Replace the MAC address with your device's. After being trusted, the device reconnects automatically in the future. Use scan on and watch the list for the MAC to pair.
Video playback depends on codecs. Install gstreamer with full plugins and ffmpeg:
sudo pacman -S gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav
sudo pacman -S ffmpeggst-plugins-ugly contains codecs with restrictive licenses, so install it considering your legal usage. The gstreamer + ffmpeg combination covers almost all modern media formats.
Video acceleration depends on drivers. For Intel, AMD, and generic GPUs, mesa is sufficient:
sudo pacman -S mesa libva-mesa-driver vulkan-mesa-layersFor NVIDIA cards, use the proprietary nvidia driver with the matching service, or nouveau for open source. Check the active driver with:
lspci -k | grep -A 3 -E 'VGA|3D'
glxinfo -B | grep 'OpenGL renderer'The output of lspci -k | grep -A 3 -E 'VGA|3D' shows the kernel driver loaded for your graphics card. glxinfo -B confirms OpenGL is using the GPU rather than software rendering.
If there's no audio, check three things in order: PipeWire services active, correct default sink, and volume not muted:
rc-status | grep -E 'pipewire|wireplumber'
wpctl status | head -n 20
wpctl get-volume @DEFAULT_AUDIO_SINK@wpctl get-volume @DEFAULT_AUDIO_SINK@ shows the current volume. If it displays MUTED, unmute with wpctl set-mute @DEFAULT_AUDIO_SINK@ 0.
Stuttering video is usually software rendering. Make sure the mesa package is installed, the driver matches, and the LIBVA_DRIVER_NAME environment variable is set if needed. Chromium-based apps sometimes need the --enable-features=VaapiVideoDecoder flag to use hardware acceleration.
Episode 9 completed your desktop with multimedia: PipeWire and WirePlumber as the audio foundation, wpctl for control, bluez for bluetooth, gstreamer and ffmpeg codecs, and the mesa and NVIDIA GPU drivers.
Key takeaways:
wpctl for viewing and setting volume and the default sink.bluetoothd.In the next episode, episode 10, we'll cover storage: LVM, Btrfs, and encryption — logical volumes, Btrfs subvolumes and snapshots, ext4/xfs filesystems, and LUKS/dm-crypt encryption with the mkinitcpio hook.