mpd en conflicto con otras aplicaciones: ¿tomar el control del pulso?

8

Explicación simple

Si se reproduce mpd y el sonido intenta reproducirse a través de otra aplicación, x , no se emitirá el sonido de x .

Si se reproduce sonido de otra aplicación, x , y mpd intenta reproducirlo, no se emitirá ningún sonido desde mpd mientras el sonido de x continúa reproduciéndose.

Detalles

Primero noté este problema con Flash, y este sigue siendo el escenario más común. Me envió una consulta sobre este antes de darse cuenta que no era estrictamente relacionados con Flash, sino que es algo que ver con el MPD.

Mi mayor frustración proviene de tratar de hacer que mpd vuelva a funcionar, ya que parece que no puedo precisar ningún método. A veces pulseaudio -kparece ayudar, otras veces sudo /etc/init.d/mpd restart, otros matan a Chromium (debido a Flash) con SIGTERM. La mayoría de las veces es una combinación de lo anterior.

Creo que esto podría deberse a que ejecuto mpd como otro usuario y uso pulseaudio. No se ejecuta como usuario root o actual. Además, mpd se compila con soporte de pulso.

He intentado numerosas cosas, pero honestamente no pude recitar qué, ya que ha pasado algún tiempo desde entonces. Prefiero no hurgar sin alguna dirección, pero me encantaría solucionar este problema de una vez por todas.

mpd.conf

Simplificado al eliminar comentarios / líneas en blanco.

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"

Pregunta

En aras de mantener esto una pregunta: ¿alguien sabe qué está causando esto o cómo solucionarlo sin ejecutar mpd como el usuario actual?

Jamie Schembri
fuente
1
Cuando reproduzca algo a través de mpd (y el sonido que está funcionando) cargue la ventana de propiedades de sonido, presione la pestaña de aplicaciones y esto le dirá con certeza si mpd está utilizando PA o no.
Oli
Ejecutar mpd como usuario actual, según las instrucciones de Alibara Iduas, soluciona el problema. Sin embargo, todavía estoy interesado en por qué esto no se ejecutará correctamente ya que el usuario "mpd".
Jamie Schembri

Respuestas:

5

Tuve este problema cuando comencé a usar mpd, pero fue hace bastante tiempo, ¡así que no puedo recordar exactamente qué hice para solucionarlo!

¿Tiene instaladas las preferencias de PulseAudio? Encontré este consejo en un foro: sudo apt-get install paprefs

Luego abra las preferencias de PulseAudio desde el menú: Sistema-> Preferencias-> Preferencias de PulseAudio Haga clic en la pestaña Servidor de red, luego marque la casilla "Habilitar acceso de red a dispositivos de sonido locales" y finalmente marque la casilla "No requerir autenticación". Después de eso, reinicie mpd:sudo /etc/init.d/mpd restart

Sin embargo ... me acabo de dar cuenta de que mpd funciona bien para mí y no tengo habilitado el "acceso de red a dispositivos de sonido locales".

Creo que puede tener razón sobre la necesidad de ejecutar mpd como usuario actual, que es lo que estoy haciendo. (¡No tengo idea de por qué esto es así!)

Puede encontrar una guía simple para configurar mpd para que se ejecute como usuario aquí: http://gmpc.wikia.com/wiki/MPD_INSTALL_USER_SERVICE_UBUNTU

Para resumir, ya que tiene instalado mpd:

1.) Detenlo: sudo update-rc.d mpd disable

2.) Copie su mpdconf en la dirección de su casa (como .mpdconf) y cambie las siguientes entradas a lugares donde su usuario pueda acceder y escribir:

music_directory
playlist_directory
db_file
log_file
error_file
pid_file
state_file 

La página de la que estoy tomando esto sugiere simplemente crear una carpeta .mpd en su directorio de inicio para estas cosas, guardar para su directorio de música real.

3.) Comente la línea de usuario en .mpdconf: #user "mpd"

4.) Ahora puede ejecutar mpd y actualizar la base de datos.

5.) Para que mpd se inicie automáticamente como usuario al iniciar sesión, vaya a Aplicaciones de inicio y agregue una entrada para mpd, luego cree un archivo de inicio automático en ~ / .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

Probablemente haya inconvenientes en la ejecución como usuario, por lo que tal vez esto no satisfaga sus necesidades.

Aibara
fuente
Antes de leer esto, purgué pulseaudio y mpd. Pulseaudio funcionó bastante después de la instalación, pero por alguna razón no pude recuperar el sonido en mpd. De todos modos, terminé siguiendo la guía y ahora estoy ejecutando mpd como usuario actual y funciona bien. Hubiera preferido ejecutarlo como usuario "mpd", y dado que esto es más una solución que una respuesta, no lo aceptaré como respuesta. Todavía estoy interesado en por qué mpd no se ejecutará como usuario "mpd" de la forma en que me gustaría (¿tal vez pulseaudio debería ejecutarse en la raíz?). En cualquier caso, ¡espero que lo entiendas y tengas mi agradecimiento!
Jamie Schembri
1
No hay problema, me alegro de que al menos funcione ahora. Lo único que se me ocurre sería asegurarme, cuando lo ejecute como usuario mpd, de que "mpd" aparece como miembro del grupo en el grupo de acceso por pulsos (y tal vez también por pulsos). Pero me imagino que eso solo sería un problema si no tuvieras ningún sonido, no este extraño conflicto. Hm, también, vea las secciones "MPD y Alsa" y "MPD y PulseAudio" en esta página wiki de Archlinux
Aibara
Gracias de nuevo, Aibara. Anteriormente me había asegurado de que mpd estuviera en los grupos correctos para el pulso, por lo que ese no era el problema en este caso. ¡El enlace que publicó es muy interesante, particularmente porque describe mi problema exacto en la sección "MPD y Alsa" mencionada! ¿Sería esto adaptable a Pulse?
Jamie Schembri
Es extraño que el mismo problema tenga una solución fácil con Alsa, pero realmente no estoy seguro de si la solución de Alsa podría aplicarse a Pulse, eso realmente me supera. Todo lo que he leído sobre las personas que tienen este problema con Pulse termina ejecutando MPD como usuario o cambian las preferencias de PulseAudio. ¡Lo siento!
Aibara
Este problema también me causó algunos problemas, hasta que lo aislé en MPD. Por cierto, la primera solución que involucra paprefs no funcionó para mí, pero la segunda sí.
Laurence
2

No estoy seguro de si es exactamente el mismo problema, pero con mi antigua configuración de mpd predeterminada, creo que mpd estaba tratando de iniciar su propio audio de pulso como un usuario diferente (el usuario mpd). Descubrí que configurar mi salida de pulso en /etc/mpd.conf para usar un socket para conectar es más simple para evitar este tipo de problema.

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

Entonces, es posible que desee comprobar si Paprefs acepta conexiones locales

Bill Robinson
fuente
En Gentoo, también necesito copiar a mis usuarios .pulse-cookiepara /var/lib/mpdque esto funcione, o el audio de pulso falló failed to connect: Access denied, aunque no estoy seguro de que sea la forma correcta.
rebus
0

Cuando se ejecuta como su propio usuario según las instrucciones de la wiki, mpd no podrá enviar sonido al servidor pulseaudio de otro usuario. En lugar de configurar pulseaudio como un daemon de todo el sistema, una práctica muy desaconsejada por upstream, puede configurar mpd para usar el módulo tcp de pulseaudio para enviar sonido a localhost:

Primero, descomente el módulo tcp en /etc/pulse/default.pa o $ XDG_CONFIG_HOME / pulse / default.pa (típicamente ~ / .config / pulse / default.pa) y configure 127.0.0.1 como una dirección IP permitida; el directorio de inicio tiene prioridad:

### 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

Se pueden agregar rangos de IP adicionales en notación cidr usando; como el separador Una vez que esto se haya completado, reinicie pulseaudio:

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

A continuación, edite /etc/mpd.conf y agregue una nueva salida de pulso que apunte a 127.0.0.1 como un servidor "remoto":

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

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

Pavel1114
fuente