NVIDIA и PipeWire: HDMI-звук через видеокарту
Видеокарта NVIDIA умеет отдавать звук по HDMI не хуже встроенной звуковой карты: в ней есть собственный аудиоконтроллер, и система видит его как обычное HDA-устройство. Проблема начинается, когда карта есть, а в PipeWire нет ни одного HDMI-sink, или он есть, но звук уходит в колонки ноутбука. Разбираемся, где искать устройство, как задать профиль и что делать, если звук исчезает после сна.
Как устроен HDMI-звук на видеокарте
Внутри любой дискретной карты, включая NVIDIA, есть аудиоконтроллер High Definition Audio. Он умеет только одно: передавать цифровой поток по HDMI или DisplayPort на кодек телевизора или монитора, который уже превращает его в аналоговый звук. Никаких колонок и микрофонов на карте нет, поэтому в системе появляется ровно один выход типа «цифровой стерео», а в списке устройств есть строчка с именем самой видеокарты.
Дальше цепочка выглядит так: аудиоконтроллер карты → модуль ядра snd_hda_intel с HDMI-кодеком snd_hda_codec_hdmi → ALSA → PipeWire → профиль устройства в WirePlumber. Сломанное звено может быть в любом месте, поэтому диагностика идёт снизу вверх.
Как проверить, что видеокарта вообще отдаёт звук
Первый вопрос: видит ли система аудиоконтроллер карты. Смотрится это так:
lspci | grep -iE "audio controller|multimedia"
cat /proc/asound/cards
aplay -l
В выводе должны быть две карты: встроенная HDA Intel и отдельная NVIDIA. Если аудиоконтроллер есть в PCI, но карты в /proc/asound/cards нет, проблема в ядре, проверь модули и параметры:
lsmod | grep -E "snd_hda_intel|snd_hda_codec_hdmi"
dmesg | grep -iE "snd_hda|hdmi" | tail -20
Второй вопрос: создал ли PipeWire устройство. Список в реальном времени:
wpctl status
wpctl list-sinks
Здесь стоит знать особенность именования: HDMI-выход часто называется alsa_output.pci-0000_01_00.1.analog-stereo, то есть с удивлением слово «analog», хотя поток цифровой. Это историческое имя в ALSA, пугаться не нужно. Если вместо списка видно Sinks: no sinks found, проверь, что сервисы вообще запущены:
systemctl --user status pipewire pipewire-pulse wireplumber
Почему устройство есть, а звука нет?
Самые частые причины, по возрастанию частоты:
- Sink в статуме idle или недоступен. Пока к HDMI не подключён монитор с аудио, PipeWire не может создать рабочий выход. Подключи экран, и устройство появится само.
- Не задан профиль. У нового устройства профиль
off, пока не выбран цифровой выход. Звук при этом полностью отсутствует, а само устройство в списке есть. - По умолчанию выбран встроенный выход. WirePlumber смотрит на то, что доступно: если HDMI-сink в паузе или не проигрывает ничего, дефолтом остаются динамики ноутбука.
- В потоке зашит другой выход. Приложение играет в устройство, которое ты переименовал или отключил, а PipeWire молча уводит звук туда, где остался дефолт.
- Монитор не переключился на вход с ПК. Про HDMI надо помнить: звук и картинка идут по разным кнопкам на телевизоре, и вход может быть переключён на брадзер или антенну.
- Модуль выгрузки энергосбережения. HDA-контроллеры любят засыпать, и после пробуждения кодек не просыпается.
Быстрая проверка журнала, если ничего из перечисленного не подходит:
journalctl --user -b | grep -iE "pipewire|wireplumber|alsa|hdmi" | tail -40
journalctl -k -b | grep -iE "snd_hda|nvidia" | tail -20
И не путай две разные поломки: если не работает сам HDMI-выход, то нет ни картинки, ни звука, и лечится это совсем в другом месте: про режимы вывода, DRM и modesetting написано в статье про DisplayPort и HDMI на NVIDIA.
Как задать профиль HDMI-выхода
Профиль живёт не в PipeWire, а в списке ALSA, и PipeWire показывает его как есть. Посмотреть варианты можно в wpctl status в секции Sinks, а задать можно одной командой:
wpctl status
wpctl set-profile 47 output:hdmi-stereo
wpctl set-default 47
wpctl set-volume 47 0.60
47 это числовой идентификатор sink из вывода. Кроме output:hdmi-stereo встречаются профили output:hdmi-surround51, output:hdmi-surround71 и обычный output:stereo, который в мире PipeWire означает аналоговые колонки. Выбирай тот, который поддерживает твой монитор: у телевизора с наушниками на борту многоканальный профиль может оказаться лишним.
В сессии Wayland набор команд не меняется, при условии что сессия собрана правильно: без работающего compositor устройства и профили не появятся, и тогда сначала чинится видео, а не звук: как запустить такую сессию, описано в статье про включение Wayland с NVIDIA.
Грамотный способ это pavucontrol: там есть вкладка Configuration с выпадающим списком профилей и вкладка Output Devices, где устройство перетаскивается вверх и нажимается Set as Default. Для PulseAudio, если он остался в системе, команды такие же через pactl:
pactl list short sinks
pactl set-sink-profile alsa_output.pci-0000_01_00.1.analog-stereo output:hdmi-stereo
pactl set-default-sink alsa_output.pci-0000_01_00.1.analog-stereo
Как настроить автопереключение при подключении телевизора
WirePlumber умеет сам переезжать на HDMI, как только монитор с аудио появился, и возвращаться к колонкам, когда его отключили. По умолчанию это работает, если HDMI-sink называется «лучшим» для вывода, а вот фиксировать его вручную не стоит: тогда ноутбук останется без звука в поездке.
Что стоит проверить и настроить:
- В
pavucontrolили в настройках звука рабочего стола отметь HDMI-устройство как устройство по умолчанию для вывода, иначе ручное правило перебьёт автоматику. - В панели GNOME или Plasma оставь включённым автоматическое переключение на активный выход, если такая опция есть в версии твоей среды.
- Тонкая настройка маршрутов живёт в конфигурации WirePlumber: пакет
wireplumber-configкладёт примеры Lua-файлов в/etc/wireplumber/, где описаны политики выбора устройства. - Если поток уезжает не туда, проверь вкладку Streams в
pavucontrol: у каждого приложения можно принудительно выбрать устройство.
Отдельная деталь про соединение: если ноутбук и монитор соединены конвертером или док-станцией, звук может не появиться вообще, потому что конвертер не передаёт аудиоканал. Тогда в списке устройств HDMI не будет вовсе, и настройками это не лечится.
Что делать, если звук пропадает после сна
Самая противная ситуация: до блокировки звук есть, после возвращения из сна HDMI молчит или вообще исчезает из списка. Порядок действий такой.
Перезапустить сессию звука это самый быстрый шаг, он ничего не ломает:
systemctl --user restart wireplumber
systemctl --user status wireplumber
wpctl status
Переназначить устройство дефолтным заново:
wpctl set-default 47
wpctl set-profile 47 output:hdmi-stereo
Включить persistence mode у драйвера NVIDIA, чтобы карта не теряла состояние при засыпании и просыпалась быстрее:
sudo nvidia-smi -pm 1
Более глубокая причина часто в агрессивном энергосбережении HDA-контроллеров. Параметр модуля отключает засыпание аудиокодека, и обрывов становится заметно меньше:
echo "options snd_hda_intel power_save=0" | sudo tee /etc/modprobe.d/sound.conf
sudo mkinitcpio -P
Если звук оживает только после переподключения кабеля, значит, просыпается HDMI-кодек монитора, и лечится это принудительным переподключением устройства:
wpctl set-default 47
Если же вместо тишины слышен треск, это уже не пробуждение, а рассинхронизация: клики, повторы, звук не совпадает с картинкой. Помогает принудительная переинициализация потока: закрой и запусти звучащее приложение снова либо перезапусти сессию. Про настройки самой карты и её питания в покое я писал в статье про перегрев NVIDIA и Coolbits: если видеокарта не спит и постоянно активна, сон и HDMI ведут себя заметно хуже.
Как проверить финальный результат
Проверяется всё в три шага, и каждый вывод должен быть осмысленным:
wpctl status # в Sinks есть устройство с активным профилем
aplay -l # карта NVIDIA на месте, есть устройство HDMI
speaker-test -c 2 -D default # из колонок идут звуки пробуждения
Если speaker-test молчит, а в wpctl status sink отмечен как активный, переключи приёмник на нужный вход HDMI. Если в секции Sinks устройства нет вовсе, возвращайся к проверке aplay -l и журналу ядра: проблема ниже PipeWire. Порядок установки самого драйвера, если устройство пропало после обновления системы, разобран в статье про драйвер NVIDIA на Arch Linux.
Частые вопросы
В списке устройств только встроенный звук, NVIDIA не видно
Проверь lspci | grep -i audio: если контроллер есть в PCI, а в cat /proc/asound/cards его нет, дело в ядре. Убедись, что snd_hda_intel и snd_hda_codec_hdmi загружены, нет ли их в blacklist, и посмотри dmesg на предмет ошибок загрузки. Отдельно проверь, не выключен ли в UEFI режим вывода звука через видеокарту.
Sink есть, но звук идёт через встроенные динамики
Дефолтом назначен другой выход, либо конкретный поток направлен в колонки. Сделай HDMI устройством по умолчанию в wpctl set-default и проверь вкладку Streams в pavucontrol, где у каждого приложения выбирается устройство принудительно.
У монитора есть HDMI-вход, но звука нет
Проверь две вещи: вход телевизора переключён на тот порт, к которому подключён ноутбук, и громкость на самом мониторе не в ноль. Про HDMI стоит помнить, что он передаёт картинку и звук независимо, поэтому сломанное аудио не означает сломанную картинку.
Можно ли выводить звук на наушники и HDMI одновременно
В GNOME и Plasma есть режим одновременного вывода, и в pavucontrol можно перенаправить отдельный поток на другое устройство, а остальные оставить на HDMI. В PipeWire это собирается из профилей и модулей, но проще встроенный переключатель среды: он не ломает маршрутизацию.
Нужен ли профиль surround51 вместо hdmi-stereo
Выбирай по возможностям монитора. Если у телевизора только стерео или он подключён по устаревшей схеме, многоканальный профиль ничего не добавит, зато иногда ухудшает стабильность потока. Начни с output:hdmi-stereo, а если звук с искажениями, попробуй следующий доступный профиль.
Полезные ресурсы
- ArchWiki: PipeWire: конфигурация, WirePlumber, маршрутизация и отладка.
- ArchWiki: Advanced Linux Sound Architecture: устройства, модули
snd_hda, энергосбережение кодеков.
Заключение
HDMI-звук NVIDIA это отдельное HDA-устройство, которое почти всегда видно в ALSA, а PipeWire лишь отображает его как sink с профилем. Проверяй цепочку снизу вверх, начиная с lspci и aplay -l, держи профиль output:hdmi-stereo на устройстве, и после сна просто перезапускай сессию звука, не переустанавливая ничего.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии