MPD(Music Player Daemon,音乐播放器守护进程)是一个服务器-客户端架构的音频播放器。占用极少资源的同时有着播放音频、管理播放列表和音乐等功能。与它进行交互需要一个单独的客户端。
安装
安装 mpd包 软件包,或者开发版本 mpd-gitAUR。
配置
MPD 可以以 #单用户配置、#全系统范围配置(即配置应用给所有用户)模式运行,也可以在 #多 MPD 实例设置下同时运行多个实例。也可以参考 #多 MPD 实例设置运行多个 MPD 实例。
将 MPD 设置成哪种方式运行取决于使用它的方式:例如,单用户配置更容易设置,也可能更适合桌面系统环境。全系统范围配置则更适合多用户共享单个 MPD 实例的常在线音频服务器。
为了让 MPD 能够播放音频,须要先设置好 ALSA (可选 PulseAudio、PipeWire),并让它们正常工作。下文的 #配置音频小节会说明 ALSA、PulseAudio 或者 PipeWire 所需的参数。
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 配置文件。 - 避免不可预见的文件夹和文件权限错误。
配置文件和目录的位置
单用户模式下,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 配置文件中的 user
与 group
变量。
启动或启用 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 优化配置,无需任何重采样或转换。
全系统范围配置
默认的 /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 的通配符。在当前目录以及所有的子目录中匹配到的文件都会在后续更新中被排除在外。
通过 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 放弃超级用户权限,而使用配置中用户组的权限:
- 以 root 身份通过 systemd 启动 MPD 后,MPD 首先读取
/etc/mpd.conf
文件。 - 然后 MPD 读取配置中的
user
变量,从 root 切换到该用户。 - 最后 MPD 读取配置中的其余设置内容,根据内容配置自己。在配置文件中,可以使用
~
指向用户的家目录,而非 root 的目录。
多 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 守护进程冲突)。
卫星模式设置
#在 Icecast 服务中运行中所述方法能够使用,但当两个 MPD 实例写相同的数据库文件时,理论上可能导致数据库问题。MPD 有一种卫星模式,该模式下,一个实例可以从另一个已经运行的 MPD 实例上接收数据库。
在 config-icecast
中添加以下代码,其中 host
和 port
表示主 MPD 服务的主机名和端口号:
database { plugin "proxy" host "localhost" port "6600" }
客户端
需要安装独立客户端才能控制 MPD。较为详细的客户端列表请查阅这里。常用的有这些:
命令行客户端
- mpc — MPD 服务的命令行用户界面,由 C 语言编写而成。
终端客户端
- clerk — 使用 Rofi 的 MPD 客户端。
- gomp — 受 ncmpcpp 启发而成的 MPD 客户端,内置音乐集封面视图功能和 LastFM 集成。
- inori — 一个有着折叠式音乐库视图和高效搜索功能的 MPD 客户端。
- mmtc — 小型 MPD 终端客户端,精简但可定制性较强。
- ncmpc — MPD 的 NCursers 客户端,由 C++ 编写而成。
- ncmpcpp — 与 ncmpc 几乎完全相同的客户端,但是有一些用 C++ 写成的新功能(标签编辑器、搜索引擎)。
- ncmpy — 基于 Curses,用 Python 编写而成的 MPD 客户端。
- nncmpp — 另一个 MPD 客户端。实际上是 Sonata 的简化 TUI 版本。
- pms — NCursers 客户端,由 Go 语言编写而成,有着较强的可定制性。
- rmpc — 受 ncmpcpp 和 ranger 启发的 MPD 客户端,通过使用多种图形协议可支持专辑封面,同时支持自定义配置。
- vimpc — 基于 Curses 的 MPD 客户端,有着类似 vi 的按键绑定。
图形界面客户端
- Ario — 一个功能非常丰富的 GTK3 界面的客户端,灵感来自于 Rhythmbox。
- Cantata — Qt5 客户端,已停止维护,具有丰富的功能和可配置的界面。
- CoverGrid — GTK3 界面客户端,专注于音乐专辑。
- Plattenalbum — 小巧而现代化的 GTK4 界面客户端,用 Python 编写而成。
- QMPDClient — Qt5 界面的客户端。
- Quimup — 简洁的 Qt5 图形前端,用 C++ 编写而成。
- RompЯ — MPD 的网页客户端。
- SkyMPC — 简洁的 Qt5 图形客户端。
- Sonata — 一个用 Python 写的客户端,非常优雅。
- Xfce MPD Panel Plugin — Xfce4 面板的 MPD 插件。
- Xfmpc — GTK 图形客户端,专注于低占用。
- ympd — 使用 Websockets 和 Bootstrap/JS 编写的独立 MPD 网络图形用户界面。
- https://ympd.org/ || ympdAUR
- Ymuse — 简单、实用且快捷的 GTK 前端(客户端),用 Go 语言编写而成。
另见
- MPD 论坛
- MPD 用户手册
- MPD 的相关维基百科文章
- MPD 的相关 GitHub 仓库
- mopidy包 是用 Python 编写的 MPD 替代品。注意 Mopidy 并不能完全替代 MPD,它的优点是,可以使用插件播放来自云服务的音乐,如 Spotify、SoundCloud 和 Google Play Music。