“Falha ao abrir saída de áudio” erro ao tentar enviar áudio do mpd para pulseaudio

7

Quando tento reproduzir o mpd por meio de relatórios pulseaudio, mpd.log:

  

pulse_output: Falha ao habilitar "Pink ROCKI" [pulse]: pa_context_connect () falhou: Conexão recusada

  • O Pulse parece estar funcionando bem, já que o pacmd list-sinks mostra todos os meus impulsos de pulso, o áudio do navegador meb toca bem no coletor padrão e o VLC pode reproduzir som em qualquer um deles.
  • o mpd funciona bem se eu enviar a saída por meio de alsa em vez de pulso
  • O mpd e o pulseaudio estão sendo executados na minha conta (fred).
  • fred, mpd e pulseaudio são todos membros dos grupos de pulso, acesso por pulso e áudio.
  • Eu até tentei isso com diferentes builds de pulseaudio: o 4.0 que vem com o Ubuntu 14.04, RAOP2 experimental construído com pulso 4.0 e o RAOP2 experimental construído com pulso 5.0. o mpd não funcionará com nenhum deles.

Meu arquivo mpd.conf é baunilha; a seção de pulso é a genérica:

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

Embora, como laugeo sugere abaixo, eu também tentei especificar um coletor individual, ambos por nome:

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

e pelo índice #:

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

O que devo tentar em seguida? Poderia configurar o pulseaudio para ser executado como uma ajuda de serviço do sistema?

Isto está no Ubuntu 14.04, pulseaudio 4.0 (e 5.0), Music Player Daemon 0.18.7

Atualização: encontrei este blog onde o blogueiro Louiz parece ter resolvido o mesmo (ou muito similar) problema:

  

MPD aparentemente tenta gerar um novo processo pulseaudio, como o meu próprio   usuário, e ele falha porque já está em execução. Eu não pude   entender por que não poderia usar apenas a instância pulseaudio existente,   sem tentar gerar um novo.

     

Entendi, graças a esta postagem .

     

O MPD não conseguiu encontrar a instância pulseaudio já em execução porque o   variável de ambiente XDG_RUNTIME_DIR não foi definida, e onde   O pulseaudio armazena seus arquivos (o soquete, o processo pid, etc).

Eu tentei a solução dele:

  

criando um novo arquivo /etc/systemd/system/mpd.service.d/fixenv.conf   contendo:

     

[Serviço] Ambiente = XDG_RUNTIME_DIR = / run / user / 1000

     

(Substitua 1000 pelo ID do UNIX do seu usuário.)

Eu reiniciei e XDG_RUNTIME_DIR foi definido corretamente e o pulso colocou o arquivo pid no diretório / run / user / 1000 / pulse / (meu ID de usuário é 1000), mas ainda recebo o mesmo erro do mpd:

  

pulse_output: falha ao habilitar "ROCKI" [pulse]: pa_context_connect () falhou: conexão recusada

Estou aprendendo mais sobre o Linux todos os dias, mas soquetes, process pids, systemd (o Ubuntu não deveria usar o upstart? o systemd parece estar rodando e lançando coisas), etc. estão acima da minha nota salarial agora - Estou perdido na floresta.

    
por Fred Hamilton 03.11.2014 / 03:29

3 respostas

3

Finalmente, melhor do que o modo pulseaudio daemon, a melhor solução é : trata-se de executar o mpd como você mesmo (e não mpd usuário) para que você não tenha nenhum problema para usar sua própria sessão pulseaudio.

Uma resposta diferente, mas testada e também funcionando: configure o pulseaudio para executar como "modo daemon" em vez do "modo de usuário" padrão

  • em um terminal, execute o sudo gedit /etc/init/pulseaudio.conf
    então desmarque a linha 20 removendo # para obter:
    start on runlevel [2345]
    salve e saia do gedit.
  • Execute estes 2 comandos em um terminal:
    sudo usermod -aG pulse,pulse-access mpd
    sudo usermod -aG pulse,pulse-access your-login
    No segundo comando, substitua "seu login"

Agora reinicie: esperamos que funcione.

Observação: para obter informações, esta página lista as razões pelas quais você deve evitar o pulseaudio modo daemon, mas eu acho ok em um pc de usuário único (especialmente não vejo mais uso da CPU / memória do que o modo de usuário).

    
por laugeo 13.11.2014 / 11:32
2

A solução XDG_RUNTIME_DIR funcionou para mim, mas não há necessidade de criar um arquivo em / etc / systemd / system. Basta adicionar esta linha em /etc/init.d/mpd:

export XDG_RUNTIME_DIR=/run/user/1000

Eu já especifiquei o mpd para ser executado como meu próprio usuário e grupo "audio" em /etc/mpd.conf.

    
por user13097 23.06.2015 / 11:43
0

Você pode tentar especificar o pulseaudio sink no arquivo de configuração do MPD:

Para exibir os coletores pulseaudio, execute este comando em um terminal:
pactl list short sinks

Ele produzirá algo como:

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

Escolha o seu coletor principal (o segundo no meu caso, porque não tenho som HDMI) e copie o nome dele em mpd.conf audio_output:

audio_output {

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

}

    
por laugeo 03.11.2014 / 13:57