Difference between revisions of "Music Player Daemon (简体中文)"

From ArchWiki
Jump to: navigation, search
(Stable version: Now the service file are in the package.)
(flagged broken section links)
(Tag: wiki-scripts)
 
(126 intermediate revisions by 7 users not shown)
Line 1: Line 1:
[[Category:Player (简体中文)]]
+
[[Category:Multimedia players (简体中文)]]
 
[[de:Music Player Daemon]]
 
[[de:Music Player Daemon]]
 
[[en:Music Player Daemon]]
 
[[en:Music Player Daemon]]
Line 5: Line 5:
 
[[fr:MPD]]
 
[[fr:MPD]]
 
[[it:Music Player Daemon]]
 
[[it:Music Player Daemon]]
 +
[[ja:Music Player Daemon]]
 
[[nl:Music Player Daemon]]
 
[[nl:Music Player Daemon]]
 
[[pl:Music Player Daemon]]
 
[[pl:Music Player Daemon]]
 
[[ru:Music Player Daemon]]
 
[[ru:Music Player Daemon]]
 
[[sr:Music Player Daemon]]
 
[[sr:Music Player Daemon]]
[[tr:Music_Player_Daemon]]
+
[[tr:Music Player Daemon]]
{{Article summary start}}
+
{{Related articles start (简体中文)}}
{{Article summary text|Installation, configuration and basic troubleshooting of MPD.}}
+
{{Related|MPD/Tips and Tricks}}
{{Article summary heading|Required software}}
+
{{Related|MPD/Troubleshooting}}
{{Article summary link|Music Player Daemon|http://mpd.wikia.com}}
+
{{Related articles end}}
{{Article summary heading|Related Articles}}
+
{{TranslationStatus (简体中文)|Music_Player_Daemon|2015-01-17|352912}}
{{Article summary wiki|MPD/Tips and Tricks}}
+
{{Article summary wiki|MPD/Troubleshooting}}
+
{{Article summary heading|Other sources}}
+
{{Article summary text|[[Wikipedia:MPD|Wikipedia article]]}}
+
{{Article summary end}}
+
{{Translateme (简体中文)}}
+
{{TranslationStatus (简体中文)|Music_Player_Daemon|2012-12-03|237746}}
+
MPD (Music Player Daemon) 是一个C/S结构的音乐播放器。MPD 作为一个守护程序运行于后台, 管理播放列表和音乐数据库, 占用很少的资源。为了交互管理,你还需要一个单独的客户端。更多信息可以在 [http://www.musicpd.org/ 网站]找到。
+
  
== Installation ==
+
'''[http://mpd.wikia.com MPD]''' ('''m'''usic '''p'''layer '''d'''aemon) 是一个服务器-客户端架构的音频播放器. 功能包括音频播放, 播放列表管理和音乐库维护,所有功能占用的资源都很少. 你需要一个独立的[[#Clients|客户端]]{{Broken section link}} 与它进行交互
=== Stable version ===
+
The latest stable version of {{Pkg|mpd}} is available in the [[official repositories]].
+
  
=== Git version ===
+
== 安装 ==
Should users wish to run an experimental version, the [[AUR]] offers several from which to choose. For example, {{AUR|mpd-git}}.
+
安装 {{Pkg|mpd}},或者开发版本—{{AUR|mpd-git}}
  
== Setup ==
+
{{注意|[http://www.mopidy.com Mopidy] 是另一个选择,其基于插件实现。可以通过 {{Pkg|mopidy}} 和 {{AUR|mopidy-git}}获得。注意这不是一个完全的 MPD [http://docs.mopidy.com/en/latest/ext/mpd/#limitations 代替品]。}}
MPD is able to run globally (settings apply to all users), locally (per user settings), and in multiple instances.
+
The way of setting up mpd depends on the way it is intended to be used.
+
A local configuration may prove more useful on a desktop system than on a system that is used by several people simultaneously.
+
  
For a comfortable use, it is sensible to provide MPD access to the following files and directories:
+
== 设置 ==
* mpd.db - The music database
+
* mpd.pid -  The file where mpd stores its process ID
+
* mpd.log - mpd logs here
+
* mpdstate - mpd's current state is noted here
+
* playlists - the folder where playlists are saved into
+
  
In order for MPD to be able to play back audio, [[ALSA]], [[PulseAudio]] or [[OSS]] needs to be setup and working.
+
MPD 可以本地运行(单用户设置)、全局运行(为所有用户设置),也可以同时运行多个实例。将 MPD 设置成哪种方式运行取决于它被如何使用,例如,设置成本地运行就很适合桌面系统。
  
=== Global Configuration ===
+
为了使 MPD 能够播放音频,需要先设置好 [[Advanced Linux Sound Architecture (简体中文)|ALSA]] 或者 [[Open Sound System (简体中文)|OSS]] (可选 [[PulseAudio (简体中文)|PulseAudio]])。
{{Note|For user-specific permissions, change the "user" line above to reflect one of the system users.}}
+
{{Warning|Users of PulseAudio with a local mpd have to implement a [[Music Player Daemon/Tips and Tricks#Local (with separate mpd user)|workaround]] in order to run mpd as its own user!}}
+
  
MPD comes with an example configuration file, available at {{ic|/usr/share/doc/mpd/mpdconf.example}}. This file holds an abundance of information on MPD configuration, and holds default mixer values.
+
MPD 的配置文件是 {{ic|mpd.conf}},运行方式不同,文件的位置也不同。下面是常用的配置选项:
 +
* {{ic|pid_file}} - MPD进程ID存储文件
 +
* {{ic|db_file}} - 音乐数据库
 +
* {{ic|state_file}} - 记录MPD当前状态
 +
* {{ic|playlist_directory}} - 播放列表存储文件夹
 +
* {{ic|music_directory}} - MPD在这个文件夹中扫描音乐
 +
* {{ic|sticker_file}} - 标签数据库
  
Normally,{{ic|/etc/mpd.conf}} is created when installing mpd. If not, copy the included example file to {{ic|/etc/mpd.conf}}.
+
=== 全局配置 ===
# cp /usr/share/doc/mpd/mpdconf.example /etc/mpd.conf
+
  
==== Editing mpd.conf ====
+
{{警告|使用 PulseAudio 并且将 mpd 设置为全局配置的用户可能需要 [[Music Player Daemon/Tips and tricks#Local (with separate mpd user)|一个小技巧]] 来作为自己的用户运行 mpd!}}
The default Arch install keeps the setup in {{ic|/var/lib/mpd}} and uses "mpd" as default user.
+
  
Edit {{ic|/etc/mpd.conf}} to reflect as such:
+
默认的 {{ic|/etc/mpd.conf}} 将配置保存在 {{ic|/var/lib/mpd}},使用 '''mpd''' 作为默认的用户,然而,默认 {{ic|/var/lib/mpd}} 的拥有者是 '''root''' ,我们需要改变拥有者,使 '''mpd''' 可以写这里:
{{hc|/etc/mpd.conf|
+
 
music_directory      "/home/user/music"
+
# chown -R mpd /var/lib/mpd
playlist_directory    "/var/lib/mpd/playlists"
+
 
db_file              "/var/lib/mpd/mpd.db"
+
编辑 {{ic|/etc/mpd.conf}},将你的音乐目录加入到 {{ic|music_directory}}:
log_file              "/var/log/mpd/mpd.log"
+
 
pid_file              "/run/mpd/mpd.pid"
+
music_directory "/path/to/music"
state_file            "/var/lib/mpd/mpdstate"
+
 
user                  "mpd"
+
==== 音乐目录 ====
# bind_to_address      "127.0.0.1"
+
 
# port                  "6600"
+
MPD需要拥有 '''所有''' 音乐收藏父目录的 {{ic|+x}} 权限并且可以读包含音乐的目录,这经常与用户的音乐目录的默认设置冲突。
}}
+
 
Now change permissions for mpd to write to {{ic|/var/log/mpd/mpd.log}}, otherwise mpd will return an error when it is started. The best way is to make the {{ic|/var/log/mpd/mpd.log}} belong to the mpd [[Users and Groups#Group management|user]].
+
有很多方法可以解决这个问题,下面是其中不错的一个
  # chown -R mpd /var/log/mpd  
+
* [[#本地配置(单用户)|将 MPD 作为用户运行]]
Run this to create the /run/mpd dir:
+
* 将 mpd 用户添加到登录组,并授予用户目录组权限。
  # systemd-tmpfiles --create mpd.conf
+
# gpasswd -a mpd <your login group>
To change the volume for mpd independent from other programs, uncomment or add this switch in mpd.conf:
+
$ chmod 710 /home/<your home dir>
 +
* 采取以下方式将音乐集合放到不同的路径
 +
(a)完全移动
 +
(b)绑定挂载
 +
(c)使用 [[Btrfs#Subvolumes|Btrfs 子卷]](需要将这一永久改变写入 {{ic|/etc/fstab}} 中)
 +
 
 +
MPD 配置必须仅包含一个目录,如果音乐集包含在多个目录下,那么在 {{ic|/var/lib/mpd}} 的主音乐目录下创建符号链接。记得为被链接的目录设置相应的权限。
 +
 
 +
==== 启动 MPD ====
 +
 
 +
可以使用 [[systemd (简体中文)#使用单元|systemd]] 来控制 MPD 服务,即{{ic|mpd.service}},第一次启动 MPD 时会花费一些时间,因为 MPD 会扫描音乐目录。
 +
 
 +
安装一个客户端程序 ({{Pkg|ncmpc}} 是一个轻便易用的客户端程序),享受音乐吧!
 +
 
 +
===== 套接字启动 =====
 +
 
 +
如果启用了 {{ic|mpd.socket}},但没有启用 {{ic|mpd.service}},systemd 不会立刻启动 mpd,而是会监听相应的套接字。当一个 mpd 客户端试图连接其中的套接字,systemd 将启动 {{ic|mpd.service}},
 +
然后透明地将端口的控制权交给 mpd 进程。
 +
 
 +
如果你希望监听不同的 UNIX 套接字或者网络端口(甚至是每个类型的多个套接字),或者你完全不希望监听网络端口。你需要 '''添加/编辑/删除''' {{ic|mpd.socket}} 文件中 {{ic|[Socket]}} 章节下的 {{ic|1="ListenStream="}} 行,'''并且'''更改 {{ic|/etc/mpd.conf}} 文件中的相应行(具体查看 {{ic|man 5 mpd.conf}})。
 +
 
 +
如果你使用不同(甚至是多种)网络或者本地套接字,或者不希望使用网络套接字,只需要简单的添加,更改或者删除 {{ic|[Socket]}} 章节下的以 {{ic|1="ListenStream="}} 开头的行。
 +
 
 +
{{hc|/etc/systemd/system/mpd.socket|<nowiki>
 +
[Unit]
 +
Description=Music Player Daemon Sockets
 +
 
 +
[Socket]
 +
ListenStream=/var/run/mpd/socket
 +
ListenStream=6600
 +
 
 +
[Install]
 +
WantedBy=sockets.target
 +
</nowiki>}}
 +
 
 +
==== 配置音频 ====
 +
 
 +
要使 MPD 的声音和其他程序的声音相独立,在 mpd.conf 中取消此开关的注释或添加此开关:
  
 
{{hc|/etc/mpd.conf|
 
{{hc|/etc/mpd.conf|
Line 79: Line 101:
 
}}
 
}}
  
Users of [[PulseAudio]] will need to make the following modification:
+
[[ALSA]] 用户需要做以下设备定义,以便 MPD 客户端和其他程序可以各自单独控制声音。
 +
 
 
{{hc|/etc/mpd.conf|2=
 
{{hc|/etc/mpd.conf|2=
 
audio_output {
 
audio_output {
         type                   "pulse"
+
         type           "alsa"
         name                   "pulse audio"
+
         name           "My Sound Card"
 +
        mixer_type      "software"      # optional
 
}
 
}
 
}}
 
}}
  
Users of [[ALSA]] will want to have the following device definition, which allows software volume control in the MPD client to control the volume separately from other applications.
+
[[PulseAudio]] 用户需要做以下修改:
 +
 
 
{{hc|/etc/mpd.conf|2=
 
{{hc|/etc/mpd.conf|2=
 
audio_output {
 
audio_output {
         type            "alsa"
+
         type            "pulse"
         name            "My Sound Card"
+
         name            "pulse audio"
        mixer_type      "software"      # optional
+
 
}
 
}
 
}}
 
}}
  
Changing the group that MPD runs as may result in errors like "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""
+
PulseAudio 支持多种高级操作。例如:将音频传输到不同的机器。MPD 的高级设置参考 [http://mpd.wikia.com/wiki/PulseAudio Music Player Daemon Community Wiki]。
  
This is because by default MPD runs as member of '''audio''' group and the sound devices under {{Ic|/dev/snd/}} are owned by this group, so add user {{Ic|mpd}} to group {{Ic|audio}}.
+
==== 更改用户 ====
# gpasswd -a mpd audio
+
  
===== Music directory =====
+
更改用户组,可能会导致 MPD 运行出现以下类似错误: {{ic|output: Failed to open "My ALSA Device"}}, {{ic|[alsa]: Failed to open ALSA device "default": No such file or directory}} {{ic|player_thread: problems opening audio device while playing "Song Name.mp3"}}
MPD needs to have {{ic|+x}} permissions on ''all'' parent directories to the music collection (ie. if it's located outside of "mpd" home directory {{ic|/var/lib/mpd}}). By default useradd sets permissions on home directories to {{ic|1700 drwx------}}. Thus users will most likely need to remount the music directory under a directory that mpd has access to -- this only applies if running as the 'mpd' user.
+
  
# mkdir /var/lib/mpd/music
+
这是因为 MPD 用户需要是 ''audio'' 组的成员来访问 {{Ic|/dev/snd/}} 下的音频设备。将 MPD 用户添加到 ''audio'' 组里来解决这个问题。
# echo "/home/$USER/music /var/lib/mpd/music none bind" >> /etc/fstab
+
# mount -a
+
# systemctl restart mpd.service
+
Also see [https://bbs.archlinux.org/viewtopic.php?id=86449 this forum thread.]
+
  
An additional solution would be to just create a symbolic link into {{ic|/var/lib/mpd/music}}.
+
  # gpasswd -a '''mpd''' audio
  # mkdir /var/lib/mpd/music
+
# ln -s MUSIC_FOLDER /var/lib/mpd/music/
+
# systemctl restart mpd.service
+
  
If the music collection is contained under multiple directories, create symbolic links under the main music directory in {{ic|/var/lib/mpd}}. Remember to set permissions accordingly on the directories being linked.
+
==== MPD 启动时间轴 ====
  
==== Creating the required files ====
+
下面列出的是 MPD 正常启动的时间轴,用以描述何时 MPD 放弃超级用户权限,而使用配置中用户组的权限。
Now, having finished configuring MPD, the files and directories for MPD to write in need to be created:
+
  
Create the directories and files specified in {{ic|/etc/mpd.conf}}:
+
# 以 root 身份通过 systemd 启动 MPD 后,MPD 首先读取 {{ic|/etc/mpd.conf}} 文件。
# mkdir -p /var/lib/mpd/playlists
+
# 然后 MPD 读取 {{ic|/etc/mpd.conf}} 中的用户变量,从 root 切换到该用户。
# touch /var/lib/mpd/{mpd.db,mpdstate}  
+
# 最后 MPD 读取 {{ic|/etc/mpd.conf}} 中的设置内容,根据内容配置自己。
  
Usually the init-script should properly create {{ic|/run/mpd/}} when starting. The daemon will use this directory to create {{ic|mpd.pid}} in it. However, when running mpd as a different user, requires an update to  the tmpfiles.d: Copy {{ic|/usr/lib/tmpfiles.d/mpd.conf}} to {{ic|/etc/tmpfiles.d/mpd.conf}}:
+
注意,MPD 会改变运行用户,从 root 切换到 {{ic|/etc/mpd.conf}} 文件中命名的一个用户。这样,在配置文件中使用 {{ic|~}} 会正确的指向 home 用户目录,而不是 root 目录。将所有的 {{ic|~}} 修改成 {{ic|/home/username}} 来避免在 MPD 行为这一方面上的困惑很有必要。
Change:
+
d /run/mpd 0755 mpd mpd
+
to:
+
d /run/mpd 0755 ''username'' ''groupname''
+
  
Change the file's permissions so that the daemon can modify them.
+
=== 本地配置(单用户) ===
# chown -R mpd /var/lib/mpd
+
  
==== Create database ====
+
MPD 可以被配置为单用户(而不是全局配置 MPD 的典型方法)。以普通用户运行 MPD 有以下好处:
Creating the database is now accomplished via the update feature of the client, for example {{ic|mpc update}}. You'll need to install the mpc package for this. It is in the official repositories
+
{{Box RED | Note: | Creating the MPD database as root using {{ic|# mpd --create-db}} is deprecated.}}
+
  
==== Timeline of MPD startup ====
+
* 一个可以包含所有 MPD 配置文件的单独目录 {{ic|~/.config/mpd/}} (或者 {{ic|$HOME}} 下的任一目录)。
To depict when MPD drops its superuser privileges and assumes those of the user set in the configuration, the timeline of a normal MPD startup is listed here:
+
* 更容易避免不可预见的读/写权限错误。
  
# Since MPD is started as root by systemd, it first reads the {{ic|/etc/mpd.conf}} file.
+
好的做法是为所有需要的文件和播放列表创建一个单独目录。该目录可以是任何一个你可以读写的目录。例如: {{ic|~/.config/mpd/}} 或者 {{ic|~/.mpd/}}。本章节假设该目录是 {{ic|~/.config/mpd/}},其对应 {{ic|$XDG_CONFIG_HOME}} ( [http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html XDG Base Directory Specification] 的部分)的缺省值 。
# MPD reads the user variable in the {{ic|/etc/mpd.conf}} file, and changes from root to this user.
+
# MPD then reads the contents of the {{ic|/etc/mpd.conf}} file and configures itself accordingly.
+
  
Notice that MPD changes the running user from root to the one named in the {{ic|/etc/mpd.conf}} file.
+
MPD 首先搜索配置文件 {{ic|$XDG_CONFIG_HOME/mpd/mpd.conf}},其次搜索 {{ic|~/.mpdconf}}。还可以通过命令行参数指定其他路径。
This way, uses of {{ic|~}} in the configuration file point correctly to the home user's directory, and not root's directory.  
+
It may be worthwhile to change all uses of {{ic|~}} to {{ic|/home/username}} to avoid any confusion over this aspect of MPD's behavior.
+
  
=== Local Configuration (per user) ===
+
将示例配置文件复制到所需的位置。例如:
MPD does not need to be run globally as a daemon and can rather work per user. The usual method to configure MPD globally is because the listed files and folders in the default configuration file point to directories owned by root (the {{ic|/var}} directory).
+
  
A less used (but perhaps more sensible) method is to make MPD work with files and directories owned by a normal user. Running MPD as a normal user has the benefits of:
+
$ cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf
  
* A single directory {{ic|~/.mpd}} (or any other directory under {{ic|/home/username}}) that will contain all the MPD configuration files.
+
编辑 {{ic|~/.config/mpd/mpd.conf}} 并且指定所需文件:
* Easier to avoid unforeseen read/write permission errors.
+
  
{{Note|This approach will not work with multiple users to having access to MPD at the same time.}}
+
{{hc|~/.config/mpd/mpd.conf|
 +
# Required files
 +
db_file            "~/.config/mpd/database"
 +
log_file          "~/.config/mpd/log"
  
Begin the setup by creating a directory for the required files and the playlists:
+
# 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"
 +
}}
  
{{bc|mkdir -p ~/.mpd/playlists}}
+
创建所有上述配置中提及的文件和目录:
  
Copy the contents of the default MPD configuration file in {{ic|/usr/share/mpd/mpd.conf.example}} to the target user's home directory:
+
$ mkdir ~/.config/mpd/playlists
 +
$ touch ~/.config/mpd/{database,log,pid,state,sticker.sql}
  
{{bc|cp /usr/share/doc/mpd/mpdconf.example ~/.mpdconf}}
+
当配置了所需文件的路径后,就可以启动 MPD 了。要指定配置文件的自定义位置,运行:
  
Create all of the requisite files:
+
$ mpd ''config_file''
  
{{bc|<nowiki>touch ~/.mpd/{mpd.db,mpd.log,mpd.pid,mpdstate}</nowiki>}}
+
==== 在 tty 登陆时自启动 ====
  
Edit {{ic|~/.mpdconf}} to specify these files:
+
要使 MPD 在登陆时启动,在 {{ic|~/.profile}} (或者其他的 [[Autostarting#Shells|自启动文件]] )中添加以下命令:
  
{{hc|~/.mpdconf|
+
# MPD daemon start (if no other user instance exists)
music_directory    "/home/USER/music"            # Keep commented if your XDG directory already points to it
+
[ ! -s ~/.config/mpd/pid ] && mpd
playlist_directory "/home/USER/.mpd/playlists"
+
db_file            "/home/USER/.mpd/mpd.db"
+
log_file          "/home/USER/.mpd/mpd.log"
+
pid_file          "/home/USER/.mpd/mpd.pid"
+
state_file        "/home/USER/.mpd/mpdstate"
+
}}
+
  
or you can use
+
==== 在 X 下自启动 ====
{{bc|sed "s/var\/lib\/mpd\/music/home\/$USER\/music/;
+
    s/var\/lib\/mpd/home\/$USER\/.mpd/;
+
    s/var\/run\/mpd/home\/$USER\/.mpd/;
+
    s/var\/log\/mpd/home\/$USER\/.mpd/" /etc/mpd.conf > ~/.mpd/mpd.conf}}
+
  
MPD can now be started by typing {{ic|mpd}} on the command line.
+
如果你安装了[[Desktop environment (简体中文)|桌面环境]],编辑下面的文件并将其放到 {{ic|~/.config/autostart/}}
  
To have MPD start with the X server add it to [[xprofile]].
+
{{hc|~/.config/autostart/mpd.desktop|<nowiki>
 +
[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
 +
</nowiki>}}
  
==== Start MPD per user with systemd ====
+
如果没有使用桌面环境,将 [[#在 tty 登陆时自启动]] 中的命令加入到 [[Autostarting#Graphical|自启动文件]]。
  
As recommanded above, it is best to use MPD as a service per user. In this case, we will use {{ic|~/.mpd/mpd.conf}} and not start mpd.service as a daemon for the whole system and all users.
+
==== 通过 systemd 自启动 ====
We will NOT use the {{ic|/usr/lib/systemd/sytsem/mpd.service}} which is intended to start the mpd.service as root and for all users.
+
If you already enabled it, just disable it first:
+
{{bc| # systemctl disable mpd.service}}
+
  
If you used to start mpd inside your {{ic|~/.xinitrc}}, comment or delete the line
+
{{注意|本章节假设 systemd 用户会话管理器已经运行。具体信息查看 [[systemd/User (简体中文)]]。}}
{{bc|mpd ~/.mpdconf}}
+
  
Then, edit a new file /etc/systemd/user/mpd.service  
+
{{Pkg|mpd}} 提供了用户服务文件 {{ic|/usr/lib/systemd/user/mpd.service}}。配置文件预计存在 {{ic|~/.mpdconf}} 或者 {{ic|~/.config/mpd/mpd.conf}} 中,如果想要使用不同的路径,参考 [[systemd (简体中文)#修改现存单元文件]]。进程不会以 root 启动,所以在 MPD 配置文件中不能使用 {{ic|user}} 和 {{ic|group}} 变量,进程已经拥有用户权限,因此没有必要进一步更改他们。
{{hc|/etc/systemd/user/mpd.service|
+
[Unit]
+
Description &#61; Music Player Daemon
+
  
[Service]
+
所有你需要做的是启用和启动 {{ic|mpd}} [[systemd/User (简体中文)|用户服务]]。
ExecStart &#61; /usr/bin/mpd --no-daemon
+
Restart &#61; always
+
  
[Install]
+
{{注意|
WantedBy &#61; default.target
+
* {{Pkg|mpd}} 也提供了系统服务文件 {{ic|/usr/lib/systemd/system/mpd.service}},但是当以 root 身份启动进程时,进程不会读取用户配置文件而是会回落到 {{ic|/etc/mpd.conf}}。[[#全局配置|全局配置]] 中已经介绍过了。
 +
* 确保停用任何以前用过的启动 mpd 的方法。
 
}}
 
}}
  
Then, add this line to [[xinitrc|.xinitrc]]
+
==== 脚本配置 ====
{{hc|~/.xinitrc|
+
 
#run systemd as user intsance
+
Rasi 创建了一个脚本,该脚本可以创建合适的目录结构、配置文件,并且提示用户音乐目录的位置。可以在 [http://dl.53280.de/mpdsetup.sh 这里] 下载。
systemd --user &
+
 
}}
+
=== 多 mpd 实例设置 ===
 +
 
 +
'''在运行 icecast 服务器中很有用'''
  
Log out, log in your xsession.
+
如果第二个 mpd (例如:通过网络使用 icecast 输出来分享音乐)使用和上一个 mpd 相同的音乐和播放列表,只需要复制上一个的配置文件来创建一个新文件(例如:{{ic|/home/username/.mpd/config-icecast}}),并且更改 log_file, error_file, pid_file 和 state_file 的参数(例如:{{ic|mpd-icecast.log}}, {{ic|mpd-icecast.error}} 等等),使用相同的音乐目录路径和播放列表目录将确保第二个 mpd 和第一个 mpd 使用相同的音乐收藏。在第一个 mpd 守护进程下创建和编辑播放列表也会影响第二个守护进程。不需要为第二个守护进程创建相同的播放列表。以相同的方式从上述 {{ic|~/.xinitrc}} 调用第二个守护进程。(仅仅需要确保使用不同的端口号,这样不会和第一个 mpd 守护进程冲突)。
Let's first check mpd is not running. If yes, just kill it
+
{{bc|$ ps -ef &#124; grep mpd}}
+
  
Now, enable and start mpd.service as per user
+
'''更好的方法:卫星模式设置'''
$ systemctl --user enable mpd
+
$ systemctl --user start mpd
+
  
Check the mpd status and see if mpd.service is correctly enabled and started
+
上述的方法在工作过程中,当两个 mpd 实例写相同的数据库文件时,在理论上可能导致数据库问题。MPD 有一种卫星模式,该模式下,一个实例可以从另一个已经运行的 mpd 实例上接受数据库。
{{bc|$ systemctl --user status mpd}}
+
  
==== Scripted Configuration ====
+
在 config-icecast 中添加以下代码,host 和 port 反映了主要 mpd 服务器的主机和端口。
Rasi has written a script that will create the proper directory structure, configuration files and prompt for the location of the user's Music directory; it can be downloaded [http://karif.server-speed.net/~carnager/mpdsetup.tar here].
+
  
=== Multi-mpd setup ===
+
    database {
'''Useful if running an icecast server.'''
+
    plugin "proxy"
 +
    host "localhost"
 +
    port "6600"
 +
    }
  
For a second MPD (e.g., with icecast output to share music over the network) using the same music and playlist as the one above, simply copy the above configuration file and make a new file (e.g., {{ic|/home/username/.mpd/config-icecast}}), and only change the log_file, error_file, pid_file, and state_file parameters (e.g., {{ic|mpd-icecast.log}}, {{ic|mpd-icecast.error}}, and so on); using the same directory paths for the music and playlist directories would ensure that this second mpd would use the same music collection as the first one e.g., creating and editing a playlist under the first daemon would affect the second daemon as well.  Users do not have to create the same playlists all over again for the second daemon.  Call this second daemon the same way from {{ic|~/.xinitrc}} above. (Just be sure to have a different port number, so as to not conflict with the first mpd daemon).
+
== 客户端 ==
 +
需要安装独立客户端才能控制mpd。 常用的有这些:
  
== Clients ==
+
=== 命令行下 ===
A separate client is needed to control mpd. Popular options are:
+
*{{App|mpc|简单的基于KISS原则的客户端。 拥有所有的基本功能。|http://mpd.wikia.com/wiki/Client:Mpc|{{Pkg|mpc}}}}
 +
*{{App|ncmpc|一个使用NCursers的客户端。 |http://mpd.wikia.com/wiki/Client:Ncmpc|{{Pkg|ncmpc}}}}
 +
*{{App|[[ncmpcpp]]|差不多是完全克隆ncmpc的客户端, 但是有一些用C++写成的新功能(tag editor, search engine)|http://unkart.ovh.org/ncmpcpp/|{{Pkg|ncmpcpp}}}}
 +
*{{App|pms|Highly configurable and accessible ncurses client|http://pms.sourceforge.net/|{{AUR|pmus}}{{Broken package link|{{aur-mirror|pmus}}}}}}
 +
*{{App|vimpc|基于ncurses的MPD客户端, 使用类似vi的快捷键|http://sourceforge.net/projects/vimpc/|{{AUR|vimpc}}{{Broken package link|{{aur-mirror|vimpc}}}}}}
  
=== Console ===
+
=== 图形界面下 ===
*{{App|mpc|Simple KISS client. All basic functionality available|http://mpd.wikia.com/wiki/Client:Mpc|{{Pkg|mpc}}}}
+
*{{App|Ario|一个功能非常丰富的 GTK2 界面的客户端,灵感来自于 Rhythmbox。|http://ario-player.sourceforge.net/|{{Pkg|ario}}}}
*{{App|ncmpc|A NCurses client for mpd|http://mpd.wikia.com/wiki/Client:Ncmpc|{{Pkg|ncmpc}}}}
+
*{{App|QmpdClient|Qt 4.x 写的图形客户端。|http://bitcheese.net/wiki/QMPDClient|{{Pkg|qmpdclient}}}}
*{{App|ncmpcpp|An almost exact clone of ncmpc with some new features written in C++ (tag editor, search engine)|http://unkart.ovh.org/ncmpcpp/|{{Pkg|ncmpcpp}}}}
+
*{{App|Sonata|一个用 Python 写的客户端,非常优雅。|http://www.nongnu.org/sonata/|{{Pkg|sonata}}}}
*{{App|pms|Highly configurable and accessible ncurses client|http://pms.sourceforge.net/|{{AUR|pmus}}}}
+
*{{App|gmpc|GTK2 写的 MPD 前端。被设计为轻量且易用,同时也对所有的 MPD 的特性提供完全访问。为用户提供几种不同的方法来浏览音乐。可以通过很多可获得的插件来扩展。|http://gmpclient.org/|{{Pkg|gmpc}}}}
=== Graphical ===
+
*{{App|Cantata|多功能的 Qt4, Qt5 或者 KDE4 客户端,具有很多可配置的接口。|https://code.google.com/p/cantata/|{{Pkg|cantata}}}}
*{{App|Ario|A very feature-rich GTK2 GUI client for mpd, inspired by Rhythmbox|http://ario-player.sourceforge.net/|{{Pkg|ario}}}}
+
*{{App|QmpdClient|A GUI client written with Qt 4.x|http://bitcheese.net/wiki/QMPDClient|{{Pkg|qmpdclient}}}}
+
*{{App|Sonata|An elegant Python GTK+ client|http://sonata.berlios.de/|{{Pkg|sonata}}}}
+
*{{App|gmpc|GNOME Client|http://gmpc.wikia.com/wiki/Gnome_Music_Player_Client|{{Pkg|gmpc}}}}
+
*{{App|Dmpc|Dmenu-based MPC client with a playlist manager and state-saving on playlist changes|http://wintervenom.mine.nu/|{{AUR|dmpc}}}}
+
  
=== Web ===
+
=== Web界面 ===
*{{App|Patchfork|web client for MPD written in PHP and Ajax|http://mpd.wikia.com/wiki/Client:Pitchfork|{{AUR|patchfork-git}}}}.
+
*{{App|Patchfork|PHP Ajax 写的 web 客户端|http://mpd.wikia.com/wiki/Client:Pitchfork|{{AUR|patchfork-git}}{{Broken package link|{{aur-mirror|patchfork-git}}}}}}.
  
See a long list of clients at the [http://mpd.wikia.com/wiki/Clients mpd wiki].
+
[http://mpd.wikia.com/wiki/Clients mpd wiki] 上可以查看到客户端列表。
  
== External links ==
+
== 参阅 ==
 
* [http://mpd.wikia.com/wiki/Clients Sorted List of MPD Clients]
 
* [http://mpd.wikia.com/wiki/Clients Sorted List of MPD Clients]
 
* [http://www.musicpd.org/forum/ MPD forum]
 
* [http://www.musicpd.org/forum/ MPD forum]

Latest revision as of 10:02, 7 August 2016

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

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

安装

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

注意: Mopidy 是另一个选择,其基于插件实现。可以通过 mopidymopidy-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 权限并且可以读包含音乐的目录,这经常与用户的音乐目录的默认设置冲突。

有很多方法可以解决这个问题,下面是其中不错的一个

# 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 directoryplayer_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_HOMEXDG 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 配置文件中不能使用 usergroup 变量,进程已经拥有用户权限,因此没有必要进一步更改他们。

所有你需要做的是启用和启动 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 上可以查看到客户端列表。

参阅