音乐播放器守护进程/故障排除

来自 ArchWiki

故障排除

自动检测失败

在 MPD 启动期间,它会尝试自动检测您的设置并相应地配置输出和音量控制。虽然这在大多数情况下都运行良好,但在某些系统上会失败。明确告诉 MPD 使用什么作为输出和混音器控制可能会有所帮助。如果您按照上述说明从 /etc/mpd.conf.example 复制了 /etc/mpd.conf,您可以简单地取消注释

alsa 输出类型和 alsa 混音器的示例

audio_output {
	type			"alsa"
	name			"My ALSA Device"
	device			"hw:0,0"	# optional
	format			"44100:16:2"	# optional
	mixer_type		"hardware"
	mixer_device		"default"
	mixer_control		"PCM"
}

注意: 如果在使用 ESD 和 MPD 时遇到权限问题,请以 root 身份运行此命令

# chsh -s /bin/true mpd

MPD 在首次启动时挂起

这是一个常见错误,由损坏的 mp3 标签引起。以下是解决此问题的实验性方法。要求

  • kid3
  • easytag

这种方法非常繁琐,尤其是对于庞大的数据库。仅作为基准,修复 16GB 的数据库就花费了 2.5 小时。

EasyTAG

此处 easytag 的目的是 easytag 检测标签中的错误,但像 MPD 一样,它会挂起并崩溃。这里的技巧是 easy tags 实际上会在状态栏上告诉您哪个文件导致了问题。在启动 easytag 之前,请确保终端已关闭,以便随时杀死 easy tag 以避免挂起。准备就绪后,在树状视图中选择所有音乐所在的目录。默认情况下,easytag 开始搜索所有子目录中的 mp3 文件。一旦您注意到 easytag 停止扫描歌曲,请记下罪魁祸首并杀死 easytag。

注意: 也可以通过编辑 mpd 的配置文件并将 "log_level" 从 "default" 设置为 "verbose" 来实现此任务。重启 mpd 并查找 mpd 挂起后 mpd 日志文件中的最后一个条目。建议在调试后将 "log_level" 设置回 "default",因为日志文件增长很快。

Kid3

这是 kid3 派上用场的地方。使用 kid3 转到有问题的歌曲并重写其中一个标签。然后保存文件。这应该迫使 kid3 再次重写整个标签,从而解决 MPD 和 easy tag 挂起的问题。

重复此过程,直到您的音乐库完成。

无法连接到 mpd:找不到主机 "localhost":名称解析临时失败

如果您断开网络连接,则无法连接到 MPD(使用 ncmpcpp)。解决方案是禁用 IPv6 或将行添加到 /etc/hosts

::1 localhost.localdomain localhost

尝试使用客户端连接到 mpd 时的其他问题

有些人报告说无法使用各种客户端访问 mpd,例如看到如下错误

$ ncmpcpp
Cannot connect to mpd: Connection closed by the server
$ sonata
2011-02-13 18:33:05  Connection lost while reading MPD hello
2011-02-13 18:33:05  Not connected
2011-02-13 18:33:05  Not connected

请参阅 Arch 论坛上关于 ncmpcpp 的帖子 此处此处。另请参阅 FS#22071

第一个修复方案

检查 mpd.conf 中是否有类似 mpd.error 的行并删除它。mpd 错误文件已弃用并已删除。

第二个修复方案

注意: 我不太确定这是一个好主意。默认 mpd.conf 中有一个关于更改要绑定的地址的警告。如果这没有帮助,您可能需要注释掉这些更改。

如果这没有帮助,请将以下内容添加到 mpd.conf

 bind_to_address "127.0.0.1"
 port "6600"

之后,指示您的客户端通过 127.0.0.1 连接。例如,将以下内容添加到 ncmpcpp 配置文件

 mpd_host "127.0.0.1"
 mpd_port "6600"

绑定到 IPv6 先于 IPv4

如果在启动时,mpd 显示以下消息

listen: bind to '0.0.0.0:6600' failed: Address already in use (continuing anyway, because binding to '[::]:6600' succeeded)

这意味着 mpd 绑定到 ipv6 接口先于绑定到 ipv4。如果您想使用您的 ipv4 接口,请在 mpd.conf 中硬编码它,例如

bind_to_address "0.0.0.0"

也可以指定多个绑定,例如,让 mpd 同时监听 localhost 和您的网卡的外部 IP

bind_to_address "127.0.0.1"
bind_to_address "192.168.1.13"

守护进程:无法为用户 "mpd" 设置组 ID:操作不允许

该错误表明启动进程的用户没有权限成为配置告知进程以其身份运行的另一个用户 (mpd)。

要解决此问题,只需以 root 用户 身份 启动 mpd.service,而不是启动 用户单元

守护进程:fatal_error:设置组 NN 失败:操作不允许

该错误表明 mpd 无法设置组。这是因为您在 /etc/mpd.conf 中设置了除默认值 mpd 之外的任何其他组。这是因为默认的 mpd.service 文件。它以用户 mpd 身份启动 mpd(如果没有指定组,则使用您的 /etc/passwd 中声明的此用户的默认组),因此 mpd 没有更改其组的任何权限。

第一个修复方案

/etc/mpd.conf 中注释掉 group= 部分或将其更改为 group=mpd

第二个修复方案

扩展单元 mpd.service 并添加您所需的组。例如,使用组 "audio" 运行 mpd

/etc/systemd/system/mpd.service.d/group.conf
[Service]
Group=audio

第三个修复方案

在您的 /etc/passwd 中更改用户 mpd 的默认组。

MPD & ALSA

有时,当使用其他音频输出时,例如:某些包含 Flash 小程序的网页,MPD 将无法播放(直到重新启动)。错误出现在 mpd 的日志中

Error opening alsa device "hw:0,0": Device or resource busy

造成这种情况的原因可能是

  • 声卡不支持硬件混音(使用 dmix 插件)
  • 应用程序不适用于 ALSA 的默认设置

有关详细描述,建议查看 链接。

可以通过将以下行添加到 mpd.conf 来解决此问题

mpd.conf
audio_output {
        type                    "alsa"
        name                    "Sound Card"
        options                 "dev=dmixer"
        device                  "plug:dmix"
}

要使更改生效,请重启 mpd.service

ALSA 的高 CPU 使用率

当将 MPD 与 ALSA 一起使用时,用户可能会遇到 MPD 占用大量 CPU(大约 20-30%)的情况。这是因为大多数声卡支持 48kHz,而大多数音乐为 44.1kHz,因此强制 MPD 对其进行重采样。此操作占用大量 CPU 周期并导致高使用率。

对于大多数用户,通过告诉 MPD 不要使用重采样,将 auto_resample "no" 添加到 /etc/mpd.conf 的 audio_output 部分,应该可以解决该问题。

mpd.conf
audio_output {
   type			"alsa"
   name			"My ALSA Device"
   auto_resample	"no"
}

虽然它可能不会带来如此大幅度的加速,但启用 mmap 仍然可以加速

mpd.conf
audio_output {
   type			"alsa"
   name			"My ALSA Device"
   use_mmap		"yes"
}

一些用户可能还希望告诉 dmix 也使用 44kHz。有关调整 MPD 性能的更多信息,请访问 MPD wiki

播放不同采样率的音频文件(适用于 EMU 0202/0204/0404)

要播放具有自动声卡速率更改的不同采样率的音频文件,请安装 pulseaudio 和 pulseaudio-alsa,并继续使用 ALSA 作为输出

mpd.conf
audio_output {
    type          "alsa"
    name          "Emu 0202 USB"
    device        "hw:2,0"
}

更改用户

更改 MPD 运行的组可能会导致如下错误

output: Failed to open "My ALSA Device"
[alsa]: Failed to open ALSA device "default": No such file or directory

player_thread: problems opening audio device while playing "Song Name.mp3"

这是因为 MPD 用户需要成为 audio 组的成员才能访问 /dev/snd/ 下的声音设备。要修复它,请将用户设为 audio 组的成员

# gpasswd -a 'mpd' audio

MPD 在数据库中包含来自隐藏文件夹的音乐

MPD 在其数据库中包含隐藏文件夹,例如 syncthing 所做的重复音乐备份,例如 .stfolder。要纠正此问题,请在同一目录中创建一个 .mpdignore 文件,其中每行列出要忽略的文件夹或文件,如 mpd 文档 中所述。