Music Player Daemon (简体中文) - ArchWiki

# Music Player Daemon (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- MPD/Tips and Tricks
- MPD/Troubleshooting

翻译状态：本文是 Music_Player_Daemon 的翻译。上次翻译日期：2015-01-17。如果英文版本有所更改，则您可以帮助同步翻译。

MPD（Music Player Daemon，音乐播放器守护进程）是一个服务器-客户端架构的音频播放器。占用极少资源的同时有着播放音频、管理播放列表和音乐等功能。与它进行交互需要一个单独的 客户端。

## 安装

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

## 设置

MPD 可以以 #单用户配置、#全系统范围配置 （即配置应用给所有用户）模式运行，也可以在 #MPD 多实例运行设置[断开的链接：无效的部分] 下同时运行多个实例。将 MPD 设置成哪种方式运行取决于使用它的方式：例如，单用户配置更容易设置，也可能更适合桌面系统环境。全系统范围配置则更适合多用户共享单个 MPD 实例的常在线音频服务器。

为了让 MPD 能够播放音频，须要先设置好 ALSA (可选 PulseAudio)，并让它们正常工作。下文的 #音频配置[断开的链接：无效的部分] 小节会说明 ALSA 或者 PulseAudio 所需的参数。

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 配置文件。
- 避免不可预见的文件夹和文件权限错误。

### 全系统范围配置

警告： 使用 PulseAudio 并且将 mpd 设置为全局配置的用户可能需要 一个小技巧 来作为自己的用户运行 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 放弃超级用户权限，而使用配置中用户组的权限。

1. 以 root 身份通过 systemd 启动 MPD 后，MPD 首先读取 `/etc/mpd.conf` 文件。
2. 然后 MPD 读取 `/etc/mpd.conf` 中的用户变量，从 root 切换到该用户。
3. 最后 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 自启动

注意： 本章节假设 systemd 用户会话管理器已经运行。具体信息查看 systemd/User (简体中文)。

mpd 提供了用户服务文件 `/usr/lib/systemd/user/mpd.service`。配置文件预计存在 `~/.mpdconf` 或者 `~/.config/mpd/mpd.conf` 中，如果想要使用不同的路径，参考 systemd (简体中文)#修改现存单元文件。进程不会以 root 启动，所以在 MPD 配置文件中不能使用 `user` 和 `group` 变量，进程已经拥有用户权限，因此没有必要进一步更改他们。

所有你需要做的是启用和启动 `mpd` 用户服务。

注意：

- mpd 也提供了系统服务文件 `/usr/lib/systemd/system/mpd.service`，但是当以 root 身份启动进程时，进程不会读取用户配置文件而是会回落到 `/etc/mpd.conf`。全局配置[断开的链接：无效的部分] 中已经介绍过了。
- 确保停用任何以前用过的启动 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原则的客户端。 拥有所有的基本功能。

  https://mpd.fandom.com/wiki/Client:Mpc || mpc

- ncmpc — 一个使用NCursers的客户端。

  https://mpd.fandom.com/wiki/Client:Ncmpc || ncmpc

- ncmpcpp — 差不多是完全克隆ncmpc的客户端， 但是有一些用C++写成的新功能(tag editor, search engine)

  https://rybczak.net/ncmpcpp/ || ncmpcpp

- 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。

  http://ario-player.sourceforge.net/ || ario

- QmpdClient — 用 Qt 4.x 写的图形客户端。

  https://bitcheese.net/QMPDClient || qmpdclientAUR

- Sonata — 一个用 Python 写的客户端，非常优雅。

  https://www.nongnu.org/sonata/ || sonataAUR

- gmpc — GTK2 写的 MPD 前端。被设计为轻量且易用，同时也对所有的 MPD 的特性提供完全访问。为用户提供几种不同的方法来浏览音乐。可以通过很多可获得的插件来扩展。

  http://gmpclient.org/ || gmpcAUR

- Cantata — 多功能的 Qt4, Qt5 或者 KDE4 客户端，具有很多可配置的接口。

  https://code.google.com/p/cantata/ || cantata

### 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 上可以查看到客户端列表。

## 参阅

- Sorted List of MPD Clients
- MPD forum

Category:

- Music (简体中文)

Hidden categories:

- Pages with broken section links
- Pages with broken package links