mpd conflitante com outras aplicações - assumindo o controle do pulso?

8

Explicação simples

Se o mpd estiver sendo reproduzido e o som tentar reproduzir outro aplicativo, x , o som de x não será emitido.

Se o som de outro aplicativo, x , estiver sendo reproduzido e o mpd tentar reproduzir, nenhum som será emitido pelo mpd enquanto o som de x continuar sendo reproduzido.

Detalhes

Percebi esse problema com o Flash e esse continua sendo o cenário mais comum. Eu postei uma pergunta sobre isso antes de perceber que não era estritamente relacionado ao Flash, mas sim algo a ver com o mpd.

Minha maior frustração vem de tentar fazer com que o mpd funcione novamente, pois não consigo identificar nenhum método. Às vezes pulseaudio -kparece ajudar, outras vezes sudo /etc/init.d/mpd restart, outras matam o Chromium (devido ao Flash) com SIGTERM. Na maioria das vezes, é uma combinação dos itens acima.

Eu acho que isso pode ser porque eu corro mpd como outro usuário e uso pulseaudio. Não é executado como usuário root ou atual. Além disso, o mpd é compilado com suporte a pulsos.

Eu tentei várias coisas, mas sinceramente não consegui recitar o que, como já faz algum tempo. Prefiro não ficar bisbilhotando sem alguma direção, mas ficaria muito feliz em resolver esse problema de uma vez por todas.

mpd.conf

Simplificado removendo comentários / linhas em branco.

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"

Questão

Para manter essa questão: alguém sabe o que está causando isso ou como corrigi-lo sem executar o mpd como o usuário atual?

Jamie Schembri
fonte
11
Ao reproduzir algo através do mpd (e o som dele estiver funcionando), carregue a janela de propriedades do som, clique na guia Aplicativos e isso informará com certeza se o mpd está usando o PA ou não.
Oli
A execução do mpd como usuário atual, conforme as instruções de Alibara Iduas, soluciona o problema. Ainda estou interessado em saber por que isso não funcionará corretamente como o usuário "mpd".
Jamie Schembri

Respostas:

5

Eu tive esse problema quando comecei a usar o mpd, mas já fazia algum tempo, então não me lembro exatamente o que fiz para corrigi-lo!

Você tem as preferências do PulseAudio instaladas? Encontrei esta dica em um fórum: sudo apt-get install paprefs

Em seguida, abra as preferências do PulseAudio no menu: Sistema-> Preferências-> Preferências do PulseAudio Clique na guia Servidor de rede, marque a caixa "Habilitar acesso à rede a dispositivos de som locais" e, finalmente, marque a caixa "Não requer autenticação". Depois disso, reinicie o mpd:sudo /etc/init.d/mpd restart

No entanto ... acabei de perceber que o mpd funciona bem para mim e não tenho o "acesso de rede a dispositivos de som locais" ativado.

Eu acho que você pode estar certo sobre a necessidade de executar o mpd como o usuário atual, que é o que estou fazendo. (Eu não tenho idéia do porquê disso!)

Um guia simples para configurar o mpd para ser executado como usuário pode ser encontrado aqui: http://gmpc.wikia.com/wiki/MPD_INSTALL_USER_SERVICE_UBUNTU

Para resumir, já que você já possui o mpd instalado:

1.) Pare com isso: sudo update-rc.d mpd disable

2.) Copie o mpdconf para o diretório doméstico principal (como .mpdconf) e altere as seguintes entradas para os locais onde o usuário pode acessar e gravar:

music_directory
playlist_directory
db_file
log_file
error_file
pid_file
state_file 

A página da qual estou tirando isso sugere apenas a criação de uma pasta .mpd em seu diretório pessoal para esse material, salve o diretório de música real.

3.) Comente a linha do usuário em .mpdconf: #user "mpd"

4.) Agora você pode executar o mpd e atualizar o banco de dados.

5.) Para fazer com que o mpd seja iniciado automaticamente como usuário ao fazer login, vá para Aplicativos de Inicialização e adicione uma entrada para o mpd, depois crie um arquivo de inicialização automática em ~ / .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

Provavelmente, há desvantagens na execução como usuário, portanto, talvez isso não atenda às suas necessidades.

Aibara
fonte
Antes de ler isso, limpei o pulseaudio e o mpd. O Pulseaudio funcionou bastante após a instalação, mas não consegui recuperar o som no mpd por algum motivo. Enfim, acabei seguindo o guia e agora estou executando o mpd como usuário atual e funciona bem. Eu preferiria executá-lo como usuário "mpd" e, como isso é mais uma solução alternativa do que uma resposta, não aceitarei isso como resposta. Ainda estou interessado em saber por que o mpd não será executado como usuário "mpd" da maneira que eu gostaria (talvez o pulseaudio deva ser executado como root?). Independentemente disso, espero que você entenda e tenha meus agradecimentos!
Jamie Schembri
11
Não tem problema, feliz que pelo menos funcione agora. A única outra coisa em que eu poderia pensar seria garantir, ao executá-lo como usuário mpd, que "mpd" seja listado como um membro do grupo no grupo de acesso por pulso (e talvez também por pulso). Mas eu imagino que isso seria um problema se você não tivesse som algum, não esse conflito estranho. Hum, veja também as seções "MPD & Alsa" e "MPD & PulseAudio" nesta página wiki do Archlinux: wiki.archlinux.org/index.php/Music_Player_Daemon
Aibara
Mais uma vez obrigado, Aibara. Eu já havia garantido que o mpd estava nos grupos corretos para pulso, de modo que não era esse o problema neste caso. O link que você postou é muito interessante, principalmente porque descreve meu problema exato na seção "MPD & Alsa" mencionada! Isso seria adaptável ao Pulse?
Jamie Schembri
É estranho que o mesmo problema tenha uma solução fácil com a Alsa, mas não tenho certeza se a solução da Alsa pode ser aplicada ao Pulse - isso está muito além de mim. Tudo o que li sobre pessoas com esse problema com o Pulse acaba executando o MPD como usuário ou as preferências do PulseAudio mudam. Desculpa!
Aibara
Esse problema também me causou alguns problemas, até eu o isolar no MPD. A propósito, a primeira solução envolvendo paprefs não funcionou para mim, mas a segunda funcionou.
Laurence
2

Não tenho certeza se é exatamente o mesmo problema, mas com minha antiga configuração padrão do mpd ish, acho que o mpd estava tentando iniciar seu próprio áudio de pulso como um usuário diferente (o usuário mpd). Achei que configurar minha saída de pulso no /etc/mpd.conf para usar um soquete para conectar é mais simples para evitar esse tipo de problema.

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

Em seguida, convém verificar os paprefs que você aceita conexões locais

Bill Robinson
fonte
No Gentoo, também preciso copiar meus usuários .pulse-cookiepara /var/lib/mpdque isso funcione, ou o pulseaudio falhou failed to connect: Access denied, embora não tenha certeza de que seja o caminho certo.
rebus
0

Quando executado como seu próprio usuário, de acordo com as instruções da wiki, o mpd não poderá enviar som para o servidor pulseaudio de outro usuário. Em vez de configurar o pulseaudio como um daemon em todo o sistema, uma prática fortemente desencorajada pelo upstream, você pode configurar o mpd para usar o módulo tcp do pulseaudio para enviar som ao host local:

Primeiro, remova o comentário do módulo tcp em /etc/pulse/default.pa ou $ XDG_CONFIG_HOME / pulse / default.pa (normalmente ~ / .config / pulse / default.pa) e defina 127.0.0.1 como um endereço IP permitido; o diretório inicial tem precedência:

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

Intervalos de IP adicionais na notação cidr podem ser adicionados usando; como o separador. Quando isso estiver concluído, reinicie o pulseaudio:

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

Em seguida, edite o /etc/mpd.conf e adicione uma nova saída de pulso apontando para 127.0.0.1 como um 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
fonte