音乐播放器守护进程
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 的文件db_file
- 音乐数据库state_file
- MPD 的当前状态在此处记录playlist_directory
- 播放列表保存到的目录music_directory
- MPD 扫描音乐的目录sticker_file
- 贴纸数据库
用户配置
MPD 可以按用户配置。以普通用户身份运行它具有以下优点:
- 将所有 MPD 配置文件分组到一个目录
~/.config/mpd/
(或$HOME
下的任何其他目录)中。 - 避免意外的目录和文件权限错误。
配置文件和目录的位置
在用户模式下,配置从 $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
# Recommended location for database db_file "~/.config/mpd/database" # If running mpd using systemd, delete this line to log directly to systemd. log_file "syslog" # The music directory is by default the XDG directory, uncomment to amend and choose a different directory #music_directory "~/music" # Uncomment to refresh the database whenever files in the music_directory are changed #auto_update "yes" # Uncomment to enable the functionalities #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
参数指定音频输出的唯一名称。可以使用软件包 alsa-utils 中的 aplay --list-pcm
显示的确切设备可以选择使用 device
选项指示。
~/.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 daemon start (if no other user instance exists) [ ! -s ~/.config/mpd/pid ] && mpd
脚本化配置
mpd-configure 工具创建了一个针对 bit perfect 音频播放优化的 MPD 配置,不进行任何重采样或转换,使用 ALSA 接口硬件地址 (hw:x,y)。
系统级配置
默认的 /etc/mpd.conf
将设置保存在 /var/lib/mpd
中,该目录分配给用户以及主要组 MPD。
音乐目录
音乐目录由配置文件 /etc/mpd.conf
中的选项 music_directory
定义。
MPD 需要对音乐收藏的所有父目录具有执行权限,并且还需要对包含音乐文件的所有目录具有读取访问权限。这可能与用户目录(例如 ~/Music
,音乐存储在此处)的默认配置冲突。
虽然有几种解决方案来解决此问题,但以下方法之一应该最实用:
- 切换到#用户配置模式
- 将
mpd
用户添加到用户的组,并授予用户目录组执行权限。这样,mpd
用户就有权打开用户目录
# gpasswd -a mpd user_group_name $ chmod 710 /home/user_directory
- 将音乐收藏存储在不同的路径中,可以是
- 完全移动它,
- 使用绑定挂载,
- 或使用 Btrfs#子卷(您应该使用
/etc/fstab
中的条目使此更改持久化)。
MPD 配置文件必须仅定义一个音乐目录。如果音乐收藏包含在多个目录下,请在 /var/lib/mpd
中的主音乐目录下创建符号链接。请记住相应地设置被链接目录的权限。
要从更新中排除文件(或多个文件),请在其父目录中创建一个名为 .mpdignore
的文件。该文件的每一行可能包含一个 shell 通配符列表。然后,当前目录和所有子目录中匹配的文件将从后续更新中排除。
使用 systemd 启动
可以使用 mpd.service
使用 systemd 控制 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 启动工作流程
MPD 永远不应以 root 身份运行;您可以使用配置中的 user
选项使 MPD 在初始化后更改其用户 ID。如果您以非特权用户身份启动 MPD,请勿使用此选项。为了描述 MPD 如何放弃其超级用户权限并切换到配置中设置的用户的权限,下面列出了正常 MPD 启动的步骤:
- 由于 MPD 由 systemd 以 root 身份启动,因此它首先读取
/etc/mpd.conf
文件。 - MPD 读取配置中的
user
变量,并从 root 更改为此用户。 - 然后,MPD 读取配置文件的其余部分并相应地配置自身。配置文件中
~
的使用指向用户的主目录,而不是 root 的目录。
多 MPD 设置
运行 Icecast 服务器
对于第二个 MPD(例如,使用 Icecast 输出以通过网络共享音乐),使用与上述相同的音乐和播放列表,只需复制上述配置文件并创建一个新文件(例如,/home/username/.mpd/config-icecast
),并且仅更改 log_file
、error_file
、pid_file
和 state_file
参数(例如 mpd-icecast.log
、mpd-icecast.error
等)。为音乐和播放列表目录使用相同的目录路径将确保第二个 MPD 使用与第一个 MPD 相同的音乐收藏,例如,在第一个守护进程下创建和编辑播放列表也会影响第二个守护进程。用户不必为第二个守护进程重新创建相同的播放列表。从上面的 ~/.xinitrc
中以相同的方式调用第二个守护进程 - 但请确保使用不同的端口号,避免与第一个 MPD 守护进程冲突。
卫星设置
#运行 Icecast 服务器 中描述的方法有效,但至少在理论上可能会导致数据库出现问题,因为两个 MPD 实例都尝试同时写入同一个数据库文件。MPD 具有 卫星模式,其中一个实例可以从已运行的 MPD 实例接收数据库。
在您的 config-icecast
中添加此内容,其中主机和端口反映您的主 MPD 服务器
database { plugin "proxy" host "localhost" port "6600" }
客户端
需要单独的客户端来控制 MPD。请参阅 mpd 网站上的长客户端列表。流行的选项有:
命令行
- mpc — 用 C 语言编写的 MPD 服务器命令行用户界面。
控制台
- clerk — 使用 Rofi 的 MPD 客户端。
- gomp — 受 ncmpcpp 启发的 MPD 客户端,具有内置封面艺术视图和 LastFM 集成。
- inori — 具有折叠库视图和高效搜索功能的 MPD 客户端。
- mmtc — 旨在简单但高度可配置的最小 mpd 终端客户端。
- ncmpc — 用 C++ 编写的 MPD 的 Ncurses 客户端。
- ncmpcpp — ncmpc 的几乎精确的克隆,用 C++ 编写,具有一些附加功能(标签编辑器、搜索引擎)。
- ncmpy — 用 Python 编写的基于 Curses 的 MPD 客户端。
- nncmpp — 又一个 MPD 客户端。实际上,它是 Sonata 的简化 TUI 版本。
- pms — 用 Go 编写的高度可配置且可访问的 ncurses 客户端。
- rmpc — 受 ncmpcpp 和 ranger 启发的、可配置的 MPD 客户端,通过各种图形协议支持专辑封面艺术。
- vimpc — 具有 vi 风格的按键绑定的基于 Ncurses 的 MPD 客户端。
图形界面
- Ario — 非常功能丰富的 GTK3 GUI 客户端,用于 MPD,灵感来自 Rhythmbox。
- Cantata — 未维护的高功能、Qt5 客户端,用于 MPD,具有高度可配置的界面。
- CoverGrid — GTK3 GUI 客户端,专注于专辑而不是单曲。
- Plattenalbum — 用 Python 编写的现代且小巧的 GTK4 MPD 客户端。
- QMPDClient — Qt5 GUI 客户端。
- Quimup — 用 C++ 编写的简单 Qt5 前端,用于 MPD。
- RompЯ — 用于 MPD 的 Web 客户端。
- SkyMPC — 简单的 MPD 客户端,由 Qt5 提供支持。
- Sonata — 优雅的 Python GTK 客户端。
- Xfce MPD 面板插件 — 用于 Xfce4 面板的 MPD 插件。
- Xfmpc — 图形 GTK MPD 客户端,专注于低占用空间。
- ympd — 用 C 编写的独立 MPD Web GUI,利用 Websockets 和 Bootstrap/JS。
- https://ympd.org/ || ympdAUR
- Ymuse — 用 Go 编写的用于音乐播放器守护进程的简单、实用且快速的 GTK 前端(客户端)。
参见
- MPD 论坛
- MPD 用户手册
- MPD 维基百科文章
- MPD GitHub 仓库
- mopidy 是用 Python 编写的 MPD 的替代品。请注意,它不是 MPD 的完整替代品,它的优势在于它具有用于播放来自云服务(如 Spotify、SoundCloud 和 Google Play Music)的音乐的插件。