音乐播放器守护进程

来自 ArchWiki
(重定向自 Mpd

MPD(音乐播放器守护进程)是一个具有服务器-客户端架构的音频播放器。它可以播放音频文件、组织播放列表并维护音乐数据库,同时使用非常少的资源。为了与之交互,需要一个单独的客户端

安装

安装 mpd 软件包,或 mpd-gitAUR 开发版本。

配置

MPD 可以在#用户配置#系统级配置模式下运行(设置应用于所有用户)。也可以在#多 MPD 设置中运行 MPD 的多个实例。设置 MPD 的方式取决于其预期用途:本地用户配置更易于设置,并且可能更适合桌面系统。系统级设置可能更适合具有多个用户但共享 MPD 实例的常开音频服务器。

为了使 MPD 能够播放音频,必须设置并运行 ALSA,可选择 PulseAudioPipeWire#音频配置章节随后描述了 ALSAPulseAudioPipeWire 所需的参数。

MPD 在文件 mpd.conf(5) 中配置,该文件可能位于各种路径中,具体取决于所选的设置(系统级或用户级)。简而言之,常用的两个位置是

  1. 用户配置模式下的 ~/.config/mpd/mpd.conf,这是搜索的第一个位置,
  2. 系统级配置中的 /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 配置文件中使用 usergroup 变量。

启动/启用 用户单元 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)。

系统级配置

注意: 具有系统级 MPD 配置的 PulseAudio 用户必须实施一个 解决方法,以便以其自己的用户身份运行 MPD!

默认的 /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 通配符列表。然后,当前目录和所有子目录中匹配的文件将从后续更新中排除。

注意: MPD 能够读取某些存档文件格式中的音乐文件,并且如果它们位于音乐目录中,则会在更新期间添加这些文件;tar 是已知的例外。

使用 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 启动的步骤:

  1. 由于 MPD 由 systemd 以 root 身份启动,因此它首先读取 /etc/mpd.conf 文件。
  2. MPD 读取配置中的 user 变量,并从 root 更改为此用户。
  3. 然后,MPD 读取配置文件的其余部分并相应地配置自身。配置文件中 ~ 的使用指向用户的主目录,而不是 root 的目录。

多 MPD 设置

运行 Icecast 服务器

对于第二个 MPD(例如,使用 Icecast 输出以通过网络共享音乐),使用与上述相同的音乐和播放列表,只需复制上述配置文件并创建一个新文件(例如,/home/username/.mpd/config-icecast),并且仅更改 log_fileerror_filepid_filestate_file 参数(例如 mpd-icecast.logmpd-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 服务器命令行用户界面。
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 — 用 C++ 编写的 MPD 的 Ncurses 客户端。
https://www.musicpd.org/clients/ncmpc/ || ncmpc
  • ncmpcppncmpc 的几乎精确的克隆,用 C++ 编写,具有一些附加功能(标签编辑器、搜索引擎)。
https://rybczak.net/ncmpcpp/ || ncmpcpp
  • ncmpy — 用 Python 编写的基于 Curses 的 MPD 客户端。
https://repo.cykerway.com/ncmpy || ncmpyAUR
  • nncmpp — 又一个 MPD 客户端。实际上,它是 Sonata 的简化 TUI 版本。
https://git.janouch.name/p/nncmpp/ || nncmpp-gitAUR
  • pms — 用 Go 编写的高度可配置且可访问的 ncurses 客户端。
https://github.com/kimtore/pms || pmus-gitAUR
  • rmpc — 受 ncmpcpp 和 ranger 启发的、可配置的 MPD 客户端,通过各种图形协议支持专辑封面艺术。
https://mierak.github.io/rmpc/ || rmpc-gitAUR
  • vimpc — 具有 vi 风格的按键绑定的基于 Ncurses 的 MPD 客户端。
https://github.com/boysetsfrog/vimpc || vimpc-gitAUR

图形界面

  • Ario — 非常功能丰富的 GTK3 GUI 客户端,用于 MPD,灵感来自 Rhythmbox
https://ario-player.sourceforge.net/ || ario
  • Cantata — 未维护的高功能、Qt5 客户端,用于 MPD,具有高度可配置的界面。
https://github.com/CDrummond/cantata || cantataAUR
  • CoverGrid — GTK3 GUI 客户端,专注于专辑而不是单曲。
https://www.suruatoel.xyz/codes/mcg || mcgAUR
  • Plattenalbum — 用 Python 编写的现代且小巧的 GTK4 MPD 客户端。
https://github.com/SoongNoonien/plattenalbum || plattenalbumAUR
  • QMPDClient — Qt5 GUI 客户端。
https://bitcheese.net/QMPDClient/ || qmpdclientAUR
  • Quimup — 用 C++ 编写的简单 Qt5 前端,用于 MPD。
https://sourceforge.net/projects/quimup/ || quimupAUR
  • RompЯ — 用于 MPD 的 Web 客户端。
https://fatg3erman.github.io/RompR/ || romprAUR
  • SkyMPC — 简单的 MPD 客户端,由 Qt5 提供支持。
https://github.com/soramimi/SkyMPC || skympc-gitAUR
  • Sonata — 优雅的 Python GTK 客户端。
https://www.nongnu.org/sonata/ || sonata-gitAUR
  • Xfce MPD 面板插件 — 用于 Xfce4 面板的 MPD 插件。
https://goodies.xfce.org/projects/panel-plugins/xfce4-mpc-plugin || xfce4-mpc-plugin
  • Xfmpc — 图形 GTK MPD 客户端,专注于低占用空间。
https://goodies.xfce.org/projects/applications/xfmpc || xfmpc
  • ympd — 用 C 编写的独立 MPD Web GUI,利用 Websockets 和 Bootstrap/JS。
https://ympd.org/ || ympdAUR
  • Ymuse — 用 Go 编写的用于音乐播放器守护进程的简单、实用且快速的 GTK 前端(客户端)。
https://yktoo.com/en/software/ymuse/ || ymuseAUR

参见