Почему аудио не работает под root в Ubuntu Server 24.04.2: решение проблем

Если вы запускаете аудиоприложения (вроде Plexamp или speaker-test) на Ubuntu Server 24.04.2 под root или как сервис, но получаете ошибку «Playback open error: -112, Host is down» – это не единичный случай. Проблема часто возникает после обновлений или случайных изменений в конфигурации. Давайте разберёмся, почему звуковая система «капризничает» именно при работе с повышенными правами.

Когда ALSA, PulseAudio и Pipewire конфликтуют

Первое, что стоит проверить – не «перетягивают ли одеяло» разные аудиодвижки. В Ubuntu Server по умолчанию используется PulseAudio, но иногда (особенно после экспериментов с пакетами) может незаметно установиться Pipewire. В этом случае Pipewire перехватит управление звуком, но не корректно будет работать с правами root.

Чтобы выявить «виновника», выполните:

systemctl --user status pipewire pulseaudio

Если Pipewire активен, а PulseAudio – нет, это явный признак конфликта.

Кстати, Pipewire – современная альтернатива PulseAudio, но в серверных сценариях его настройка часто требует дополнительных танцев с бубном.

Шаги для восстановления PulseAudio

1. Удалите Pipewire (если он не нужен):

sudo apt remove pipewire pipewire-audio-client-libraries

После этого apt автоматически переключится на PulseAudio.

2. Перезагрузите сервисы:

sudo systemctl restart alsa-restore
systemctl --user restart pulseaudio

3. Проверьте аудиоустройства:

speaker-test -D default -c 2 -t wav

Если слышите тестовый звук – проблема решена.

Настройка индексов звуковых карт

Если в конфиге /etc/modprobe.d/default.conf у вас указано options snd_hda_intel index=1. Это заставляет систему использовать вторую карту (индексы начинаются с 0). Но если карта с индексом 1 недоступна для root (например, из-за прав), возникает ошибка.

Попробуйте:

1. Сменить индекс на 0:

echo "options snd_hda_intel index=0" | sudo tee /etc/modprobe.d/snd-hda-intel.conf

2. Обновите initramfs:

sudo update-initramfs -u

После перезагрузки проверьте вывод cat /proc/asound/cards – первая карта должна быть активной.

Почему root и пользователь ведут себя по-разному?

Обычно это связано с переменными окружения и настройками уровня системы:

  • PulseAudio по умолчанию запускается в пользовательской сессии, а root его не видит.
  • Pipewire мог быть настроен с ограничениями SELinux или AppArmor (да, в Ubuntu они тоже есть, хоть и минимальные).

Совет: Если хотите запускать аудиосервисы от root, добавьте явное указание использовать PulseAudio:

export PULSE_SERVER=unix:/run/user/$(id -u)/pulse/native

(замените $(id -u) на ID вашего пользователя).

Если ничего не помогло

1. Убедитесь, что пользователь и root в группе audio:

groups root
groups your_username

Если нет – добавьте:

sudo usermod -aG audio root

(перелогиньтесь или перезапустите сервисы).

2. Проверьте права на /dev/snd/*:

ls -l /dev/snd

Должны быть crw- права для группы audio.

Иногда проблема уходит после полного сброса аудионастроек:

sudo apt purge alsa-base pulseaudio
sudo apt install alsa-base pulseaudio
sudo alsa force-reload

И помните: Ubuntu Server всё же не предназначен для сложных аудиозадач. Если нужно стабильное воспроизведение, рассмотрите вариант с Docker-контейнером, где аудио пробрасывается через –device /dev/snd. Но это уже тема для отдельного разговора.

Новое
Интересное