Ошибка "Не удалось открыть аудиовыход" при попытке отправить аудио с 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"

}

Другие вопросы по тегам