MPD конфликтует с другими приложениями - контроль над пульсом?

8

Простое объяснение

Если проигрывается mpd, а звук пытается воспроизвести через другое приложение, x , звук из x не будет выводиться.

Если воспроизводится звук из другого приложения, x , и mpd пытается воспроизвести, звук из mpd не выводится, а звук из x продолжает воспроизводиться.

подробности

Я впервые заметил эту проблему с Flash, и это продолжает оставаться наиболее распространенным сценарием. Я опубликовал вопрос по этому поводу, прежде чем понял, что он не связан исключительно с Flash, а связан с mpd.

Мое самое большое разочарование связано с попыткой заставить работать mpd снова, так как я не могу описать какой-либо метод. Иногда pulseaudio -kкажется, что помогает, иногда sudo /etc/init.d/mpd restartдругие убивают Chromium (из-за Flash) SIGTERM. В большинстве случаев это сочетание вышеперечисленного.

Я думаю, что это может быть потому, что я запускаю mpd от имени другого пользователя и использую pulseaudio. Он не запускается от имени пользователя root или текущего пользователя. Кроме того, MPD скомпилирован с поддержкой импульсов.

Я перепробовал множество вещей, но я, честно говоря, не мог рассказать, как это происходило с тех пор. Я бы не стал ковыряться без какого-либо указания, но я был бы очень рад решить эту проблему раз и навсегда.

mpd.conf

Упрощается путем удаления комментариев / пустых строк.

music_directory     "/var/lib/mpd/music"
playlist_directory      "/var/lib/mpd/playlists"
db_file         "/var/lib/mpd/tag_cache"
log_file            "/var/log/mpd/mpd.log"
pid_file            "/var/run/mpd/pid"
state_file          "/var/lib/mpd/state"

user                "mpd"
bind_to_address     "wilson"

input {
        plugin "curl"
}

audio_output {
    type        "pulse"
    name        "My Pulse Output"

}

filesystem_charset      "UTF-8"
id3v1_encoding          "UTF-8"

Вопрос

Ради сохранения этого вопроса: кто-нибудь знает, что вызывает это, или как это исправить без запуска mpd от имени текущего пользователя?

Джейми Шембри
источник
1
При воспроизведении чего-либо через mpd (и звук из него работает) загрузите окно свойств звука, перейдите на вкладку приложений, и это точно покажет вам, использует ли mpd PA или нет.
Оли
Запуск mpd от имени текущего пользователя в соответствии с инструкциями Alibara Iduas позволяет обойти эту проблему. Я все еще интересуюсь, почему это не будет работать правильно как пользователь "mpd", хотя.
Джейми Шембри

Ответы:

5

У меня была эта проблема, когда я впервые начал использовать mpd, но это было довольно давно, поэтому я не могу точно вспомнить, что я сделал, чтобы это исправить!

У вас установлены настройки PulseAudio? Я нашел этот совет на форуме: sudo apt-get install paprefs

Затем откройте настройки PulseAudio из меню: «Система»> «Настройки»> «Настройки PulseAudio». Перейдите на вкладку «Сетевой сервер», затем установите флажок «Включить сетевой доступ к локальным звуковым устройствам» и, наконец, установите флажок «Не требовать проверки подлинности». После этого перезапустите mpd:sudo /etc/init.d/mpd restart

Однако ... Я только что понял, что mpd работает нормально для меня, и у меня не включен "доступ к локальной сети по звуковым устройствам".

Я думаю, что вы, возможно, правы относительно необходимости запуска mpd от имени текущего пользователя, что я и делаю. (Я понятия не имею, почему это так!)

Простое руководство по настройке mpd для запуска от имени пользователя можно найти здесь: http://gmpc.wikia.com/wiki/MPD_INSTALL_USER_SERVICE_UBUNTU

Подводя итог, так как у вас уже установлен mpd:

1.) Прекратите это: sudo update-rc.d mpd disable

2.) Скопируйте ваш mpdconf в вашу домашнюю директорию (как .mpdconf) и измените следующие записи так, чтобы ваш пользователь мог получить к ним доступ и написать:

music_directory
playlist_directory
db_file
log_file
error_file
pid_file
state_file 

Страница, на которой я беру это, предлагает просто создать папку .mpd в вашем домашнем каталоге для этого материала, за исключением вашего реального музыкального каталога.

3.) Закомментируйте строку пользователя в .mpdconf: #user "mpd"

4.) Теперь вы можете запустить mpd и обновить базу данных.

5.) Чтобы заставить mpd запускаться автоматически как пользователь при входе в систему, перейдите в «Startup Applications» и добавьте запись для mpd, затем создайте файл автозапуска в ~ / .config / autostart /.

[Desktop Entry]
Type=Application
Exec=mpd
Hidden=false
NoDisplay=false
Terminal=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Music Player Daemon
Name=Music Player Daemon
Comment[en_US]=plays the music
Comment=plays the music

Вероятно, есть недостатки у пользователя, поэтому, возможно, это не подойдет вам.

Aibara
источник
Прежде чем читать это, я произвел чистку pulseaudio и mpd. Pulseaudio работал в значительной степени после установки, но я не мог вернуть звук на MPD по некоторым причинам. В любом случае, я в конечном итоге следовал руководству, и теперь я использую mpd в качестве текущего пользователя, и он работает нормально. Я бы предпочел запустить его как пользователь «mpd», и, поскольку это скорее обходной путь, чем ответ, я не приму его в качестве ответа. Меня все еще интересует, почему mpd не запускается от имени пользователя "mpd" так, как мне бы хотелось (возможно, pulseaudio должен работать под root?). Несмотря ни на что, я надеюсь, что вы понимаете, и у вас есть мое спасибо!
Джейми Шембри
1
Нет проблем, рад, что по крайней мере это работает сейчас. Единственное, о чем я мог подумать, - это убедиться, что при запуске его как пользователя mpd «mpd» указан как член группы в группе с импульсным доступом (и, возможно, также с импульсной). Но я думаю, что это будет проблемой, если у вас не будет звука, а не этот странный конфликт. Хм, также можно найти в разделах «MPD и ALSA» и «MPD и PulseAudio» на этой странице вики Archlinux: wiki.archlinux.org/index.php/Music_Player_Daemon
Aibara
Еще раз спасибо, Айбара. Ранее я гарантировал, что mpd был в правильных группах для импульса, так что это не было проблемой в этом случае. Ссылка, которую вы разместили, очень интересна, особенно потому, что она описывает мою точную проблему в упомянутом разделе «MPD & Alsa»! Будет ли это адаптироваться к Pulse?
Джейми Шембри
Странно, что та же проблема имеет простое решение с Alsa, но я действительно не уверен, что решение Alsa может быть применено к Pulse - это действительно вне меня. Все, что я читал о людях, имеющих эту проблему с Pulse, либо заканчивало тем, что запускало MPD от имени пользователя, либо менялось предпочтение PulseAudio. Сожалею!
Айбара
Эта проблема тоже доставляла мне неприятности, пока я не изолировал ее в MPD. Кстати, первое решение с участием папрефов не сработало, а второе сработало.
Лоуренс
2

Не уверен, что это точно такая же проблема, но с моей старой настройкой mpd по умолчанию ish, я думаю, mpd пытался запустить собственный импульсный звук как другой пользователь (пользователь mpd). Я обнаружил, что настроить мой импульсный выход в /etc/mpd.conf на использование сокета для подключения проще, чтобы избежать такого рода проблем.

audio_output {
        type            "pulse"
        name            "My Pulse Output"
        server          "localhost"
}

Тогда вы можете проверить paprefs, что вы принимаете локальные подключения

Билл Робинсон
источник
В Gentoo мне также нужно скопировать своих пользователей, .pulse-cookieчтобы /var/lib/mpdзаставить это работать, или pulseaudio не сработал failed to connect: Access denied, хотя я не уверен, что это правильный путь.
Ребус
0

При запуске от имени своего собственного пользователя в соответствии с инструкциями вики mpd не сможет отправлять звук на сервер pulseaudio другого пользователя. Вместо того, чтобы настраивать pulseaudio в качестве общесистемного демона - практика, которая крайне нежелательна для апстрима, вместо этого вы можете сконфигурировать mpd для использования модуля tcp pulseaudio для отправки звука на localhost:

Сначала раскомментируйте модуль tcp в /etc/pulse/default.pa или $ XDG_CONFIG_HOME / pulse / default.pa (обычно ~ / .config / pulse / default.pa) и установите 127.0.0.1 в качестве разрешенного IP-адреса; домашний каталог имеет приоритет:

### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
#load-module module-esound-protocol-tcp
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
#load-module module-zeroconf-publish

Дополнительные диапазоны IP в нотации cidr могут быть добавлены с использованием; в качестве разделителя. После этого перезапустите pulseaudio:

$ pulseaudio --kill
$ pulseaudio --start -or- start-pulseaudio-x11/kde

Затем отредактируйте /etc/mpd.conf и добавьте новый импульсный выход, указывающий на 127.0.0.1 как «удаленный» сервер:

audio_output {
       type     "pulse"
       name     "Local Music Player Daemon"
       server       "127.0.0.1"
}

с https://wiki.archlinux.org/index.php/Music_Player_Daemon/Tips_and_tricks

Pavel1114
источник