Bazzite Linux / Audio / Guide

Getting 5.1 Surround Sound Working over HDMI ARC

Dolby Digital AC3 transcoding on Bazzite with PipeWire - including the fix that most guides miss.

Bazzite PipeWire HDMI ARC AC3 / Dolby Digital June 2026

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.

1

Install the AC3 encoder plugin

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.

2

Find your HDMI audio device

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.

3

Release the HDMI device in PulseAudio Volume Control

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.

4

Create the ALSA config

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.

5

Test the encoder

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.

6

Create the PipeWire sink

This is the step most guides get wrong. The usual advice is to run 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.

7

Create a keepalive service (recommended)

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
8

Restart PipeWire and verify

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.

9

Reboot and confirm

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.

Done. You should now have Dolby Digital 5.1 output over HDMI ARC that survives reboots.

Troubleshooting

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.