web-dev-qa-db-fra.com

Erreur "Impossible d'ouvrir la sortie audio" lors de la tentative d'envoi de l'audio de mpd à pulseaudio

Lorsque j'essaie de lire mpd via pulseaudio, mpd.log rapporte:

Pulse_output: Impossible d'activer "Pink ROCKI" [Impulsion]: échec de pa_context_connect (): connexion refusée

  • Pulse semble fonctionner correctement car pacmd list-sinks affiche tous mes éviers Pulse, l'audio du navigateur meb est correctement lu via l'évier par défaut et VLC peut reproduire le son via n'importe lequel d'entre eux.
  • mpd fonctionne bien si j'envoie la sortie via alsa au lieu de Pulse
  • Mpd et pulseaudio fonctionnent tous les deux sous mon compte (fred).
  • fred, mpd et pulseaudio sont tous membres des groupes Pulse, Pulse-access et Audio.
  • J'ai même essayé cela avec différentes versions de pulseaudio: la version 4.0 fournie avec Ubuntu 14.04, le RAOP2 expérimental construite avec Pulse 4.0 et la version expérimentale RAOP2 construite avec Pulse 5.0. MPD ne fonctionnera avec aucun d'entre eux.

Mon fichier mpd.conf est Vanilla; la section Pulse est le générique:

    audio_output { 
    type "Pulse" 
    name "General Pulse" 
    }

Bien que laugeo l'indique ci-dessous, j'ai également essayé de spécifier un évier individuel, les deux par leur nom:

audio_output {
    type        "Pulse"
    name        "ROCKI"
    sink        "raop_output.ASAP1826T.local"
}

et par index #:

audio_output {
    type        "Pulse"
    name        "ROCKI"
    sink        "4"
}

Que devrais-je essayer ensuite? La configuration de pulseaudio pour une exécution en tant que service système peut-elle aider?

Ceci est sur Ubuntu 14.04, pulseaudio 4.0 (et 5.0), Music Player Daemon 0.18.7

Mise à jour: j'ai trouvé ce blog où le blogueur Louiz semble avoir résolu le même problème (ou très similaire):

MPD tente apparemment de créer un nouveau processus pulseaudio, en tant que mon propre utilisateur, et il échoue car il est déjà en cours d'exécution. Je ne comprenais pas pourquoi il ne pouvait pas simplement utiliser l'instance existante de pulseaudio sans essayer d'en créer une nouvelle.

J'ai compris grâce à ce post .

MPD n’a pas pu trouver l’instance pulseaudio en cours d’exécution car la variable d’environnement XDG_RUNTIME_DIR n’était pas définie et l’emplacement où pulseaudio stockait ses fichiers (le socket, le pid du processus, etc.).

J'ai essayé sa solution:

créer un nouveau fichier /etc/systemd/system/mpd.service.d/fixenv.conf contenant:

[Service] Environnement = XDG_RUNTIME_DIR =/run/user/1000

(Remplacez 1000 par l'ID UNIX de votre utilisateur.)

J'ai redémarré et XDG_RUNTIME_DIR a été défini correctement et Pulse a placé son fichier pid dans le répertoire/run/user/1000/Pulse/(mon ID utilisateur est 1000), mais le même message d'erreur persiste de la part de mpd:

Pulse_output: Impossible d'activer "ROCKI" [Pulse]: échec de pa_context_connect (): connexion refusée

J'en apprends plus sur Linux tous les jours, mais les sockets, process pids, systemd (Ubuntu n'est-il pas censé utiliser upstart? Systemd semble fonctionner et lancer des choses), etc. m perdu dans les bois.

7
Fred Hamilton

Enfin, mieux que le mode démon pulseaudio, la meilleure solution est : il s’agit d’exécuter mpd comme vous-même (et non comme utilisateur mpd) afin que vous n’ayez aucun problème à utiliser votre propre session pulseaudio.

Une réponse différente, mais testée et efficace:
configure pulseaudio pour qu'il s'exécute en "mode démon" au lieu du "mode utilisateur" standard

  • dans un terminal, lancez
    Sudo gedit /etc/init/pulseaudio.conf
    puis décommentez la ligne 20 en retirant # pour obtenir:
    start on runlevel [2345]
    enregistrez et quittez gedit.
  • Exécutez ces 2 commandes dans un terminal:
    Sudo usermod -aG Pulse,pulse-access mpd
    Sudo usermod -aG Pulse,pulse-access your-login
    Dans la 2ème commande, remplacez "your-login"

Maintenant, redémarrez: espérons que cela fonctionnera.

Note: Pour info, ceci page liste les raisons pour lesquelles vous devez éviter le mode démon pulseaudio, mais je le trouve correct sur un PC à utilisateur unique (en particulier, je ne vois pas plus d’utilisation de la CPU/mémoire que le mode utilisateur).

3
laugeo

La solution XDG_RUNTIME_DIR a fonctionné pour moi, mais il n’est pas nécessaire de créer un fichier dans/etc/systemd/system. Ajoutez simplement cette ligne dans /etc/init.d/mpd:

export XDG_RUNTIME_DIR=/run/user/1000

J'ai déjà spécifié mpd à exécuter en tant que mon propre utilisateur et groupe "audio" dans /etc/mpd.conf.

2
user13097

Vous pouvez essayer de spécifier le puits pulseaudio dans le fichier de configuration MPD:

Pour afficher les puits pulseaudio, exécutez cette commande dans un terminal:
pactl list short sinks

Cela produira quelque chose comme:

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

Choisissez votre évier principal (le 2e dans mon cas parce que je n'ai pas de son HDMI) et copiez son nom dans mpd.conf audio_output:

sortie audio {

    type                    "Pulse"
    name                    "MPD PulseAudio Output"
   sink                    "alsa_output.pci-0000_00_1b.0.analog-stereo"

}

0
laugeo