尝试将音频从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"
}