Pulseaudio: ждать устройств на старте?

799
fstanis

Основываясь на этом руководстве, я настроил pulseaudio на своем Raspberry Pi для работы в системном режиме. Вот как выглядит мой файл службы systemd:

[Unit] Description=PulseAudio Daemon After=sound.target Requires=sound.target  [Install] WantedBy=default.target  [Service] Type=notify ExecStart=/usr/bin/pulseaudio --disallow-exit --no-cpu-limit --daemonize=no --system --realtime --disallow-module-loading --log-target=journal -vvvv 

Тем не менее, я не получаю никакого звука - согласно журналам, когда Pulseaudio запускается, Udev-Detect сообщает "Найдено 0 карт". и я получаю только нулевую раковину. Запуск systemctl --system restart pulseaudio.serviceисправляет это, и мое аудиоустройство правильно обнаружено.

Есть ли какой-либо способ сказать pulseaudio ждать, пока устройство не будет обнаружено?

3

1 ответ на вопрос

6
grawity

Сказать, что PulseAudio не будет очень полезным. Он уже может самостоятельно распознавать устройства с горячим подключением; однако, из-за --disallow-module-loadingэтого больше не может использовать устройства, так как запрещено загружать module-alsa-cardпосле обнаружения устройства. (Возможно, module-udev-detect должно быть освобождено от этого ограничения…)

Вы можете указать systemd отложить запуск pulseaudio.service до тех пор, пока конкретное устройство не будет готово, перечислив соответствующее .deviceимя устройства в этом устройстве After=, например:

[Unit] After=sys-devices-pci0000:00-0000:00:1b.0-sound-card0.device 
Ах, как раздражает - даже не догадывался, что `--disallow-module-loading` является виновником. Просто удалить это кажется легким. fstanis 6 лет назад 1
Быстрое обновление: добавление звукового устройства в `After` не имеет смысла, если у меня уже есть` sound.target` - получается, что на всех звуковых устройствах есть `sound.target` в` Wants` согласно `systemd-analysis`. fstanis 6 лет назад 0
Возможно, что еще важнее, `alsa-restore.service` должен быть в` After` - таким образом, я могу загрузить alsa напрямую и в первую очередь мне не нужно обнаружение устройств. fstanis 6 лет назад 0
Но у них этого нет под «До», не так ли? В любом случае, это ** не ** то, для чего `sound.target` - что-либо вроде« все звуковые устройства были обнаружены »невозможно реализовать в горячей заменяемой системе в любом случае. Целью является запуск _userspace_ компонентов звука, и действительно, кажется, что PulseAudio должен иметь Before = sound.target, а не After =. grawity 6 лет назад 0
Интересно - но моя (гипотетическая) цель состоит в том, чтобы иметь возможность загружать импульсы при запуске с помощью `--disallow-module-loading` - кажется, что ALSA - это то, чего я должен ждать, если я не неправильно понимаю что-то еще? Настройка hotpluggable работает, но мне нужно удалить `--disallow-module-loading` - в этом случае, я предполагаю, что` sound.target` должен находиться только в `Требуется`, и его не нужно иметь в` After`? fstanis 6 лет назад 0
Нет смысла ждать ALSA "в целом". (Вся инициализация устройства происходит в ядре; `alsa-restore.service` просто загружает уровни громкости с диска на _already-обнаружено_ аудиоустройства.) Если вы вручную конфигурируете PA 'module-alsa-card`, все, что вам нужно ждать, это само устройство карты. grawity 6 лет назад 0
Итак, проблема здесь в том, что module-alsa-card требуется параметр устройства, а `load-module module-alsa-card device = 0` приводит к сбою импульса с ошибкой, говорящей о том, что устройство не существует. Любое понимание? fstanis 6 лет назад 0

Похожие вопросы