跳至內容
出自 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 文檔