出自 Arch Linux 中文维基

Tango-preferences-desktop-locale-modified.png這篇文章或章節的翻譯不反映原文。Tango-preferences-desktop-locale-modified.png

原因:No updates since 2015-01-17 except a quick touch up 2021-03-29(在 Talk:Music Player Daemon# 中討論)

MPD(Music Player Daemon,音樂播放器守護進程)是一個伺服器-客戶端架構的音頻播放器。占用極少資源的同時有著播放音頻、管理播放列表和音樂等功能。與它進行交互需要一個單獨的 客戶端

安裝

安裝 mpd 軟體包,或者開發版本 mpd-gitAUR

設置

MPD 可以以 #單用戶配置#全系統範圍配置 (即配置應用給所有用戶)模式運行,也可以在 #多 mpd 實例設置 下同時運行多個實例。將 MPD 設置成哪種方式運行取決於使用它的方式:例如,單用戶配置更容易設置,也可能更適合桌面系統環境。全系統範圍配置則更適合多用戶共享單個 MPD 實例的常在線音頻伺服器。

為了讓 MPD 能夠播放音頻,須要先設置好 ALSA (可選 PulseAudio),並讓它們正常工作。下文的 #配置音頻 小節會說明 ALSA 或者 PulseAudio 所需的參數。

MPD 由 mpd.conf(5) 文件進行配置,運行方式不同(單用戶或全系統範圍),文件的位置也不同。簡單來說,有以下兩個常用位置:

  1. ~/.config/mpd/mpd.conf —— 單用戶配置模式,這是第一個會搜索的位置,
  2. /etc/mpd.conf —— 全系統範圍配置。

下面是常用的配置選項:

  • pid_file - MPD 存儲進程 ID(PID)的文件
  • db_file - 音樂資料庫
  • state_file - 記錄 MPD 當前狀態
  • playlist_directory - 播放列表存儲文件夾
  • music_directory - MPD 在這個文件夾中掃描音樂
  • sticker_file - 標籤資料庫

單用戶配置

MPD 可配置為單用戶使用。以普通用戶運行它有幾點好處:

  • 在一個文件夾 ~/.config/mpd/ 下 (或任何其他在 $HOME 家目錄下的文件夾)重新部署(管理)所有 MPD 配置文件。
  • 避免不可預見的文件夾和文件權限錯誤。

全系統範圍配置

警告: 使用 PulseAudio 並且將 mpd 設置為全局配置的用戶可能需要 一個小技巧 來作為自己的用戶運行 mpd!

The default /etc/mpd.conf keeps the setup in /var/lib/mpd which is assigned to user as well as primary group mpd.

音樂目錄

音樂目錄需要通過 /etc/mpd.conf 文件中的 music_directory 參數來設置:

music_directory "/path/to/music"

MPD需要擁有 所有 音樂收藏父目錄的 +x 權限並且可以讀包含音樂的目錄,這經常與用戶的音樂目錄的默認設置衝突。

有很多方法可以解決這個問題,下面是其中不錯的一個

# gpasswd -a mpd <your login group>
$ chmod 710 /home/<your home dir>
  • 採取以下方式將音樂集合放到不同的路徑

(a)完全移動 (b)綁定掛載 (c)使用 Btrfs 子卷(需要將這一永久改變寫入 /etc/fstab 中)。可以使用 Access Control Lists 調整備用目錄的權限。

MPD 配置必須僅包含一個目錄,如果音樂集包含在多個目錄下,那麼在 /var/lib/mpd 的主音樂目錄下創建符號連結。記得為被連結的目錄設置相應的權限。

啟動 MPD

可以使用 systemd 來控制 MPD 服務,即mpd.service,第一次啟動 MPD 時會花費一些時間,因為 MPD 會掃描音樂目錄。

安裝一個客戶端程序 (ncmpc 是一個輕便易用的客戶端程序),享受音樂吧!

套接字啟動

如果啟用了 mpd.socket,但沒有啟用 mpd.service,systemd 不會立刻啟動 mpd,而是會監聽相應的套接字。當一個 mpd 客戶端試圖連接其中的套接字,systemd 將啟動 mpd.service, 然後透明地將埠的控制權交給 mpd 進程。

如果你希望監聽不同的 UNIX 套接字或者網絡埠(甚至是每個類型的多個套接字),或者你完全不希望監聽網絡埠。你需要 添加/編輯/刪除 mpd.socket 文件中 [Socket] 章節下的 "ListenStream=" 行,並且更改 /etc/mpd.conf 文件中的相應行(具體查看 mpd.conf(5))。

配置音頻

ALSA 用戶需要做以下設備定義,使用音效卡名字或者 pcm (aplay --list-pcms) 代替下面的 My Sound Card 欄位。

/etc/mpd.conf
audio_output {
        type            "alsa"
        name            "My Sound Card"
        mixer_type      "software"      # optional
}

mixer_type "software" 選項告訴 'mpd' 使用自己的獨立軟體音量控制。

PulseAudio 用戶需要做以下修改:

/etc/mpd.conf
audio_output {
        type            "pulse"
        name            "pulse audio"
}

PulseAudio 支持多種高級操作。例如:將音頻傳輸到不同的機器。MPD 的高級設置參考 Music Player Daemon Community Wiki

更改用戶

更改用戶組,可能會導致 MPD 運行出現以下類似錯誤: output: Failed to open "My ALSA Device"[alsa]: Failed to open ALSA device "default": No such file or directoryplayer_thread: problems opening audio device while playing "Song Name.mp3"

這是因為 MPD 用戶需要是 audio 組的成員來訪問 /dev/snd/ 下的音頻設備。將 MPD 用戶添加到 audio 組裡來解決這個問題。

# gpasswd -a mpd audio

MPD 啟動時間軸

下面列出的是 MPD 正常啟動的時間軸,用以描述何時 MPD 放棄超級用戶權限,而使用配置中用戶組的權限。

  1. 以 root 身份通過 systemd 啟動 MPD 後,MPD 首先讀取 /etc/mpd.conf 文件。
  2. 然後 MPD 讀取 /etc/mpd.conf 中的用戶變量,從 root 切換到該用戶。
  3. 最後 MPD 讀取 /etc/mpd.conf 中的設置內容,根據內容配置自己。

注意,MPD 會改變運行用戶,從 root 切換到 /etc/mpd.conf 文件中命名的一個用戶。這樣,在配置文件中使用 ~ 會正確的指向 home 用戶目錄,而不是 root 目錄。將所有的 ~ 修改成 /home/username 來避免在 MPD 行為這一方面上的困惑很有必要。

本地配置(單用戶)

好的做法是為所有需要的文件和播放列表創建一個單獨目錄。該目錄可以是任何一個你可以讀寫的目錄。例如: ~/.config/mpd/ 或者 ~/.mpd/。本章節假設該目錄是 ~/.config/mpd/,其對應 $XDG_CONFIG_HOMEXDG Base Directory Specification 的部分)的預設值 。

MPD 首先搜索配置文件 $XDG_CONFIG_HOME/mpd/mpd.conf,其次搜索 ~/.mpdconf。還可以通過命令行參數指定其他路徑。

將示例配置文件複製到所需的位置。例如:

$ cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf

編輯 ~/.config/mpd/mpd.conf 並且指定所需文件:

~/.config/mpd/mpd.conf
# Required files
db_file            "~/.config/mpd/database"
log_file           "~/.config/mpd/log"

# Optional
music_directory    "~/Music"
playlist_directory "~/.config/mpd/playlists"
pid_file           "~/.config/mpd/pid"
state_file         "~/.config/mpd/state"
sticker_file       "~/.config/mpd/sticker.sql"

創建所有上述配置中提及的文件和目錄:

$ mkdir ~/.config/mpd/playlists
$ touch ~/.config/mpd/{database,log,pid,state,sticker.sql}

當配置了所需文件的路徑後,就可以啟動 MPD 了。要指定配置文件的自定義位置,運行:

$ mpd config_file

在 tty 登陸時自啟動

要使 MPD 在登陸時啟動,在 ~/.profile (或者其他的 自啟動文件[損壞的連結:無效的章節] )中添加以下命令:

# MPD daemon start (if no other user instance exists)
[ ! -s ~/.config/mpd/pid ] && mpd

在 X 下自啟動

如果你安裝了桌面環境,編輯下面的文件並將其放到 ~/.config/autostart/

~/.config/autostart/mpd.desktop
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Music Player Daemon
Comment=Server for playing audio files
Exec=mpd
StartupNotify=false
Terminal=false
Hidden=false
X-GNOME-Autostart-enabled=false

如果沒有使用桌面環境,將 #在 tty 登陸時自啟動 中的命令加入到 自啟動文件[損壞的連結:無效的章節]

通過 systemd 自啟動

注意: 本章節假設 systemd 用戶會話管理器已經運行。具體信息查看 systemd/用戶

mpd 提供了用戶服務文件 /usr/lib/systemd/user/mpd.service。配置文件預計存在 ~/.mpdconf 或者 ~/.config/mpd/mpd.conf 中,如果想要使用不同的路徑,參考 systemd#修改現存單元文件。進程不會以 root 啟動,所以在 MPD 配置文件中不能使用 usergroup 變量,進程已經擁有用戶權限,因此沒有必要進一步更改他們。

所有你需要做的是啟用和啟動 mpd 用戶服務

注意:
  • mpd 也提供了系統服務文件 /usr/lib/systemd/system/mpd.service,但是當以 root 身份啟動進程時,進程不會讀取用戶配置文件而是會回落到 /etc/mpd.conf全局配置[損壞的連結:無效的章節] 中已經介紹過了。
  • 確保停用任何以前用過的啟動 mpd 的方法。

腳本配置

Rasi 創建了一個腳本,該腳本可以創建合適的目錄結構、配置文件,並且提示用戶音樂目錄的位置。可以在 這裡 下載。

多 mpd 實例設置

在運行 icecast 伺服器中很有用

如果第二個 mpd (例如:通過網絡使用 icecast 輸出來分享音樂)使用和上一個 mpd 相同的音樂和播放列表,只需要複製上一個的配置文件來創建一個新文件(例如:/home/username/.mpd/config-icecast),並且更改 log_file, error_file, pid_file 和 state_file 的參數(例如:mpd-icecast.log, mpd-icecast.error 等等),使用相同的音樂目錄路徑和播放列表目錄將確保第二個 mpd 和第一個 mpd 使用相同的音樂收藏。在第一個 mpd 守護進程下創建和編輯播放列表也會影響第二個守護進程。不需要為第二個守護進程創建相同的播放列表。以相同的方式從上述 ~/.xinitrc 調用第二個守護進程。(僅僅需要確保使用不同的埠號,這樣不會和第一個 mpd 守護進程衝突)。

更好的方法:衛星模式設置

上述的方法在工作過程中,當兩個 mpd 實例寫相同的資料庫文件時,在理論上可能導致資料庫問題。MPD 有一種衛星模式,該模式下,一個實例可以從另一個已經運行的 mpd 實例上接受資料庫。

在 config-icecast 中添加以下代碼,host 和 port 反映了主要 mpd 伺服器的主機和埠。

   database {
   plugin "proxy"
   host "localhost"
   port "6600"
   }

客戶端

需要安裝獨立客戶端才能控制mpd。 常用的有這些:

命令行下

  • mpc — 簡單的基於KISS原則的客戶端。 擁有所有的基本功能。
https://mpd.fandom.com/wiki/Client:Mpc || mpc
  • ncmpc — 一個使用NCursers的客戶端。
https://mpd.fandom.com/wiki/Client:Ncmpc || ncmpc
  • ncmpcpp — 差不多是完全克隆ncmpc的客戶端, 但是有一些用C++寫成的新功能(tag editor, search engine)
https://rybczak.net/ncmpcpp/ || ncmpcpp
  • pms — Highly configurable and accessible ncurses client
http://pms.sourceforge.net/ || pmusAUR[損壞的連結:package not found]
  • vimpc — 基於ncurses的MPD客戶端, 使用類似vi的快捷鍵
https://sourceforge.net/projects/vimpc/ || vimpcAUR[損壞的連結:package not found]

圖形界面下

  • Ario — 一個功能非常豐富的 GTK2 界面的客戶端,靈感來自於 Rhythmbox。
http://ario-player.sourceforge.net/ || ario
  • QmpdClient — 用 Qt 4.x 寫的圖形客戶端。
https://bitcheese.net/QMPDClient || qmpdclientAUR
  • Sonata — 一個用 Python 寫的客戶端,非常優雅。
https://www.nongnu.org/sonata/ || sonataAUR
  • gmpc — GTK2 寫的 MPD 前端。被設計為輕量且易用,同時也對所有的 MPD 的特性提供完全訪問。為用戶提供幾種不同的方法來瀏覽音樂。可以通過很多可獲得的插件來擴展。
http://gmpclient.org/[失效連結 2021-11-13 ⓘ] || gmpcAUR
  • Cantata — 多功能的 Qt4, Qt5 或者 KDE4 客戶端,具有很多可配置的接口。
https://code.google.com/p/cantata/ || cantata

Web界面

  • Patchfork — 用 PHP 和 Ajax 寫的 web 客戶端
https://web.archive.org/web/20170102164901/http://mpd.wikia.com/wiki/Client:Pitchfork || patchfork-gitAUR[損壞的連結:package not found].

mpd wiki 上可以查看到客戶端列表。

參閱