You plug in your HDMI cable, the display mirrors perfectly, and then you realize your audio is still coming from the laptop speakers. If you are dealing with HDMI audio not working on Linux, you are not alone. This is one of the most common issues Linux users face when connecting to a TV or external monitor.
The good news is that the fix is usually straightforward once you know where to look. I have spent years helping people in the Eglug community troubleshoot this exact problem across Ubuntu, Fedora, Debian, Arch, and Linux Mint. The solutions range from a simple settings toggle to installing specific firmware packages.
This guide walks you through every step, starting with the quick checks that solve most cases and moving into advanced fixes like Intel SOF firmware installation and GRUB kernel parameters. I will cover both PulseAudio and PipeWire, because many distributions switched sound servers recently and most older guides only address one.
By the end, you will have a complete troubleshooting toolkit that works across distributions and hardware generations.
Table of Contents
Why HDMI Audio Breaks on Linux?
Linux handles audio through a layered stack, and understanding that stack helps you diagnose problems faster. At the kernel level, ALSA (Advanced Linux Sound Architecture) drivers communicate with your hardware. Above that sits a sound server, either PulseAudio or PipeWire, which manages audio routing between applications and output devices.
When you connect an HDMI display, ALSA should detect the HDMI audio output as a new sound device. Your sound server then makes it available as an option in your volume control settings. The problem is that this chain breaks at different points depending on your hardware, driver, and configuration.
Sometimes the kernel module does not recognize HDMI audio at all. Other times the device appears but is muted at the ALSA level, or the sound server keeps routing audio to your built-in speakers instead of switching automatically.
Intel 11th generation and newer processors add another layer of complexity. These chips use the Sound Open Firmware (SOF) driver, and many distributions do not install the required firmware package by default. Without it, HDMI audio simply does not appear as an option.
Secure Boot can also block unsigned audio drivers from loading, which is a common surprise for users who enabled it during installation and never thought about it again.
Quick Checks Before You Dig In
Before touching any terminal commands, run through these quick checks. They sound obvious, but they solve a surprising number of cases.
First, verify your HDMI cable is firmly seated at both ends. A loose connection can carry video perfectly but drop the audio channel. Try unplugging and reconnecting the cable to force a fresh handshake between your computer and the display.
Second, try a different HDMI port on your TV or monitor. Some ports on TVs are labeled as DVI-compatible and intentionally strip the audio signal. Check your TV manual if you are unsure which ports support audio.
Third, swap the cable itself. Older or damaged HDMI cables can fail to carry audio even when video works fine. A HDMI 2.0 or newer cable is a safe bet for testing.
Fourth, make sure your TV or monitor is not muted. Many displays have their own volume control separate from your computer. Use the TV remote to turn up the volume and confirm the display expects audio over HDMI.
Fifth, disconnect any other audio devices. Bluetooth headphones, USB audio interfaces, or external DACs can sometimes grab the default output and prevent HDMI from taking over.
Step 1: Select HDMI as Your Output Device
The most common fix for HDMI audio not working on Linux is simply selecting the right output device. Linux does not always switch audio to HDMI automatically when you plug in a display.
On GNOME (Ubuntu, Fedora), open Settings and navigate to the Sound section. Look for the Output device dropdown. If your HDMI display is listed, select it. You should see the option labeled with your display name or something like Digital Stereo (HDMI).
On KDE Plasma (Kubuntu, openSUSE, Manjaro KDE), right-click the speaker icon in your system tray and select Audio Volume Settings. Under the Devices tab, find your HDMI output and set it as the default by clicking the checkmark icon.
If the HDMI output does not appear in your settings at all, move on to the next steps. That usually means the issue is deeper than a simple selection problem.
Step 2: Unmute HDMI in Alsamixer
ALSA has its own mute controls that sit below your desktop sound server. If HDMI is muted at the ALSA level, your volume settings will look correct but no sound will come out. This is a frequent cause of Linux HDMI sound not working.
Open a terminal and launch alsamixer:
alsamixer
Press F6 to open the sound card selection menu. Look for an entry that includes HDA Intel or your HDMI device name. Select it.
Press F3 to switch to the Playback view. You will see vertical bars representing different channels. Look for anything labeled S/PDIF or HDMI. If you see the letters MM at the bottom of a bar, that channel is muted.
Use the left and right arrow keys to navigate to the muted HDMI channel. Press the M key to unmute it. The MM will change to OO, indicating the channel is now active. Use the up arrow to raise the volume if the bar is at zero.
Press Esc to exit alsamixer. Save your settings so they persist across reboots:
sudo alsactl store
Test your audio. If you still hear nothing, continue to the next step.
Step 3: Restart Your Audio Server (PulseAudio or PipeWire)
Sometimes the sound server gets stuck on the old output device after you connect HDMI. Restarting it forces a fresh scan of available audio devices. The command depends on whether your system uses PulseAudio or PipeWire.
First, check which sound server is running. Run this command:
pactl info | grep "Server Name"
If the output says PulseAudio (usually just “PulseAudio” or “pulseaudio”), restart it with these commands:
pulseaudio -kpulseaudio --start
If you get an error that no PulseAudio daemon is running, PipeWire is likely your sound server. PipeWire uses a compatibility layer called WirePlumber or pipewire-media-session to manage devices. Restart both PipeWire and WirePlumber:
systemctl --user restart pipewire pipewire-pulsesystemctl --user restart wireplumber
On older systems using pipewire-media-session instead of WirePlumber, run:
systemctl --user restart pipewire pipewire-pulse pipewire-media-session
Ubuntu 24.04, Fedora 39 and later, and recent Arch Linux installs all use PipeWire by default. Linux Mint 21 and earlier still use PulseAudio, though newer versions are transitioning. Knowing which one you have saves you from running commands that do nothing.
After restarting, check your sound settings again to see if the HDMI output now appears.
Step 4: Use Pavucontrol to Force HDMI Output
Pavucontrol (PulseAudio Volume Control) gives you more granular control over audio routing than the default GNOME or KDE settings. It works with both PulseAudio and PipeWire, making it one of the most reliable tools for fixing HDMI audio issues.
Install pavucontrol using your distribution package manager:
Ubuntu, Debian, Linux Mint: sudo apt install pavucontrol
Fedora: sudo dnf install pavucontrol
Arch Linux: sudo pacman -S pavucontrol
Launch it from your application menu or by typing pavucontrol in a terminal.
Go to the Configuration tab at the top. You will see a profile dropdown for each audio device. For your built-in audio card, look for a profile that includes HDMI, such as Digital Stereo (HDMI) Output. Select it.
If you see multiple HDMI profiles (HDMI 1, HDMI 2, etc.), try each one. Different HDMI ports on multi-monitor setups map to different profile entries.
Next, switch to the Output Devices tab. Find the HDMI output in the list. Click the checkmark or set-as-fallback button to make it the default device. Make sure the mute button is not active and the volume slider is up.
Finally, go to the Playback tab. If an application is currently playing audio, you can select which device it outputs to from a dropdown next to the application name. Choose the HDMI output there.
Many users report that pavucontrol shows HDMI options that the default GNOME sound settings do not. If your HDMI device was hidden before, this step often reveals it.
Step 5: Install Intel SOF Firmware (Intel 11th Gen and Newer)
If you have an Intel 11th generation Tiger Lake processor or newer and HDMI audio does not appear at all, you are almost certainly missing the Sound Open Firmware (SOF) package. This is one of the most reported issues in Linux audio forums, and it is completely fixable.
Intel 11th gen and later chips use the SOF driver instead of the legacy HDA driver for audio processing. Without the firmware binary, the driver loads but cannot initialize the audio hardware. The result is that HDMI audio is completely invisible to your system.
Install the firmware package for your distribution:
Ubuntu, Debian, Linux Mint: sudo apt install firmware-sof-signed
Fedora: sudo dnf install sof-firmware
Arch Linux: sudo pacman -S sof-firmware
After installing the firmware, reload the audio kernel modules:
sudo modprobe -r snd_hda_intelsudo modprobe snd_hda_intel
You may also need to tell the kernel to use the SOF driver explicitly. Create a modprobe configuration file:
echo "options snd-intel-dspcfg dsp_driver=1" | sudo tee /etc/modprobe.d/sof.conf
The dsp_driver parameter accepts several values. Use 1 to force the SOF driver, which is correct for most 11th gen and newer Intel systems. Use 3 to force the legacy SOF driver if value 1 does not work. Use 0 for the default auto-detection.
After making these changes, reboot your system. A simple module reload is often not enough because the SOF firmware loads during early boot. After rebooting, check whether HDMI audio appears in your sound settings.
If you still do not see HDMI audio after this step, the GRUB kernel parameter fix in the next section addresses the remaining edge cases.
Step 6: Add GRUB Kernel Parameters for a Permanent Fix
When module-level fixes do not stick, adding kernel parameters through GRUB gives you a persistent solution. This method works across reboots and suspend cycles, making it the go-to fix for stubborn HDMI audio issues.
Open the GRUB configuration file:
sudo nano /etc/default/grub
Find the line that starts with GRUB_CMDLINE_LINUX_DEFAULT. It will look something like this:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Add the appropriate parameters inside the quotes. The most common one for HDMI audio issues on Intel systems is:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash snd_intel_dspcfg.dsp_driver=1"
For NVIDIA systems where HDMI audio is not detected, add:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia-drm.modeset=1"
Some users on AMD systems with HDMI audio problems have found success adding:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.dc=1"
Save the file and exit the editor (Ctrl+O, Enter, Ctrl+X in nano).
Now update GRUB so the changes take effect:
Ubuntu, Debian, Linux Mint: sudo update-grub
Fedora: sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Arch Linux: sudo grub-mkconfig -o /boot/grub/grub.cfg
Reboot your system. The kernel parameters will load automatically on every boot, giving you a reliable permanent fix for HDMI audio detection.
Check BIOS/UEFI and Secure Boot Settings
Your system firmware can prevent HDMI audio from working at a level that no Linux configuration can override. Two settings in particular cause problems.
First, check that onboard audio is enabled in your BIOS/UEFI. Some motherboards ship with HD Audio Controller disabled by default, especially on certain Gigabyte and MSI boards. Reboot, enter your BIOS or UEFI settings, and look for the onboard audio or HD Audio option under Integrated Peripherals or Advanced settings. Make sure it is set to Enabled.
Second, check Secure Boot. Secure Boot verifies that all loaded kernel modules are signed with a trusted key. Some audio drivers, particularly third-party or community-built modules, are unsigned and get silently blocked by Secure Boot.
One Linux Mint user in the forums put it bluntly: if you are having HDMI audio issues or GUI glitches, try turning off Secure Boot. This is not theoretical. I have seen cases where HDMI audio works perfectly with Secure Boot disabled and completely disappears when it is enabled.
To disable Secure Boot, enter your UEFI settings, find the Secure Boot option under the Security or Boot tab, and set it to Disabled. You may need to set a supervisor password first on some systems to access this option.
After disabling Secure Boot, boot into Linux and check whether your HDMI audio devices now appear.
HDMI Audio After Suspend vs Cold Boot
A particularly frustrating variant of this problem is when HDMI audio works after a cold boot but fails after resuming from suspend. An Intel NUC user described it perfectly: each time the system wakes from sleep, HDMI audio stops working, but replugging the cable fixes it.
This happens because the audio driver does not properly reinitialize the HDMI connection after resume. The display comes back, but the audio channel handshake is not renegotiated.
The quick workaround is to replug the HDMI cable after resume. That forces a fresh handshake and restores audio. But that gets old fast.
For a more permanent solution, you can configure your audio server to restart automatically on resume. Create a systemd drop-in override:
sudo nano /etc/systemd/system/systemd-suspend.service.d/restart-audio.conf
Add the following content to restart PipeWire services after resume:
[Service]
ExecStartPost=/bin/sleep 2
ExecStartPost=/usr/bin/runuser -u yourusername -- systemctl --user restart pipewire pipewire-pulse wireplumber
Replace yourusername with your actual username. This gives the display 2 seconds to reconnect after resume, then restarts the audio stack to pick up the HDMI device.
If the problem persists, adding the kernel parameter snd_hda_intel.power_save=0 to your GRUB configuration can prevent the audio chip from entering a low-power state that fails to wake up properly.
How to Fix HDMI Audio Not Working on Linux: Troubleshooting Flowchart
When you are stuck, follow this decision tree to narrow down the problem systematically. Each step tells you what to check and where to go next based on what you find.
1. Does HDMI audio appear in your sound settings?
If yes, select it. If no sound, go to step 2. If HDMI does not appear at all, skip to step 4.
2. Is HDMI unmuted in alsamixer?
Run alsamixer, press F6, check for MM on HDMI channels. Unmute them. If still no sound, go to step 3.
3. Restart your audio server.
Restart PulseAudio or PipeWire using the commands from Step 3 above. If HDMI still produces no sound, use pavucontrol (Step 4) to check the profile and routing.
4. Is your processor Intel 11th gen or newer?
If yes, install SOF firmware (Step 5) and reboot. This is the fix for most modern Intel systems. If you have an older Intel chip or AMD, continue to step 5.
5. Add GRUB kernel parameters.
Apply the appropriate kernel parameter for your GPU vendor (Step 6) and reboot. If HDMI audio still does not appear, proceed to step 6.
6. Check BIOS and Secure Boot.
Verify onboard audio is enabled in BIOS/UEFI. Try disabling Secure Boot. Reboot and test.
7. Still stuck?
Check your kernel version with uname -r. Updating to a newer kernel often resolves HDMI audio issues on recently released hardware. On Arch, this means updating your system. On Ubuntu, you can install a newer HWE kernel.
Frequently Asked Questions
Why isn’t my HDMI audio working on Linux?
HDMI audio on Linux usually fails because the system keeps routing sound to your built-in speakers instead of the HDMI display. Common causes include the HDMI output not being selected in sound settings, HDMI being muted at the ALSA level, missing SOF firmware on Intel 11th gen and newer processors, or Secure Boot blocking unsigned audio drivers.
How to enable HDMI audio with Linux?
Open your sound settings, look for the HDMI or Digital Stereo HDMI output option, and select it. If it does not appear, install pavucontrol, go to the Configuration tab, and select an HDMI profile. For Intel 11th gen and newer systems, install the firmware-sof-signed (Ubuntu/Debian) or sof-firmware (Fedora/Arch) package and reboot.
Why is there no sound after connecting HDMI cable to monitor?
Linux does not always switch audio output to HDMI automatically when you connect a display. Check your sound settings to see if HDMI is listed as an output device and select it manually. If HDMI is not listed, the cable may be loose, the ALSA channel may be muted, or you may need to install firmware or kernel drivers depending on your hardware.
Why is HDMI sound not coming through TV?
Your TV may have its own volume set to zero or muted. Use the TV remote to raise the volume. Also check that you are using an HDMI port that supports audio, since some TV ports are DVI-compatible and strip audio. Finally, verify in pavucontrol that the correct HDMI profile and output device are selected on your Linux system.
Conclusion
Fixing HDMI audio not working on Linux comes down to working through a clear sequence of checks. Start with selecting HDMI in your sound settings and unmuting it in alsamixer. Then restart your audio server, whether it is PulseAudio or PipeWire. Use pavucontrol for finer control if the default settings fall short.
For Intel 11th generation and newer systems, installing the SOF firmware package is often the missing piece. Adding GRUB kernel parameters gives you a permanent fix that survives reboots. And checking BIOS settings and Secure Boot catches the hardware-level problems that no software configuration can solve.
The troubleshooting flowchart gives you a systematic path to follow if you get stuck at any point. Work through it step by step, and you will resolve your HDMI audio issue in the vast majority of cases.