Difference between revisions of "Music Player Daemon"

From ArchWiki
Jump to: navigation, search
m (Creating the required files (Don't edit /usr!))
(Clients: Updated url to PMS)
 
(122 intermediate revisions by 56 users not shown)
Line 1: Line 1:
[[Category:Player]]
+
[[Category:Multimedia players]]
[[Category:Daemons and system services]]
+
 
[[de:Music Player Daemon]]
 
[[de:Music Player Daemon]]
 
[[es:Music Player Daemon]]
 
[[es:Music Player Daemon]]
 
[[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]]
 
[[zh-CN:Music Player Daemon]]
 
[[zh-CN:Music Player Daemon]]
{{Article summary start}}
+
{{Style|Needs improvements in structure and clarify; compare to the [http://www.musicpd.org/doc/user/index.html User's manual].|section=Style comment}}
{{Article summary text|Installation, configuration and basic troubleshooting of MPD.}}
+
{{Article summary heading|Required software}}
+
{{Article summary link|Music Player Daemon|http://mpd.wikia.com}}
+
{{Article summary heading|Related Articles}}
+
{{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}}
+
  
'''MPD''' ('''m'''usic '''p'''layer '''d'''aemon) is an audio player that has a server-client architecture.  It plays audio files, organizes playlists and maintains a music database all while using  very few resources. In order to interface with it, a separate [[#Clients|client]] is needed.
+
{{Related articles start}}
 +
{{Related|MPD/Tips and Tricks}}
 +
{{Related|MPD/Troubleshooting}}
 +
{{Related articles end}}
 +
 
 +
'''[http://www.musicpd.org/ MPD]''' ('''m'''usic '''p'''layer '''d'''aemon) is an audio player that has a server-client architecture.  It plays audio files, organizes playlists and maintains a music database all while using  very few resources. In order to interface with it, a separate [[#Clients|client]] is needed.
  
 
== Installation ==
 
== Installation ==
=== Stable version ===
 
The latest stable version of {{Pkg|mpd}} is available in the [[official repositories]].
 
  
You may also want to install [https://github.com/GutenYe/systemd-units/tree/master/mpd mpd-systemd].
+
[[Install]] the {{Pkg|mpd}} package, or {{AUR|mpd-git}} for the development version.
  
=== Git version ===
+
{{Note|An alternative implementation written in Python called [http://www.mopidy.com Mopidy] exists. It is available as {{Pkg|mopidy}} and {{AUR|mopidy-git}}. Be warned that is not a complete MPD [http://docs.mopidy.com/en/latest/ext/mpd/#limitations drop-in replacement]. The advantage of Mopidy over MPD is that it has  plug-ins for playing music from cloud services like Spotify, SoundCloud, and Google Play Music.}}
Should users wish to run an experimental version, the [[AUR]] offers several from which to choose. For example, {{AUR|mpd-git}}.
+
  
 
== Setup ==
 
== Setup ==
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 is able to run locally (per user settings), globally (settings apply to all users), 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, for example.
* 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.
+
In order for MPD to be able to play back audio, [[ALSA]] or [[OSS]] (optionally with [[PulseAudio]]) needs to be setup and working.
  
=== Global Configuration ===
+
MPD is configured in {{ic|mpd.conf}}. The location of this file depends on how you want to run MPD (see the sections below). These are commonly used configuration options:
{{Note|For user-specific permissions, change the "user" line above to reflect one of the system users.}}
+
* {{ic|pid_file}} -  The file where mpd stores its process ID
{{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!}}
+
* {{ic|db_file}} - The music database
 +
* {{ic|state_file}} - MPD's current state is noted here
 +
* {{ic|playlist_directory}} - The folder where playlists are saved into
 +
* {{ic|music_directory}} - The folder that MPD scans for music
 +
* {{ic|sticker_file}} - The sticker database
  
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.
+
=== Global configuration ===
  
Normally,{{ic|/etc/mpd.conf}} is created when installing mpd. If not, copy the included example file to {{ic|/etc/mpd.conf}}.
+
{{Warning|Users of PulseAudio with a global 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!}}
# cp /usr/share/doc/mpd/mpdconf.example /etc/mpd.conf
+
  
==== Editing mpd.conf ====
+
The default {{ic|/etc/mpd.conf}} keeps the setup in {{ic|/var/lib/mpd}} which is assigned to user as well as primary group ''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:
+
==== Music directory ====
{{hc|/etc/mpd.conf|
+
music_directory      "/home/user/music"
+
playlist_directory    "/var/lib/mpd/playlists"
+
db_file              "/var/lib/mpd/mpd.db"
+
log_file              "/var/log/mpd/mpd.log"
+
pid_file              "/run/mpd/mpd.pid"
+
state_file            "/var/lib/mpd/mpdstate"
+
user                  "mpd"
+
# bind_to_address      "127.0.0.1"
+
# port                  "6600"
+
}}
+
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 
+
Run this to create the /run/mpd dir:
+
  # systemd-tmpfiles --create mpd.conf
+
To change the volume for mpd independent from other programs, uncomment or add this switch in mpd.conf:
+
  
{{hc|/etc/mpd.conf|
+
The music directory has to be set by parameter {{ic|music_directory}} in file {{ic|/etc/mpd.conf}}:
mixer_type "software"
+
music_directory "/path/to/music"
}}
+
  
Users of [[PulseAudio]] will need to make the following modification:
+
MPD needs to have {{ic|+x}} permissions on ''all'' parent directories to the music collection and also read access to all directories containing music files. This conflicts with the default configuration of the user directory where many users store their music.
{{hc|/etc/mpd.conf|2=
+
 
audio_output {
+
While there are several solutions to this problem one of these should be most practical:
        type                    "pulse"
+
* [[#Local configuration .28per user.29|run MPD as user]]
        name                    "pulse audio"
+
* add the mpd user to your login group and grant group permission to your user directory:
}
+
  # gpasswd -a mpd <your login group>
}}
+
  $ chmod 710 /home/<your home dir>
 +
* put your music collection to a different path (a) by moving it entirely, (b) with a bind mount or (c) with a [[Btrfs#Subvolumes|Btrfs subvolume]] (you should make this change persistent with an entry to {{ic|/etc/fstab}} ). Permissions of alternate directories can be adjusted with [[Access Control Lists]].
 +
 
 +
The MPD config must contain only one music directory. 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.
 +
 
 +
==== Start MPD ====
 +
 
 +
MPD can be controlled with {{ic|mpd.service}} [[systemd#Using units|using systemd]]. The first startup can take some time as MPD will scan your music directory.
 +
 
 +
Test everything by starting a client application ({{Pkg|ncmpc}} is a light and easy to use client), and play some music!
 +
 
 +
===== Socket activation =====
 +
 
 +
If the {{ic|mpd.socket}} unit (provided by {{Pkg|mpd}}) is enabled while {{ic|mpd.service}} is disabled, systemd will not start mpd immediately, but it will listen on the appropriate sockets. When an mpd client attempts to connect on one of those sockets, systemd will start {{ic|mpd.service}} and transparently hand over control of those ports to the mpd process.
 +
 
 +
If you prefer to listen on different UNIX sockets or network ports (even multiple sockets of each type), or if you prefer not to listen on network ports at all, [[systemd#Editing provided units|edit]] the {{ic|mpd.socket}} unit appropriately '''and''' modify {{ic|/etc/mpd.conf}} to match the configuration (see {{ic|man 5 mpd.conf}} for details).
 +
 
 +
==== Configure audio ====
  
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.
+
Users of [[ALSA]] will want to have the following device definition; replace {{ic|My Sound Card}} with the name of a sound card or pcm ({{ic|aplay --list-pcms}}).
 
{{hc|/etc/mpd.conf|2=
 
{{hc|/etc/mpd.conf|2=
 
audio_output {
 
audio_output {
Line 98: Line 85:
 
}}
 
}}
  
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""
+
The {{ic|mixer_type "software"}} option tells 'mpd' to use its own independent software volume control.
  
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}}.
+
Users of [[PulseAudio]] will need to make the following modification:
# gpasswd -a mpd audio
+
{{hc|/etc/mpd.conf|2=
 +
audio_output {
 +
        type            "pulse"
 +
        name            "pulse audio"
 +
}
 +
}}
  
===== Music directory =====
+
PulseAudio supports multiple advanced operations, e.g. transferring the audio to a different machine. For advanced configuration with MPD see [http://mpd.wikia.com/wiki/PulseAudio Music Player Daemon Community Wiki].
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
+
==== Changing user ====
# 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}}.
+
Changing the group that MPD runs as may result in errors like {{ic|output: Failed to open "My ALSA Device"}}, {{ic|[alsa]: Failed to open ALSA device "default": No such file or directory}} or {{ic|player_thread: problems opening audio device while playing "Song Name.mp3"}}.
# 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.
+
This is because the MPD users need to be part of the ''audio'' group to access sound devices under {{Ic|/dev/snd/}}. To fix it add user make the MPD user part of the ''audio'' group:
 +
# gpasswd -a '''mpd''' audio
  
==== Creating the required files ====
+
==== Timeline of MPD startup ====
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}}:
 
# mkdir -p /var/lib/mpd/playlists
 
# touch /var/lib/mpd/{mpd.db,mpdstate}
 
 
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}}:
 
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 ====
 
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 ====
 
 
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:
 
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:
  
Line 150: Line 116:
 
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.
 
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) ===
+
=== 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:
+
MPD can be configured per user (rather than the typical method of configuring MPD globally). Running MPD as a normal user has the benefits of:
  
* A single directory {{ic|~/.mpd}} (or any other directory under {{ic|/home/username}}) that will contain all the MPD configuration files.
+
* A single directory {{ic|~/.config/mpd/}} (or any other directory under {{ic|$HOME}}) that will contain all the MPD configuration files.
 
* Easier to avoid unforeseen read/write permission errors.
 
* 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.}}
+
Good practice is to create a single directory for the required files and playlists. It can be any directory for which you have read and write access, e.g. {{ic|~/.config/mpd/}} or {{ic|~/.mpd/}}. This section assumes it is {{ic|~/.config/mpd/}}, which corresponds to the default value of {{ic|$XDG_CONFIG_HOME}} (part of [http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html XDG Base Directory Specification]).
  
Begin the setup by creating a directory for the required files and the playlists:
+
MPD searches for a config file in {{ic|$XDG_CONFIG_HOME/mpd/mpd.conf}} and then {{ic|~/.mpdconf}}. It is also possible to pass other path as command line argument.
  
{{bc|mkdir -p ~/.mpd/playlists}}
+
Copy the example configuration file to desired location, for example:
  
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 -p ~/.config/mpd
 +
$ cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf
  
{{bc|cp /usr/share/doc/mpd/mpdconf.example ~/.mpdconf}}
+
Edit {{ic|~/.config/mpd/mpd.conf}} and specify the required files:
  
Create all of the requisite files:
+
{{hc|~/.config/mpd/mpd.conf|
 +
# Required files
 +
db_file            "~/.config/mpd/database"
 +
log_file          "~/.config/mpd/log"
  
{{bc|<nowiki>touch ~/.mpd/{mpd.db,mpd.log,mpd.pid,mpdstate}</nowiki>}}
+
# 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"
 +
}}
  
Edit {{ic|~/.mpdconf}} to specify these files:
+
Create the playlist directory as configured above:
  
{{hc|~/.mpdconf|
+
$ mkdir ~/.config/mpd/playlists
music_directory    "/home/USER/music"            # Keep commented if your XDG directory already points to it
+
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
+
When the paths of required files are configured, MPD can be started. To specify custom location of the configuration file:
{{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.
+
$ mpd ''config_file''
  
To have MPD start with the X server add it to [[xprofile]].
+
==== Autostart on tty login ====
  
==== Start MPD per user with systemd ====
+
To start MPD on login add the following to {{ic|~/.profile}} (or another [[Autostarting#Shells|autostart file]]):
  
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.
+
# MPD daemon start (if no other user instance exists)
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.
+
[ ! -s ~/.config/mpd/pid ] && mpd
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
+
==== Autostart in X ====
{{bc|mpd ~/.mpdconf}}
+
  
Then, edit a new file /etc/systemd/user/mpd.service
+
If you use a [[desktop environment]], place the following file in {{ic|~/.config/autostart/}}:
{{hc|/etc/systemd/user/mpd.service|
+
{{hc|~/.config/autostart/mpd.desktop|<nowiki>
[Unit]
+
[Desktop Entry]
Description &#61; Music Player Daemon
+
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>}}
  
[Service]
+
If you do not use a DE, place the line from [[#Autostart on tty login]] in your [[Autostarting#Graphical|autostart file]].
ExecStart &#61; /usr/bin/mpd --no-daemon
+
Restart &#61; always
+
  
[Install]
+
==== Autostart with systemd ====
WantedBy &#61; default.target
+
 
}}
+
{{Note|It is assumed that you already have systemd user-session manager running (which should be default). See the [[systemd/User]] page for details.}}
 +
 
 +
The package {{Pkg|mpd}} provides user service file in {{ic|/usr/lib/systemd/user/mpd.service}}. The configuration file is expected to exist either in {{ic|~/.mpdconf}} or {{ic|~/.config/mpd/mpd.conf}}, see [[systemd#Editing provided units]] if you would like to use different path. The process is not started as root, so you should not use the {{ic|user}} and {{ic|group}} variables in the MPD configuration file, the process already has user permissions and therefore it is not necessary to change them further.
 +
 
 +
All you have to do is enable and start the {{ic|mpd}} [[systemd/User#User Services|user service]].
  
Then, add this line to [[xinitrc|.xinitrc]]
+
{{Note|
{{hc|~/.xinitrc|
+
* {{Pkg|mpd}} provides also system service file in {{ic|/usr/lib/systemd/system/mpd.service}}, but as the process is started as root, it does not read the user configuration file and falls back to {{ic|/etc/mpd.conf}}. [[#Global configuration|Global configuration]] is described in other section.
#run systemd as user intsance
+
* Make sure to disable every other method of starting mpd you used before.
systemd --user &
+
 
}}
 
}}
  
Log out, log in your xsession.
+
==== Scripted configuration ====
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  
+
You can use a [https://gist.githubusercontent.com/kurobeats/1c92c0a43f93ba49d798/raw/3a2661f071bcd3ed0b8c8c6560fc20a723dbbc45/mpdsetup.sh script] to create the proper directory structure, configuration files and prompt for the location of the user's Music directory.
$ systemctl --user enable mpd
+
$ systemctl --user start mpd
+
  
Check the mpd status and see if mpd.service is correctly enabled and started
+
==== Scripted configuration for bit perfect playback ====
{{bc|$ systemctl --user status mpd}}
+
  
==== Scripted Configuration ====
+
You can use a [http://lacocina.nl/audiophile-mpd bash script] to also create a valid mpd configuration file which focusses on bit perfect audio playback. That is playback  without any resampling or format conversion. It does this by setting audio output parameters to use a direct alsa hwardware address (like `hw:0,0`). The script detects and lists which playback interfaces alsa supports. When one interface is found it uses that one, if multiple are found it prompts the user which one to use. When not specified on the command line, it auto configures things like the music_directory and mpd's home directory by using freedesktop.org XDG configuration.
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 ===
 
=== Multi-mpd setup ===
'''Useful if running an icecast server.'''
+
 
 +
==== Running an icecast server ====
  
 
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).
 
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).
 +
 +
==== Satellite setup ====
 +
 +
The method above works, but at least in theory could lead to issues with the database, when both mpd instances try to write to the same database file. MPD has a [http://www.musicpd.org/doc/user/advanced_config.html#satellite satellite mode] where one instance can receive the database from an already running mpd instance.
 +
 +
in your config-icecast add this, where host and port reflect your primary mpd server.
 +
 +
{{bc|
 +
database {
 +
    plugin "proxy"
 +
    host "localhost"
 +
    port "6600"
 +
}
 +
}}
  
 
== Clients ==
 
== Clients ==
A separate client is needed to control mpd. Popular options are:
+
 
 +
A separate client is needed to control mpd. See a long list of clients at the [http://mpd.wikia.com/wiki/Clients mpd wiki]. Popular options are:
  
 
=== Console ===
 
=== Console ===
*{{App|mpc|Simple KISS client. All basic functionality available|http://mpd.wikia.com/wiki/Client:Mpc|{{Pkg|mpc}}}}
+
 
*{{App|ncmpc|A NCurses client for mpd|http://mpd.wikia.com/wiki/Client:Ncmpc|{{Pkg|ncmpc}}}}
+
*{{App|mpc|Command line user interface for MPD server|http://www.musicpd.org/clients/mpc/|{{Pkg|mpc}}}}
*{{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|ncmpc|Ncurses client for mpd|http://www.musicpd.org/clients/ncmpc/|{{Pkg|ncmpc}}}}
*{{App|pms|Highly configurable and accessible ncurses client|http://pms.sourceforge.net/|{{AUR|pmus}}}}
+
*{{App|[[ncmpcpp]]|Almost exact clone of ncmpc with some new features written in C++ (tag editor, search engine)|http://ncmpcpp.rybczak.net/|{{Pkg|ncmpcpp}}}}
 +
*{{App|pms|Highly configurable and accessible ncurses client|https://ambientsound.github.io/pms/|{{AUR|pmus-git}}}}
 +
*{{App|vimpc|Ncurses based MPD client with vi-like key bindings|http://sourceforge.net/projects/vimpc/|{{AUR|vimpc-git}}}}
 +
 
 
=== Graphical ===
 
=== Graphical ===
*{{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 ===
+
*{{App|Ario|Very feature-rich GTK2 GUI client for mpd, inspired by Rhythmbox|http://ario-player.sourceforge.net/|{{Pkg|ario}}}}
*{{App|Patchfork|web client for MPD written in PHP and Ajax|http://mpd.wikia.com/wiki/Client:Pitchfork|{{AUR|patchfork-git}}}}.
+
*{{App|QmpdClient|GUI client written with Qt 4.x|http://bitcheese.net/wiki/QMPDClient|{{Pkg|qmpdclient}}}}
 +
*{{App|Sonata|Elegant Python GTK+ client|http://www.nongnu.org/sonata/|{{Pkg|sonata}}}}
 +
*{{App|gmpc|GTK2 frontend for Music Player Daemon. It is designed to be lightweight and easy to use, while providing full access to all of MPD's features. Users are presented with several different methods to browse through their music. It can be extended by plugins, of which many are available.|http://gmpclient.org/|{{Pkg|gmpc}}}}
 +
*{{App|Cantata|High-feature, Qt4, Qt5 or KDE client for MPD with very configurable interface|https://github.com/CDrummond/cantata|{{Pkg|cantata}}}}
  
See a long list of clients at the [http://mpd.wikia.com/wiki/Clients mpd wiki].
+
== See also ==
  
== External links ==
+
* [http://forum.musicpd.org/ MPD Forum]
* [http://mpd.wikia.com/wiki/Clients Sorted List of MPD Clients]
+
* [http://www.musicpd.org/doc/user/ MPD User Manual]
* [http://www.musicpd.org/forum/ MPD forum]
+
* [[Wikipedia:Music Player Daemon|Wikipedia article]]

Latest revision as of 13:39, 12 July 2016

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements.Tango-edit-clear.png

Reason: Needs improvements in structure and clarify; compare to the User's manual. (Discuss in Talk:Music Player Daemon#Style comment)

MPD (music player daemon) is an audio player that has a server-client architecture. It plays audio files, organizes playlists and maintains a music database all while using very few resources. In order to interface with it, a separate client is needed.

Installation

Install the mpd package, or mpd-gitAUR for the development version.

Note: An alternative implementation written in Python called Mopidy exists. It is available as mopidy and mopidy-gitAUR. Be warned that is not a complete MPD drop-in replacement. The advantage of Mopidy over MPD is that it has plug-ins for playing music from cloud services like Spotify, SoundCloud, and Google Play Music.

Setup

MPD is able to run locally (per user settings), globally (settings apply to all users), 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, for example.

In order for MPD to be able to play back audio, ALSA or OSS (optionally with PulseAudio) needs to be setup and working.

MPD is configured in mpd.conf. The location of this file depends on how you want to run MPD (see the sections below). These are commonly used configuration options:

  • pid_file - The file where mpd stores its process ID
  • db_file - The music database
  • state_file - MPD's current state is noted here
  • playlist_directory - The folder where playlists are saved into
  • music_directory - The folder that MPD scans for music
  • sticker_file - The sticker database

Global configuration

Warning: Users of PulseAudio with a global mpd have to implement a workaround in order to run mpd as its own user!

The default /etc/mpd.conf keeps the setup in /var/lib/mpd which is assigned to user as well as primary group mpd.

Music directory

The music directory has to be set by parameter music_directory in file /etc/mpd.conf:

music_directory "/path/to/music"

MPD needs to have +x permissions on all parent directories to the music collection and also read access to all directories containing music files. This conflicts with the default configuration of the user directory where many users store their music.

While there are several solutions to this problem one of these should be most practical:

  • run MPD as user
  • add the mpd user to your login group and grant group permission to your user directory:
 # gpasswd -a mpd <your login group>
 $ chmod 710 /home/<your home dir>
  • put your music collection to a different path (a) by moving it entirely, (b) with a bind mount or (c) with a Btrfs subvolume (you should make this change persistent with an entry to /etc/fstab ). Permissions of alternate directories can be adjusted with Access Control Lists.

The MPD config must contain only one music directory. If the music collection is contained under multiple directories, create symbolic links under the main music directory in /var/lib/mpd. Remember to set permissions accordingly on the directories being linked.

Start MPD

MPD can be controlled with mpd.service using systemd. The first startup can take some time as MPD will scan your music directory.

Test everything by starting a client application (ncmpc is a light and easy to use client), and play some music!

Socket activation

If the mpd.socket unit (provided by mpd) is enabled while mpd.service is disabled, systemd will not start mpd immediately, but it will listen on the appropriate sockets. When an mpd client attempts to connect on one of those sockets, systemd will start mpd.service and transparently hand over control of those ports to the mpd process.

If you prefer to listen on different UNIX sockets or network ports (even multiple sockets of each type), or if you prefer not to listen on network ports at all, edit the mpd.socket unit appropriately and modify /etc/mpd.conf to match the configuration (see man 5 mpd.conf for details).

Configure audio

Users of ALSA will want to have the following device definition; replace My Sound Card with the name of a sound card or pcm (aplay --list-pcms).

/etc/mpd.conf
audio_output {
        type            "alsa"
        name            "My Sound Card"
        mixer_type      "software"      # optional
}

The mixer_type "software" option tells 'mpd' to use its own independent software volume control.

Users of PulseAudio will need to make the following modification:

/etc/mpd.conf
audio_output {
        type            "pulse"
        name            "pulse audio"
}

PulseAudio supports multiple advanced operations, e.g. transferring the audio to a different machine. For advanced configuration with MPD see Music Player Daemon Community Wiki.

Changing user

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 or player_thread: problems opening audio device while playing "Song Name.mp3".

This is because the MPD users need to be part of the audio group to access sound devices under /dev/snd/. To fix it add user make the MPD user part of the audio group:

# gpasswd -a mpd audio

Timeline of MPD startup

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:

  1. Since MPD is started as root by systemd, it first reads the /etc/mpd.conf file.
  2. MPD reads the user variable in the /etc/mpd.conf file, and changes from root to this user.
  3. MPD then reads the contents of the /etc/mpd.conf file and configures itself accordingly.

Notice that MPD changes the running user from root to the one named in the /etc/mpd.conf file. This way, uses of ~ 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 ~ to /home/username to avoid any confusion over this aspect of MPD's behavior.

Local configuration (per user)

MPD can be configured per user (rather than the typical method of configuring MPD globally). Running MPD as a normal user has the benefits of:

  • A single directory ~/.config/mpd/ (or any other directory under $HOME) that will contain all the MPD configuration files.
  • Easier to avoid unforeseen read/write permission errors.

Good practice is to create a single directory for the required files and playlists. It can be any directory for which you have read and write access, e.g. ~/.config/mpd/ or ~/.mpd/. This section assumes it is ~/.config/mpd/, which corresponds to the default value of $XDG_CONFIG_HOME (part of XDG Base Directory Specification).

MPD searches for a config file in $XDG_CONFIG_HOME/mpd/mpd.conf and then ~/.mpdconf. It is also possible to pass other path as command line argument.

Copy the example configuration file to desired location, for example:

$ mkdir -p ~/.config/mpd
$ cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf

Edit ~/.config/mpd/mpd.conf and specify the required files:

~/.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"

Create the playlist directory as configured above:

$ mkdir ~/.config/mpd/playlists

When the paths of required files are configured, MPD can be started. To specify custom location of the configuration file:

$ mpd config_file

Autostart on tty login

To start MPD on login add the following to ~/.profile (or another autostart file):

# MPD daemon start (if no other user instance exists)
[ ! -s ~/.config/mpd/pid ] && mpd

Autostart in X

If you use a desktop environment, place the following file in ~/.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

If you do not use a DE, place the line from #Autostart on tty login in your autostart file.

Autostart with systemd

Note: It is assumed that you already have systemd user-session manager running (which should be default). See the systemd/User page for details.

The package mpd provides user service file in /usr/lib/systemd/user/mpd.service. The configuration file is expected to exist either in ~/.mpdconf or ~/.config/mpd/mpd.conf, see systemd#Editing provided units if you would like to use different path. The process is not started as root, so you should not use the user and group variables in the MPD configuration file, the process already has user permissions and therefore it is not necessary to change them further.

All you have to do is enable and start the mpd user service.

Note:
  • mpd provides also system service file in /usr/lib/systemd/system/mpd.service, but as the process is started as root, it does not read the user configuration file and falls back to /etc/mpd.conf. Global configuration is described in other section.
  • Make sure to disable every other method of starting mpd you used before.

Scripted configuration

You can use a script to create the proper directory structure, configuration files and prompt for the location of the user's Music directory.

Scripted configuration for bit perfect playback

You can use a bash script to also create a valid mpd configuration file which focusses on bit perfect audio playback. That is playback without any resampling or format conversion. It does this by setting audio output parameters to use a direct alsa hwardware address (like `hw:0,0`). The script detects and lists which playback interfaces alsa supports. When one interface is found it uses that one, if multiple are found it prompts the user which one to use. When not specified on the command line, it auto configures things like the music_directory and mpd's home directory by using freedesktop.org XDG configuration.

Multi-mpd setup

Running an icecast server

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., /home/username/.mpd/config-icecast), and only change the log_file, error_file, pid_file, and state_file parameters (e.g., mpd-icecast.log, 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 ~/.xinitrc above. (Just be sure to have a different port number, so as to not conflict with the first mpd daemon).

Satellite setup

The method above works, but at least in theory could lead to issues with the database, when both mpd instances try to write to the same database file. MPD has a satellite mode where one instance can receive the database from an already running mpd instance.

in your config-icecast add this, where host and port reflect your primary mpd server.

database {
    plugin "proxy"
    host "localhost"
    port "6600"
}

Clients

A separate client is needed to control mpd. See a long list of clients at the mpd wiki. Popular options are:

Console

  • mpc — Command line user interface for MPD server
http://www.musicpd.org/clients/mpc/ || mpc
  • ncmpc — Ncurses client for mpd
http://www.musicpd.org/clients/ncmpc/ || ncmpc
  • ncmpcpp — Almost exact clone of ncmpc with some new features written in C++ (tag editor, search engine)
http://ncmpcpp.rybczak.net/ || ncmpcpp
  • pms — Highly configurable and accessible ncurses client
https://ambientsound.github.io/pms/ || pmus-gitAUR
  • vimpc — Ncurses based MPD client with vi-like key bindings
http://sourceforge.net/projects/vimpc/ || vimpc-gitAUR

Graphical

  • Ario — Very feature-rich GTK2 GUI client for mpd, inspired by Rhythmbox
http://ario-player.sourceforge.net/ || ario
  • QmpdClient — GUI client written with Qt 4.x
http://bitcheese.net/wiki/QMPDClient || qmpdclient
  • Sonata — Elegant Python GTK+ client
http://www.nongnu.org/sonata/ || sonata
  • gmpc — GTK2 frontend for Music Player Daemon. It is designed to be lightweight and easy to use, while providing full access to all of MPD's features. Users are presented with several different methods to browse through their music. It can be extended by plugins, of which many are available.
http://gmpclient.org/ || gmpc
  • Cantata — High-feature, Qt4, Qt5 or KDE client for MPD with very configurable interface
https://github.com/CDrummond/cantata || cantata

See also