故障排除
自检失败
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。
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
中添加以下内容:
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 文档。