故障排除
自檢失敗
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 文檔。