尝试将音频从mpd发送到pulseaudio时“无法打开音频输出”错误

当我尝试通过pulseaudio播放mpd时,mpd.log报告:

pulse_output:无法启用“Pink ROCKI”[pulse]:pa_context_connect()失败:连接被拒绝

  • 脉冲似乎工作正常,因为pacmd list-sinks显示我的所有脉冲接收器,meb浏览器音频通过默认接收器播放得很好,而VLC可以通过其中任何一个播放声音。
  • 如果我通过alsa而不是脉冲发送输出,mpd工作正常
  • mpd和pulseaudio都在我的帐户(fred)下运行。
  • fred,mpd和pulseaudio都是脉冲,脉冲访问和音频组的成员。
  • 我甚至尝试过不同版本的pulseaudio:Ubuntu 14.04附带的4.0,用脉冲4.0构建的实验RAOP2 ,以及用脉冲5.0构建的实验RAOP2。 mpd不适用于任何一个。

我的mpd.conf文件是vanilla; 脉冲部分是通用的:

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

虽然下面是laugeo的建议,但我也试过用名字来指定一个单独的接收器:

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

并通过索引#:

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

我接下来应该尝试什么? 可以将pulseaudio配置为作为系统服务帮助运行吗?

这是在Ubuntu 14.04,pulseaudio 4.0(和5.0),音乐播放器守护进程0.18.7

更新:我发现这个博客 ,博客Louiz似乎解决了相同(或非常相似)的问题:

MPD显然试图产生一个新的pulseaudio进程,作为我自己的用户,它失败,因为它已经在运行。 我无法理解为什么它不能只使用现有的pulseaudio实例,而不试图产生一个新的。

我理解这篇文章 。

MPD找不到已经运行的pulseaudio实例,因为没有设置环境变量XDG_RUNTIME_DIR,而且是pulseaudio存储其文件的位置(套接字,进程pid等)。

我试过他的解决方案:

创建一个新文件/etc/systemd/system/mpd.service.d/fixenv.conf,其中包含:

[服务]环境= XDG_RUNTIME_DIR = / run / user / 1000

(将1000替换为您的用户的UNIX ID。)

我重新启动并且XDG_RUNTIME_DIR设置正确,并且脉冲将其pid文件放在/ run / user / 1000 / pulse /目录中(我的用户ID为1000),但我仍然从mpd得到相同的错误:

pulse_output:无法启用“ROCKI”[pulse]:pa_context_connect()失败:连接被拒绝

我每天都在学习更多关于linux的知识,但是套接字,进程pids,systemd(不是Ubuntu应该使用upstart?systemd似乎正在运行并启动东西)等等,现在都高于我的工资等级 – 我我迷失在树林里。

最后,比pulseaudio守护进程模式更好,最好的解决方案是:它是关于运行mpd作为你自己(而不是mpd用户)所以你没有问题使用你自己的会话pulseaudio。

一个不同的答案,但测试和工作:
将pulseaudio配置为以“守护进程模式”运行,而不是标准的“用户模式”

  • 在一个终端,运行
    sudo gedit /etc/init/pulseaudio.conf
    然后取消注释第20行删除#得到:
    start on runlevel [2345]
    保存并退出gedit。
  • 在终端中运行以下两个命令:
    sudo usermod -aG pulse,pulse-access mpd
    sudo usermod -aG pulse,pulse-access your-login
    在第2个命令中,替换“your-login”

现在重启:希望它会起作用。

注意:有关信息,此页面列出了必须避免使用pulseaudio守护程序模式的原因,但我发现在单个用户PC上没问题(特别是我看到的cpu /内存使用量不比用户模式多)。

XDG_RUNTIME_DIR解决方案适用于我,但不需要在/ etc / systemd / system中创建文件。 只需在/etc/init.d/mpd中添加以下行:

 export XDG_RUNTIME_DIR=/run/user/1000 

我已经指定mpd作为我自己的用户和/etc/mpd.conf中的“audio”组运行。

您可以尝试在MPD配置文件中指定pulseaudio sink:

要显示pulseaudio接收器,请在终端中运行以下命令:
pactl list short sinks

它将输出如下内容:

 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 

选择你的主水槽(在我的情况下是第二个,因为我没有HDMI声音)并在mpd.conf audio_output中复制它的名字:

音频输出 {

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

}