Willow SoftwareLinuxPractical fix

ASUS ZenBook Pro Duo UX582HS: fixing silent speakers on Ubuntu

After Ubuntu left the built-in speakers silent on my ASUS ZenBook Pro Duo UX582HS, I traced the issue to missing ALSA profiles and a Realtek ALC294 codec setting. This is the model-specific fix I confirmed, with checks, persistence steps and an undo guide.

Published 3 min readGraeme Moignard
Scroll to read
ASUS ZenBook Pro Duo 15 OLED, open with both displays visible
Ubuntu Circle of Friends logo

Linux • Practical fix

ASUS ZenBook Pro Duo UX582HS: fixing silent speakers on Ubuntu

Written by Graeme Moignard ·

After replacing Windows 11 with Ubuntu on my ASUS ZenBook Pro Duo, the built-in speakers stayed silent. Headphones worked and the volume controls looked normal, but unplugging the headphones left me with no sound. I spent a long time searching for an answer, and the advice I could find did not explain this exact hardware combination.

This is the fix I confirmed on my own UX582HS. Closely named ASUS models can use different audio hardware, so check the model and codec IDs before trying the workaround.

The fix I confirmedFrom silent speakers to working playbackOn my UX582HS, restoring the profiles was only part of the fix. The codec adjustment brought the speakers back.
  • Check the exact hardware
  • Restore ALSA profiles
  • Apply the ALC294 setting
  • Make it persistent

The laptop and software I used

ASUSTeK ZenBook Pro Duo UX582HS, DMI product name ZenBook Pro Duo UX582HS_UX582HS, BIOS UX582HS.303, Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic. Audio: Realtek ALC294, vendor 0x10ec0294, subsystem 0x10431b42, driver sof-audio-pci-intel-tgl. I installed alsa-ucm-conf 1.2.15.3-1ubuntu1.7 and alsa-tools 1.2.15-1. The problem had also existed before my Ubuntu upgrade.

What fixed it

Installing the missing ALSA profiles restored the proper speaker profile, but that alone did not make the speakers audible. On this laptop, codec coefficient 0x0f read 0x7778. Writing 0x7774 restored sound. Spotify then played through the speakers. That points to a codec routing or initialisation issue; it does not prove the complete underlying driver fault.

1. Check the hardware

Run these commands and make sure the model and codec IDs match before continuing:

cat /sys/class/dmi/id/sys_vendor
cat /sys/class/dmi/id/product_name
cat /sys/class/dmi/id/bios_version
cat /etc/os-release
uname -r
grep -H -E '^(Codec|Vendor Id|Subsystem Id):' /proc/asound/card*/codec#*

2. Restore the speaker profile

Install the ALSA packages, restart WirePlumber from your normal desktop login, then select the built-in Speakers output in Settings → Sound. Unmute it, unplug headphones and use a moderate volume. Restart playback if needed. On my laptop this restored the profile, but the next adjustment was still needed.

sudo apt update
sudo apt install alsa-ucm-conf alsa-tools
systemctl --user restart wireplumber

3. Try the adjustment temporarily

My codec appeared at /dev/snd/hwC1D0. Card numbers can differ, so confirm the path on your own system. Read and record the current value first:

sudo hda-verb /dev/snd/hwC1D0 0x20 SET_COEF_INDEX 0x0f
sudo hda-verb /dev/snd/hwC1D0 0x20 GET_PROC_COEF 0

My original value was 0x7778. This was the adjustment that brought sound back. A register readback alone is not proof; actual playback confirmed the fix on my laptop:

sudo hda-verb /dev/snd/hwC1D0 0x20 SET_COEF_INDEX 0x0f
sudo hda-verb /dev/snd/hwC1D0 0x20 SET_PROC_COEF 0x7774

4. Apply it at startup and after resume

If the temporary change restores sound, this guarded script applies it only when both the exact laptop model and codec IDs match. It discovers the ALSA card instead of assuming it is always card 1.

sudo tee /usr/local/sbin/asus-speaker-routing >/dev/null <<'EOF'
#!/bin/sh
# ASUS UX582HS / ALC294 speaker routing; verified on this laptop.
set -eu
[ "$(cat /sys/class/dmi/id/product_name)" = 'ZenBook Pro Duo UX582HS_UX582HS' ] || exit 0
exec 9>/run/lock/asus-speaker-routing.lock
flock -x 9
attempt=0
while [ "$attempt" -lt 15 ]; do
  for codec in /proc/asound/card*/codec#*; do
    [ -f "$codec" ] || continue
    grep -q '^Vendor Id: 0x10ec0294$' "$codec" || continue
    grep -q '^Subsystem Id: 0x10431b42$' "$codec" || continue
    card=${codec#/proc/asound/card}; card=${card%%/*}
    device=${codec##*codec#}
    hw=/dev/snd/hwC${card}D${device}
    [ -c "$hw" ] || continue
    /usr/bin/hda-verb "$hw" 0x20 SET_COEF_INDEX 0x0f
    /usr/bin/hda-verb "$hw" 0x20 SET_PROC_COEF 0x7774
    echo "Applied ASUS UX582HS speaker routing to $hw"
    exit 0
  done
  attempt=$((attempt + 1))
  sleep 1
done
echo 'Expected ASUS Realtek codec unavailable' >&2
exit 1
EOF
sudo chmod 0755 /usr/local/sbin/asus-speaker-routing

Create the systemd service and resume hook

sudo tee /etc/systemd/system/asus-speaker-routing.service >/dev/null <<'EOF'
[Unit]
Description=ASUS UX582HS internal speaker routing fix
After=sound.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/asus-speaker-routing
RemainAfterExit=yes
TimeoutStartSec=25
[Install]
WantedBy=multi-user.target
EOF
sudo install -d /usr/lib/systemd/system-sleep
sudo tee /usr/lib/systemd/system-sleep/asus-speaker-routing-resume >/dev/null <<'EOF'
#!/bin/sh
case "$1" in
  post) /usr/bin/systemctl --no-block restart asus-speaker-routing.service ;;
esac
EOF
sudo chmod 0755 /usr/lib/systemd/system-sleep/asus-speaker-routing-resume

Validate and enable the service

The service is a one-shot adjustment, so active (exited) is expected. Check its startup log with:

sudo sh -n /usr/local/sbin/asus-speaker-routing
sudo sh -n /usr/lib/systemd/system-sleep/asus-speaker-routing-resume
sudo systemctl daemon-reload
sudo systemd-analyze verify /etc/systemd/system/asus-speaker-routing.service
sudo systemctl enable --now asus-speaker-routing.service
sudo systemctl status asus-speaker-routing.service --no-pager
sudo journalctl -u asus-speaker-routing.service -b --no-pager

What I confirmed, and what remains to check

I confirmed speaker playback by listening to Spotify after the codec change. I enabled the startup service and it ran successfully; the shell scripts and systemd unit passed their checks. I have not yet confirmed a real reboot, suspend/resume cycle or headphone plug/unplug behaviour after installing the hooks. Please check those on your machine before relying on them.

Undo the workaround

Disable the service and remove the three files created for it:

sudo systemctl disable --now asus-speaker-routing.service
sudo rm -- /usr/local/sbin/asus-speaker-routing
sudo rm -- /etc/systemd/system/asus-speaker-routing.service
sudo rm -- /usr/lib/systemd/system-sleep/asus-speaker-routing-resume
sudo systemctl daemon-reload

Stopping the service does not restore the codec value already written. On my laptop I can temporarily restore the recorded original value like this. Use your own recorded value and verified codec path if they differ. Leave the standard Ubuntu ALSA packages installed.

sudo hda-verb /dev/snd/hwC1D0 0x20 SET_COEF_INDEX 0x0f
sudo hda-verb /dev/snd/hwC1D0 0x20 SET_PROC_COEF 0x7778

This finally brought back the speakers that had been silent throughout my Ubuntu installation. If you have the same UX582HS hardware and symptom, checking the profiles and output selection first, then testing this targeted codec change, gave me a clear route to a working result.

More from Willow Software

Browse the full blog index for Salix Monitor 360 updates, security notes and web development articles.

Open blog index