Bazzite Linux / Audio / Guide
Dolby Digital AC3 transcoding on Bazzite with PipeWire - including the fix that most guides miss.
Most TVs - Samsung included - don't support LPCM 5.1 over HDMI ARC. They only accept PCM 2.0 or Dolby Digital (AC3). Linux doesn't transcode to AC3 by default, so surround sound just doesn't arrive at your receiver even if everything looks correctly configured.
The fix is to create a virtual audio device that encodes your audio as AC3 before it goes out over HDMI. There's a good existing guide for this, but it assumes traditional PulseAudio. Bazzite uses PipeWire, and there's one step that breaks silently - your sink appears to work but vanishes after every reboot. This guide covers the full setup including that fix.
Bazzite is an immutable OS, so software installs go through rpm-ostree rather than a standard package manager. Run this, then reboot.
sudo rpm-ostree install alsa-plugins-a52
The reboot is required before the plugin is available to ALSA.
List your playback hardware to find which card and device number corresponds to your TV.
aplay -l
Look for your TV in the output - it'll usually be labelled by manufacturer name. Note down the card number and device number.
# Example output - yours will differ
card 1: HDMI [HDA ATI HDMI], device 10: HDMI 4 [SAMSUNG]
In this example: card 1, device 10. Keep these handy for the next step.
Install PulseAudio Volume Control (pavucontrol) from the Bazzite app store. Open it, go to the Configuration tab, and disable the HDMI output connected to your TV. This releases it so our custom setup can take control.
This tells ALSA how to encode audio as AC3 and route it to your HDMI output.
nano ~/.asoundrc
Paste the following - replacing hw:HDMI,10 with your actual card and device numbers from Step 2.
# Raw AC3 encoder
pcm.a52_raw {
type a52
rate 48000
bitrate 640
channels 6
format S16_LE
slavepcm "hw:HDMI,10" # your card and device here
}
# Safe wrapper - handles format conversion for apps
pcm.a52_safe {
type plug
slave.pcm "a52_raw"
hint {
show on
description "TV (AC3 Surround)"
}
}
The bitrate of 640kbit is the maximum for HDMI ARC.
Run the speaker test to confirm audio is reaching your surround system before going further.
speaker-test -D a52_safe -c 6 -r 48000
You should hear test tones from each channel. If this works, carry on. If not, go back and check your card and device numbers in Step 2.
pactl load-module module-alsa-sink via a systemd service. On Bazzite this silently fails with "Failure: Unknown error code" because PipeWire's PulseAudio compatibility layer doesn't support that module. Your sink appears to work in testing but vanishes after every reboot. The fix is to create the sink using PipeWire's own native config.
mkdir -p ~/.config/pipewire/pipewire.conf.d
nano ~/.config/pipewire/pipewire.conf.d/ac3-sink.conf
context.objects = [
{
factory = adapter
args = {
factory.name = api.alsa.pcm.sink
node.name = TV_AC3
node.description = "TV Surround 5.1"
media.class = Audio/Sink
api.alsa.path = a52_safe
audio.channels = 6
audio.rate = 48000
}
}
]
PipeWire will create the TV_AC3 sink automatically at startup from this config file.
Without this, your receiver may click or go silent during quiet moments because it thinks the audio stream has ended. This service plays inaudible silence into the sink to keep it active.
nano ~/.config/systemd/user/ac3-keepalive.service
[Unit]
Description=Keep AC3 Output Alive with Silence
After=pipewire.service
[Service]
Type=simple
ExecStart=/usr/bin/paplay --raw --format=s16le --rate=48000 \
--channels=2 --device=TV_AC3 \
--property=media.role=background \
--latency-msec=2000 /dev/zero
Restart=always
RestartSec=5
[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now ac3-keepalive.service
systemctl --user restart pipewire pipewire-pulse wireplumber
Then check the sink exists:
pactl list short sinks
You should see TV_AC3 in the list. Set it as your default output in your audio settings, or select it per-application in PulseAudio Volume Control under the Playback tab.
Reboot and run pactl list short sinks again. TV_AC3 should still be there - PipeWire creates it automatically from the config file on every startup.
TV_AC3 doesn't appear after reboot
Check that ~/.config/pipewire/pipewire.conf.d/ac3-sink.conf exists and the syntax is correct. Then restart PipeWire with the command in Step 8.
Speaker test works but no surround in games or movies
Make sure TV_AC3 is selected as the output device - either globally in sound settings or per-application in PulseAudio Volume Control.
ALSA card number changed after reboot
This is a known issue with some systems. Run aplay -l again to find the new card and device numbers, then update ~/.asoundrc accordingly.
LG TV users
There are reports of loud white noise occurring occasionally with LG TVs from around 2017. Proceed with caution.