Music Player Daemon
MPD(Music Player Daemon,音樂播放器守護進程)是一個伺服器-客戶端架構的音頻播放器。佔用極少資源的同時有着播放音頻、管理播放列表和音樂等功能。與它進行交互需要一個單獨的 客戶端。
安裝[編輯 | 編輯原始碼]
安裝 mpd包 軟件包,或者開發版本 mpd-gitAUR。
設置[編輯 | 編輯原始碼]
MPD 可以以 #單用戶配置、#全系統範圍配置 (即配置應用給所有用戶)模式運行,也可以在 #多 mpd 實例設置 下同時運行多個實例。將 MPD 設置成哪種方式運行取決於使用它的方式:例如,單用戶配置更容易設置,也可能更適合桌面系統環境。全系統範圍配置則更適合多用戶共享單個 MPD 實例的常在線音頻伺服器。
為了讓 MPD 能夠播放音頻,須要先設置好 ALSA (可選 PulseAudio),並讓它們正常工作。下文的 #配置音頻 小節會說明 ALSA 或者 PulseAudio 所需的參數。
MPD 由 mpd.conf(5) 文件進行配置,運行方式不同(單用戶或全系統範圍),文件的位置也不同。簡單來說,有以下兩個常用位置:
~/.config/mpd/mpd.conf
—— 單用戶配置模式,這是第一個會搜索的位置,/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 配置文件。 - 避免不可預見的文件夾和文件權限錯誤。
全系統範圍配置[編輯 | 編輯原始碼]
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
權限並且可以讀包含音樂的目錄,這經常與用戶的音樂目錄的默認設置衝突。
有很多方法可以解決這個問題,下面是其中不錯的一個
- 將 MPD 作為用戶運行
- 將 mpd 用戶添加到登錄組,並授予用戶目錄組權限。
# 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 directory
,player_thread: problems opening audio device while playing "Song Name.mp3"
這是因為 MPD 用戶需要是 audio 組的成員來訪問 /dev/snd/
下的音頻設備。將 MPD 用戶添加到 audio 組裏來解決這個問題。
# gpasswd -a mpd audio
MPD 啟動時間軸[編輯 | 編輯原始碼]
下面列出的是 MPD 正常啟動的時間軸,用以描述何時 MPD 放棄超級用戶權限,而使用配置中用戶組的權限。
- 以 root 身份通過 systemd 啟動 MPD 後,MPD 首先讀取
/etc/mpd.conf
文件。 - 然後 MPD 讀取
/etc/mpd.conf
中的用戶變量,從 root 切換到該用戶。 - 最後 MPD 讀取
/etc/mpd.conf
中的設置內容,根據內容配置自己。
注意,MPD 會改變運行用戶,從 root 切換到 /etc/mpd.conf
文件中命名的一個用戶。這樣,在配置文件中使用 ~
會正確的指向 home 用戶目錄,而不是 root 目錄。將所有的 ~
修改成 /home/username
來避免在 MPD 行為這一方面上的困惑很有必要。
本地配置(單用戶)[編輯 | 編輯原始碼]
好的做法是為所有需要的文件和播放列表創建一個單獨目錄。該目錄可以是任何一個你可以讀寫的目錄。例如: ~/.config/mpd/
或者 ~/.mpd/
。本章節假設該目錄是 ~/.config/mpd/
,其對應 $XDG_CONFIG_HOME
( XDG 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 自啟動[編輯 | 編輯原始碼]
mpd包 提供了用戶服務文件 /usr/lib/systemd/user/mpd.service
。配置文件預計存在 ~/.mpdconf
或者 ~/.config/mpd/mpd.conf
中,如果想要使用不同的路徑,參考 systemd#修改現存單元文件。進程不會以 root 啟動,所以在 MPD 配置文件中不能使用 user
和 group
變量,進程已經擁有用戶權限,因此沒有必要進一步更改他們。
所有你需要做的是啟用和啟動 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原則的客戶端。 擁有所有的基本功能。
- ncmpc — 一個使用NCursers的客戶端。
- ncmpcpp — 差不多是完全克隆ncmpc的客戶端, 但是有一些用C++寫成的新功能(tag editor, search engine)
- 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。
- QmpdClient — 用 Qt 4.x 寫的圖形客戶端。
- Sonata — 一個用 Python 寫的客戶端,非常優雅。
- gmpc — GTK2 寫的 MPD 前端。被設計為輕量且易用,同時也對所有的 MPD 的特性提供完全訪問。為用戶提供幾種不同的方法來瀏覽音樂。可以通過很多可獲得的插件來擴展。
- http://gmpclient.org/[失效連結 2021-11-13 ⓘ] || gmpcAUR
- Cantata — 多功能的 Qt4, Qt5 或者 KDE4 客戶端,具有很多可配置的接口。
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 上可以查看到客戶端列表。