# Music Player Daemon (简体中文)

相关文章

- MPD/Tips and Tricks
- MPD/Troubleshooting

翻译状态： 本文是英文页面 Music_Player_Daemon 的翻译，最后翻译时间：2015-01-17，点击这里可以查看翻译后英文页面的改动。

MPD (music player daemon) 是一个服务器-客户端架构的音频播放器. 功能包括音频播放, 播放列表管理和音乐库维护，所有功能占用的资源都很少. 你需要一个独立的客户端[broken link: invalid section] 与它进行交互

## 安装

安装 mpd，或者开发版本—mpd-gitAUR。

注意: Mopidy 是另一个选择，其基于插件实现。可以通过 mopidy 和 mopidy-gitAUR获得。注意这不是一个完全的 MPD 代替品。

## 设置

MPD 可以本地运行(单用户设置)、全局运行(为所有用户设置)，也可以同时运行多个实例。将 MPD 设置成哪种方式运行取决于它被如何使用，例如，设置成本地运行就很适合桌面系统。

为了使 MPD 能够播放音频，需要先设置好 ALSA 或者 OSS (可选 PulseAudio)。

MPD 的配置文件是 `mpd.conf`，运行方式不同，文件的位置也不同。下面是常用的配置选项:

- `pid_file` - MPD进程ID存储文件
- `db_file` - 音乐数据库
- `state_file` - 记录MPD当前状态
- `playlist_directory` - 播放列表存储文件夹
- `music_directory` - MPD在这个文件夹中扫描音乐
- `sticker_file` - 标签数据库

### 全局配置

警告: 使用 PulseAudio 并且将 mpd 设置为全局配置的用户可能需要 一个小技巧 来作为自己的用户运行 mpd！

默认的 `/etc/mpd.conf` 将配置保存在 `/var/lib/mpd`，使用 mpd 作为默认的用户，然而，默认 `/var/lib/mpd` 的拥有者是 root ,我们需要改变拥有者，使 mpd 可以写这里：

    # chown -R mpd /var/lib/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` 中）

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` 文件中的相应行（具体查看 `man 5 mpd.conf`）。

如果你使用不同（甚至是多种）网络或者本地套接字，或者不希望使用网络套接字，只需要简单的添加，更改或者删除 `[Socket]` 章节下的以 `"ListenStream="` 开头的行。

    /etc/systemd/system/mpd.socket

    [Unit]
    Description=Music Player Daemon Sockets

    [Socket]
    ListenStream=/var/run/mpd/socket
    ListenStream=6600

    [Install]
    WantedBy=sockets.target

#### 配置音频

要使 MPD 的声音和其他程序的声音相独立，在 mpd.conf 中取消此开关的注释或添加此开关：

    /etc/mpd.conf

    mixer_type			"software"

ALSA 用户需要做以下设备定义，以便 MPD 客户端和其他程序可以各自单独控制声音。

    /etc/mpd.conf

    audio_output {
            type            "alsa"
            name            "My Sound Card"
            mixer_type      "software"      # optional
    }

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 行为这一方面上的困惑很有必要。

### 本地配置（单用户）

MPD 可以被配置为单用户（而不是全局配置 MPD 的典型方法）。以普通用户运行 MPD 有以下好处：

- 一个可以包含所有 MPD 配置文件的单独目录 `~/.config/mpd/` （或者 `$HOME` 下的任一目录）。
- 更容易避免不可预见的读/写权限错误。

好的做法是为所有需要的文件和播放列表创建一个单独目录。该目录可以是任何一个你可以读写的目录。例如： `~/.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原则的客户端。 拥有所有的基本功能。

  http://mpd.wikia.com/wiki/Client:Mpc || mpc

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

  http://mpd.wikia.com/wiki/Client:Ncmpc || ncmpc

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

  http://unkart.ovh.org/ncmpcpp/ || ncmpcpp

- pms — Highly configurable and accessible ncurses client

  http://pms.sourceforge.net/ || pmusAUR[broken link: archived in aur-mirror]

- vimpc — 基于ncurses的MPD客户端， 使用类似vi的快捷键

  http://sourceforge.net/projects/vimpc/ || vimpcAUR[broken link: archived in aur-mirror]

### 图形界面下

- Ario — 一个功能非常丰富的 GTK2 界面的客户端，灵感来自于 Rhythmbox。

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

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

  http://bitcheese.net/wiki/QMPDClient || qmpdclient

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

  http://www.nongnu.org/sonata/ || sonata

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

  http://gmpclient.org/ || gmpc

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

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

### Web界面

- Patchfork — 用 PHP 和 Ajax 写的 web 客户端

  http://mpd.wikia.com/wiki/Client:Pitchfork || patchfork-gitAUR[broken link: archived in aur-mirror].

在 mpd wiki 上可以查看到客户端列表。

## 参阅

- Sorted List of MPD Clients
- MPD forum

Category:

- Multimedia players (简体中文)

Hidden categories:

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