MPD

出自 Arch Linux 中文维基
(重新導向自Music Player Daemon

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

安裝[編輯 | 編輯原始碼]

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

配置[編輯 | 編輯原始碼]

MPD 可以以 #單用戶配置#全系統範圍配置(即配置應用給所有用戶)模式運行,也可以在 #多 MPD 實例設置下同時運行多個實例。也可以參考 #多 MPD 實例設置運行多個 MPD 實例。

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

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

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 配置文件。
  • 避免不可預見的文件夾和文件權限錯誤。

配置文件和目錄的位置[編輯 | 編輯原始碼]

單用戶模式下,MPD 從 $XDG_CONFIG_HOME/mpd/mpd.conf 文件中讀取配置。 此處假設 $XDG_CONFIG_HOME~/.config默認值相同。

位於軟件包內的 MPD 配置示例提供了一個創建用戶配置的良好案例,使用下面的命令複製該示例文件並創建用戶配置:

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

將這個新創建的 ~/.config/mpd/ 目錄用於存放配置文件與其他 MPD 相關的文件(如數據庫和播放列表)是一個良好的做法。注意用戶必須擁有該目錄的讀寫權限。

然後編輯配置文件,指定需要和可選的文件以及目錄:

~/.config/mpd/mpd.conf
# 數據庫的建議位置
db_file            "~/.config/mpd/database"

# 如果使用 systemd 運行 MPD,刪除下面這一行,讓日誌直接寫入 systemd。
log_file           "syslog"

# 音樂目錄默認是 XDG 目錄,取消註釋下面這一行,可以修改並選擇不同的目錄
#music_directory    "~/music"

# 取消註釋下面這一行,可在音樂目錄下的文件變動時自動刷新數據庫
#auto_update "yes"

# 取消註釋下列內容以啟用這些功能
#playlist_directory "~/.config/mpd/playlists"
#pid_file           "~/.config/mpd/pid"
#state_file         "~/.local/state/mpd/state"
#sticker_file       "~/.config/mpd/sticker.sql"

如果在配置文件中啟用了播放列表,則必須創建好配置文件中指定的播放列表目錄:

$ mkdir ~/.config/mpd/playlists

如果設置了 state_file,則必須創建指定的目錄:

$ mkdir -p ~/.local/state/mpd

現在可以用下列命令啟動 MPD(可手動指定一個可選的自定義配置文件位置):

$ mpd [config_file]

MPD 需要掃描上述定義的 music_directory 目錄,才能建立數據庫文件。為完成這一任務,需要使用一個 MPD#客戶端。例如,對於 mpc,執行命令是:

$ mpc update

或者,在配置文件中將 auto_update 選項設置為 "yes",這樣,當 music_directory 中的文件變動時就會自動刷新數據庫。

配置音頻[編輯 | 編輯原始碼]

使用 ALSA 時,即使無特定設置,自動檢測默認設備的功能也應當是開箱即用的。若自動檢測沒有生效,請參考下面的 ALSA 音頻輸出定義語法進行配置。name 參數指定了一個音頻輸出的唯一名稱。

可用 device(可選)選項指示出 aplay --list-pcm 命令(由 alsa-utils 軟件包提供)所列出的實際設備。

~/.config/mpd/mpd.conf
audio_output {
        type          "alsa"
        name          "ALSA sound card"
        # Optional
        #device        "iec958:CARD=Intel,DEV=0"
        #mixer_control "PCM"
}

使用 PulseAudio 的用戶需要進行以下的調整:

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

PipeWire 的輸出也可以配置:

~/.config/mpd/mpd.conf
audio_output {
        type            "pipewire"
        name            "PipeWire Sound Server"
}

隨 systemd 自啟動[編輯 | 編輯原始碼]

mpd 軟件包提供了一個用戶服務文件。該服務以用戶身份啟動,因此無需更改權限或是使用 MPD 配置文件中的 usergroup 變量。

啟動或啟用 mpd.service 用戶單元(例如,使用 --user 標識)。

注意: 默認的配置文件是 ~/.config/mpd/mpd.conf,若要指定一個自定義配置文件的路徑,請參考 systemd#修改現存單元文件

在 tty 登錄時自啟動[編輯 | 編輯原始碼]

要在登錄時啟動 MPD,請將以下的內容添加至 ~/.profile 或其他的自動啟動文件中:

# 启动 MPD 守护进程(若其他的用户实例不存在)
[ ! -s ~/.config/mpd/pid ] && mpd

腳本配置[編輯 | 編輯原始碼]

mpd-configure 工具使用 ALSA 接口硬件地址(hw:x,y)創建針對 bit perfect audio playback 的 MPD 優化配置,無需任何重採樣或轉換。

全系統範圍配置[編輯 | 編輯原始碼]

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

默認的 /etc/mpd.conf 將設置保存在 /var/lib/mpd 中,並分配給用戶以及主要用戶組 MPD。

音樂目錄[編輯 | 編輯原始碼]

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

MPD需要擁有所有音樂收藏父目錄的執行權限+x)並且可以讀包含音樂的目錄,這經常與用戶的音樂目錄的默認設置衝突(通常是存放着音樂的 ~/Music 目錄)。

有很多方法可以解決這個問題,下列的方法中應該有一個是最實用的:

  • 改用單用戶配置模式
  • 將 mpd 用戶添加到用戶組,並授予用戶目錄的執行權限。按照下面的命令為 mpd 用戶授予訪問用戶目錄的權限:
# gpasswd -a mpd 用户组名称
$ chmod 710 /home/用户目录
  • 採取以下方式將音樂集合放到不同的路徑:
    • 完全移動
    • 綁定掛載
    • 使用 Btrfs#子卷(需要將這一永久改變寫入 /etc/fstab )。

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

要排除更新的文件,請在父目錄中創建一個名為 .mpdignore 的文件。文件中每一行所表示的文件都可以包含 shell 的通配符。在當前目錄以及所有的子目錄中匹配到的文件都會在後續更新中被排除在外。

注意: MPD 能夠讀取一些歸檔壓縮文件內的音樂文件,若這些歸檔壓縮文件位於音樂目錄中,MPD 會在更新時讀取這些文件。tar 格式的文件不在讀取範圍內。

通過 systemd 啟動[編輯 | 編輯原始碼]

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

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

套接字啟動[編輯 | 編輯原始碼]

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

如果希望監聽不同的 UNIX 套接字或者網絡端口(甚至是每個類型的多個套接字),或者完全不希望監聽網絡端口,請正確編輯 mpd.socket 單元並且修改 /etc/mpd.conf 以匹配相應的配置(詳情請參考 mpd.conf(5))。

用戶 id 啟動流程[編輯 | 編輯原始碼]

不要root 身份運行 MPD。在配置中使用 user 選項可以讓 MPD 在完成初始化後更改其用戶 id。在以非特權用戶啟動 MPD 時請勿使用該選項。

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

  1. root 身份通過 systemd 啟動 MPD 後,MPD 首先讀取 /etc/mpd.conf 文件。
  2. 然後 MPD 讀取配置中的 user 變量,從 root 切換到該用戶。
  3. 最後 MPD 讀取配置中的其餘設置內容,根據內容配置自己。在配置文件中,可以使用 ~ 指向用戶的家目錄,而非 root 的目錄。

多 MPD 實例設置[編輯 | 編輯原始碼]

在 Icecast 服務中運行[編輯 | 編輯原始碼]

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

衛星模式設置[編輯 | 編輯原始碼]

#在 Icecast 服務中運行中所述方法能夠使用,但當兩個 MPD 實例寫相同的數據庫文件時,理論上可能導致數據庫問題。MPD 有一種衛星模式,該模式下,一個實例可以從另一個已經運行的 MPD 實例上接收數據庫。

config-icecast 中添加以下代碼,其中 hostport 表示主 MPD 服務的主機名和端口號:

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

客戶端[編輯 | 編輯原始碼]

需要安裝獨立客戶端才能控制 MPD。較為詳細的客戶端列表請查閱這裏。常用的有這些:

命令行客戶端[編輯 | 編輯原始碼]

  • mpc — MPD 服務的命令行用戶界面,由 C 語言編寫而成。
https://www.musicpd.org/clients/mpc/ || mpc

終端客戶端[編輯 | 編輯原始碼]

  • clerk — 使用 Rofi 的 MPD 客戶端。
https://github.com/carnager/clerk || clerk-gitAUR
  • gomp — 受 ncmpcpp 啟發而成的 MPD 客戶端,內置音樂集封面視圖功能和 LastFM 集成。
https://github.com/aditya-K2/gomp || gomp-gitAUR
  • inori — 一個有着摺疊式音樂庫視圖和高效搜索功能的 MPD 客戶端。
https://github.com/eshrh/inori || inoriAUR
  • mmtc — 小型 MPD 終端客戶端,精簡但可定製性較強。
https://github.com/figsoda/mmtc || mmtcAUR
  • ncmpc — MPD 的 NCursers 客戶端,由 C++ 編寫而成。
https://www.musicpd.org/clients/ncmpc/ || ncmpc
  • ncmpcpp英語ncmpcpp — 與 ncmpc 幾乎完全相同的客戶端,但是有一些用 C++ 寫成的新功能(標籤編輯器、搜尋引擎)。
https://rybczak.net/ncmpcpp/ || ncmpcpp
  • ncmpy — 基於 Curses,用 Python 編寫而成的 MPD 客戶端。
https://repo.cykerway.com/ncmpy || ncmpyAUR
  • nncmpp — 另一個 MPD 客戶端。實際上是 Sonata 的簡化 TUI 版本。
https://git.janouch.name/p/nncmpp/ || nncmpp-gitAUR
  • pms — NCursers 客戶端,由 Go 語言編寫而成,有着較強的可定製性。
https://github.com/kimtore/pms || pmus-gitAUR
  • rmpc — 受 ncmpcpp 和 ranger 啟發的 MPD 客戶端,通過使用多種圖形協議可支持專輯封面,同時支持自定義配置。
https://mierak.github.io/rmpc/ || rmpc-gitAUR
  • vimpc — 基於 Curses 的 MPD 客戶端,有着類似 vi 的按鍵綁定。
https://github.com/boysetsfrog/vimpc || vimpc-gitAUR

圖形界面客戶端[編輯 | 編輯原始碼]

  • Ario — 一個功能非常豐富的 GTK3 界面的客戶端,靈感來自於 Rhythmbox英語Rhythmbox
http://ario-player.sourceforge.net/ || ario
  • Cantata — Qt5 客戶端,已停止維護,具有豐富的功能和可配置的界面。
https://github.com/CDrummond/cantata || cantataAUR
  • CoverGrid — GTK3 界面客戶端,專注於音樂專輯。
https://www.suruatoel.xyz/codes/mcg || mcgAUR
  • Plattenalbum — 小巧而現代化的 GTK4 界面客戶端,用 Python 編寫而成。
https://github.com/SoongNoonien/plattenalbum || plattenalbumAUR
  • QMPDClient — Qt5 界面的客戶端。
https://bitcheese.net/QMPDClient/ || qmpdclientAUR
  • Quimup — 簡潔的 Qt5 圖形前端,用 C++ 編寫而成。
https://sourceforge.net/projects/quimup/ || quimupAUR
  • RompЯ — MPD 的網頁客戶端。
https://fatg3erman.github.io/RompR/ || romprAUR
  • SkyMPC — 簡潔的 Qt5 圖形客戶端。
https://github.com/soramimi/SkyMPC || skympc-gitAUR
  • Sonata — 一個用 Python 寫的客戶端,非常優雅。
https://www.nongnu.org/sonata/ || sonata-gitAUR
  • Xfce MPD Panel PluginXfce4 面板的 MPD 插件。
https://goodies.xfce.org/projects/panel-plugins/xfce4-mpc-plugin || xfce4-mpc-plugin
  • Xfmpc — GTK 圖形客戶端,專注於低佔用。
https://goodies.xfce.org/projects/applications/xfmpc || xfmpc
  • ympd — 使用 Websockets 和 Bootstrap/JS 編寫的獨立 MPD 網絡圖形用戶界面。
https://ympd.org/ || ympdAUR
  • Ymuse — 簡單、實用且快捷的 GTK 前端(客戶端),用 Go 語言編寫而成。
https://yktoo.com/en/software/ymuse/ || ymuseAUR

另見[編輯 | 編輯原始碼]