MPD/故障排除

来自 Arch Linux 中文维基
< MPD

故障排除[编辑 | 编辑源代码]

注意: 这篇文章中的某些解决方法可能已经过时,请谨慎参考。

自检失败[编辑 | 编辑源代码]

MPD 启动时会自动检测用户的启动配置,并以此配置输出与音量控制。虽然启动流程一般不会有问题,但在某些系统上会失败。手动为 MPD 指定输出设备和混音器控制或许能解决。若配置文件 /etc/mpd.conf 是从 /etc/mpd.conf.example 复制而来,仅需要取消注释以下内容:

ALSA 输出类型和 ALSA 混音器示例:

audio_output {
	type			"alsa"
	name			"My ALSA Device"
	device			"hw:0,0"	# 可选
	format			"44100:16:2"	# 可选
	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 的作用是搜索错误的标签,但可能会和 MPD 一样(在遇到 mp3 标签问题时)假死或卡死。此处使用的技巧附加配置片段 是让 easytag 在状态栏上显示引起问题的文件。 启动 easytag 前请确保手边有可用的终端以随时准备在 easytag 假死时将其终止。准备好后,在 easytag 的树形图窗口中选择存放音乐的文件夹。默认情况下,easytag 会开始搜索该文件夹及其所有子文件夹下的 mp3 文件。一旦发现 easytag 停止搜索歌曲,记下那个出问题的文件并终止 easytag。

注意: 上述过程也可以通过编辑 MPD 的配置文件,将“日志等级”(log_level)从“默认”(default)更改至“详细”(verbose)实现,编辑好 MPD 的配置后,重启 MPD 并检查 MPD 挂起后的最新日志条目。调试结束后,建议将“日志等级”重新改回“默认”,“详细”的日志等级会导致日志文件大小迅速增长。

Kid3[编辑 | 编辑源代码]

这时候 kid3 就派上了用场。找到有问题的歌曲,用 kid3 重写标签然后保存文件,kid3 应该会强制重写整个标签,解决导致 MPD 和 easytag 假死的问题。

重复这个过程,直到修复完音乐目录中所有有问题的文件。

Cannot connect to mpd: host "localhost" not found: Temporary failure in name resolution[编辑 | 编辑源代码]

没有网络连接的情况下,无法通过 ncmpcpp 连接至 MPD。解决方法是禁用 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 在绑定 IPv4 的地址之前已经绑定了 IPv6 地址。若希望使用 IPv4 接口,请将其硬编码到 mpd.conf 中,比如:

bind_to_address "0.0.0.0"

可以指定多个绑定地址,例如,按照下列配置让 MPD 同时监听本地和本设备网卡的外部地址:

bind_to_address "127.0.0.1"
bind_to_address "192.168.1.13"

daemon: cannot setgid for user "mpd": Operation not permitted[编辑 | 编辑源代码]

这个错误表明用户所启动的进程没有权限按照配置将其更改为另一个用户(mpd)的进程。

要解决该问题,请以 root 用户启动 mpd.service,不要以用户单元启动。

daemon: fatal_error: Failed to set group NN: Operation not permitted[编辑 | 编辑源代码]

这个错误表明 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 时间,导致了高 CPU 占用率。

对于大多数用户而言,应该能通过在 /etc/mpd.conf 中的 audio_output 部分中添加 auto_resample "no",让 MPD 不再对音频重采样以解决该问题:

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,让 dmix 也使用 44KHz。有关调整 MPD 性能的相关信息请参考 MPD wiki

Playing audio files with different rate (works for EMU 0202/0204/0404)[编辑 | 编辑源代码]

To play audio files of different rate with automatic card rate change install pulseaudio and pulseaudio-alsa and keep using ALSA as output:

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/ 下的声音设备。让 mpd 用户成为 audio 用户组的成员即可解决这个问题:

# gpasswd -a 'mpd' audio

MPD 添加了来自数据库的隐藏目录[编辑 | 编辑源代码]

如果 MPD 包含了来自数据库的隐藏目录(例如由 syncthing 创建的 .stfolder 重复音乐备份),请在该目录下创建 .mpdignore 文件,文件内的每一行表示需要忽略的文件夹和文件,详情请参见 mpd 文档