Ошибка "Не удалось открыть аудиовыход" при попытке отправить аудио с mpd в pulseaudio
Когда я пытаюсь играть в mpd через pulseaudio, mpd.log сообщает:
pulse_output: не удалось включить "Pink ROCKI" [pulse]: pa_context_connect() не удалось: соединение отклонено
- Похоже, что Pulse работает нормально, поскольку приемники списка pacmd отображают все мои приемники импульсов, звук браузера meb нормально воспроизводится через приемник по умолчанию, а VLC может воспроизводить звук через любой из них.
- MPD работает нормально, если я посылаю вывод через Alsa вместо импульса
- И mpd, и pulseaudio работают под моей учетной записью (Фред).
- fred, mpd и pulseaudio - все члены групп импульсов, импульсного доступа и аудио.
- Я даже пробовал это с различными сборками pulseaudio: 4.0, который поставляется с Ubuntu 14.04, экспериментальный RAOP2, созданный с импульсом 4.0, и экспериментальный RAOP2, построенный с импульсом 5.0. mpd не будет работать ни с одним из них.
Мой файл mpd.conf ванильный; импульсная секция является общей:
audio_output {
type "pulse"
name "General Pulse"
}
Хотя, как подсказывает laugeo ниже, я также попытался указать индивидуальный приемник, оба по имени:
audio_output {
type "pulse"
name "ROCKI"
sink "raop_output.ASAP1826T.local"
}
и по индексу №:
audio_output {
type "pulse"
name "ROCKI"
sink "4"
}
Что я должен попробовать дальше? Может ли помочь настройка pulseaudio для работы в качестве системной службы?
Это на Ubuntu 14.04, pulseaudio 4.0 (и 5.0), Music Player Daemon 0.18.7
Обновление: я нашел этот блог, где блогер Луис, кажется, решил ту же (или очень похожую) проблему:
MPD, по-видимому, пытается порождать новый процесс pulseaudio, как мой собственный пользователь, и он терпит неудачу, потому что он уже запущен. Я не мог понять, почему он не мог просто использовать существующий экземпляр pulseaudio, не пытаясь создать новый.
Я понял, благодаря этому посту.
MPD не удалось найти уже работающий экземпляр pulseaudio, поскольку переменная окружения XDG_RUNTIME_DIR не была установлена, и именно там в Pulseaudio хранятся его файлы (сокет, pid процесса и т. Д.).
Я попробовал его решение:
создание нового файла /etc/systemd/system/mpd.service.d/fixenv.conf, содержащего:
[Service] Environment = XDG_RUNTIME_DIR = / run / user / 1000
(Замените 1000 на идентификатор UNIX вашего пользователя.)
Я перезагрузился, и XDG_RUNTIME_DIR был настроен правильно, а импульс поместил свой pid-файл в каталог /run/user/1000/pulse/ (мой идентификатор пользователя - 1000), но я все еще получаю ту же ошибку из mpd:
pulse_output: не удалось включить "ROCKI" [pulse]: pa_context_connect() не удалось: соединение отклонено
Я узнаю больше о linux каждый день, но сокеты, pids процесса, systemd (разве Ubuntu не должен использовать upstart? Systemd, похоже, запускает и запускает программы) и т. Д. - все это сейчас выше моей зарплаты - я м потерялся в лесу.
3 ответа
Наконец, лучше, чем режим Pulseaudio Daemon, лучшее решение - это запуск mpd от имени себя (а не пользователя mpd), поэтому у вас нет проблем с использованием собственного сеанса pulseaudio.
Другой ответ, но проверенный и тоже работающий:
настройте pulseaudio для работы в "режиме демона" вместо стандартного "режима пользователя"
- в терминале беги
sudo gedit /etc/init/pulseaudio.conf
затем раскомментируйте строку 20 удаления#
получить:start on runlevel [2345]
сохранить и выйти из Gedit. - Запустите эти 2 команды в терминале:
sudo usermod -aG pulse,pulse-access mpd
sudo usermod -aG pulse,pulse-access your-login
Во второй команде замените "ваш логин"
Теперь перезагрузите компьютер: надеюсь, это сработает.
Примечание: для информации, на этой странице перечислены причины, по которым вы должны избегать режима pulseaudio daemon, но я считаю, что это нормально для однопользовательского ПК (особенно я не вижу больше использования ЦП / памяти, чем в пользовательском режиме).
Решение XDG_RUNTIME_DIR сработало для меня, но нет необходимости создавать файл в /etc/systemd/system. Просто добавьте эту строку в /etc/init.d/mpd:
export XDG_RUNTIME_DIR=/run/user/1000
Я уже указал mpd для запуска в качестве собственного пользователя и группу "audio" в /etc/mpd.conf.
Вы можете попробовать указать приемник pulseaudio в конфигурационном файле MPD:
Чтобы отобразить приемники pulseaudio, выполните эту команду в терминале:pactl list short sinks
Это выведет что-то вроде:
0 alsa_output.pci-0000_00_03.0.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz IDLE
1 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING
Выберите ваш основной приемник (второй в моем случае, потому что у меня нет звука HDMI) и скопируйте его имя в mpd.conf audio_output:
аудио выход {
type "pulse"
name "MPD PulseAudio Output"
sink "alsa_output.pci-0000_00_1b.0.analog-stereo"
}