Difference between revisions of "Music Player Daemon"
(added recommended config path) |
m (→Console: sorting) |
||
(25 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | [[Category: | + | [[Category:Music]] |
[[de:Music Player Daemon]] | [[de:Music Player Daemon]] | ||
[[es:Music Player Daemon]] | [[es:Music Player Daemon]] | ||
Line 15: | Line 15: | ||
{{Related articles end}} | {{Related articles end}} | ||
− | '''[http://www.musicpd.org/ MPD]''' ( | + | '''[http://www.musicpd.org/ 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 [[#Clients|client]] is needed. |
== Installation == | == Installation == | ||
Line 23: | Line 23: | ||
== Configuration == | == Configuration == | ||
− | MPD is able to run in [[#Per-user configuration]] | + | MPD is able to run in [[#Per-user configuration]] or [[#System-wide configuration]] mode (settings apply to all users). Also it is possible to run multiple instances of MPD in a [[#Multi-MPD setup]]. |
The way of setting up MPD depends on the way it is intended to be used: a local per-user configuration is easier to setup and may prove more adapted on a desktop system. | The way of setting up MPD depends on the way it is intended to be used: a local per-user configuration is easier to setup and may prove more adapted on a desktop system. | ||
− | In order for MPD to be able to playback audio, [[ALSA]], optionally with [[PulseAudio]], | + | In order for MPD to be able to playback audio, [[ALSA]], optionally with [[PulseAudio]], must be setup and working. The [[#Audio configuration]] section thereafter describes the parameters needed for ''ALSA'' or ''PulseAudio''. |
− | MPD is configured in the file {{man|5|mpd.conf}} which can be located in various paths depending on the setup chosen (system-wide or per-user). | + | MPD is configured in the file {{man|5|mpd.conf}} which can be located in various paths depending on the setup chosen (system-wide or per-user). In short, the two common locations used are: |
− | + | # {{ic|~/.config/mpd/mpd.conf}} in per-user configuration mode, this is the first location searched, | |
− | + | # {{ic|/etc/mpd.conf}} in system-wide configuration. | |
− | + | For indication, some of the most commonly used configuration options are listed thereafter: | |
* {{ic|pid_file}} - The file where MPD stores its process ID | * {{ic|pid_file}} - The file where MPD stores its process ID | ||
* {{ic|db_file}} - The music database | * {{ic|db_file}} - The music database | ||
Line 44: | Line 44: | ||
MPD can be configured per-user. Running it as a normal user has the benefits of: | MPD can be configured per-user. Running it as a normal user has the benefits of: | ||
− | * | + | * Regrouping into one single directory {{ic|~/.config/mpd/}} (or any other directory under {{ic|$HOME}}) all the MPD configuration files. |
− | * | + | * Avoiding unforeseen directory and file permission errors. |
==== Configure the location of files and directories ==== | ==== Configure the location of files and directories ==== | ||
Line 68: | Line 68: | ||
# The music directory is by default the XDG directory, uncomment to amend and choose a different directory | # The music directory is by default the XDG directory, uncomment to amend and choose a different directory | ||
− | #music_directory "~/ | + | #music_directory "~/music" |
# Uncomment to refresh the database whenever files in the music_directory are changed | # Uncomment to refresh the database whenever files in the music_directory are changed | ||
Line 88: | Line 88: | ||
$ mpd ''[config_file]'' | $ mpd ''[config_file]'' | ||
− | + | In order to build the database file, ''MPD'' must scan into the {{ic|music_directory}} defined above. A MPD client is required to request this task, for example with {{pkg|mpc}} the command is: | |
$ mpc update | $ mpc update | ||
Line 209: | Line 209: | ||
=== Console === | === Console === | ||
− | *{{App|mpc|Command line user interface for MPD server|http://www.musicpd.org/clients/mpc/|{{Pkg|mpc}}}} | + | * {{App|clerk|MPD client using rofi.|https://github.com/carnager/clerk|{{AUR|clerk}}}} |
− | *{{App|ncmpc|Ncurses client for MPD|http://www.musicpd.org/clients/ncmpc/|{{Pkg|ncmpc}}}} | + | * {{App|FMUI|Console user interface created with fzf and mpc.|https://github.com/seebye/fmui|{{AUR|fmui-git}}}} |
− | *{{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|mpc|Command line user interface for MPD server.|http://www.musicpd.org/clients/mpc/|{{Pkg|mpc}}}} |
− | *{{App|pms|Highly configurable and accessible ncurses client written in Go|https://ambientsound.github.io/pms/|{{AUR|pmus-git}}}} | + | * {{App|ncmpc|Ncurses client for MPD.|http://www.musicpd.org/clients/ncmpc/|{{Pkg|ncmpc}}}} |
− | *{{App|vimpc|Ncurses based MPD client with vi-like key bindings|https://github.com/boysetsfrog/vimpc|{{AUR|vimpc-git}} | + | * {{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|ncmpy|Curses-based MPD client written in Python.|http://ncmpcpp.rybczak.net/|{{AUR|ncmpy}}}} | |
+ | * {{App|nncmpp|Yet another MPD client. It is in effect a simplified TUI version of Sonata.|http://ncmpcpp.rybczak.net/|{{AUR|nncmpp-git}}}} | ||
+ | * {{App|pms|Highly configurable and accessible ncurses client written in Go.|https://ambientsound.github.io/pms/|{{AUR|pmus-git}}}} | ||
+ | * {{App|vimpc|Ncurses based MPD client with vi-like key bindings.|https://github.com/boysetsfrog/vimpc|{{AUR|vimpc-git}}}} | ||
=== Graphical === | === Graphical === | ||
− | *{{App|Ario|Very feature-rich | + | * {{App|Ario|Very feature-rich GTK3 GUI client for MPD, inspired by [[Rhythmbox]].|http://ario-player.sourceforge.net/|{{Pkg|ario}}}} |
− | *{{App| | + | * {{App|Cantata|High-feature, Qt4, Qt5 or KDE client for MPD with very configurable interface.|https://github.com/CDrummond/cantata|{{Pkg|cantata}}}} |
− | *{{App| | + | * {{App|GMPC|Gnome Music Player Client. GTK+ frontend for MPD. 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|pymp'd|A GTK+ front end client for the music playing daemon MPD.|http://pympd.sourceforge.net|{{Pkg|pympd}}}} | |
− | *{{App| | + | * {{App|QMPDClient|Qt4 GUI client.|http://bitcheese.net/wiki/QMPDClient|{{Pkg|qmpdclient}}}} |
− | *{{App| | + | * {{App|Quimup|Simple Qt5 frontend for MPD written in C++.|https://sourceforge.net/projects/quimup/|{{AUR|quimup}}}} |
− | *{{App| | + | * {{App|RompЯ|Web client for MPD.|https://fatg3erman.github.io/RompR/|{{AUR|rompr}}}} |
− | *{{App| | + | * {{App|SkyMPC|Simple MPD client, powered by Qt5.|https://github.com/soramimi/SkyMPC|{{AUR|skympc-git}}}} |
− | *{{App|SkyMPC| | + | * {{App|Sonata|Elegant Python GTK+ client.|http://www.nongnu.org/sonata/|{{Pkg|sonata}}}} |
+ | * {{App|Xfce MPD Panel Plugin|MPD plugin for [[Xfce]]4 panel.|http://goodies.xfce.org/projects/panel-plugins/xfce4-mpc-plugin|{{Pkg|xfce4-mpc-plugin}}}} | ||
+ | * {{App|Xfmpc|Graphical GTK+ MPD client focusing on low footprint.|http://goodies.xfce.org/projects/applications/xfmpc|{{Pkg|xfmpc}}}} | ||
+ | * {{App|ympd|Standalone MPD Web GUI written in C, utilizing Websockets and Bootstrap/JS.|https://ympd.org/|{{AUR|ympd}}}} | ||
== See also == | == See also == | ||
Line 233: | Line 239: | ||
* [http://www.musicpd.org/doc/user/ MPD User Manual] | * [http://www.musicpd.org/doc/user/ MPD User Manual] | ||
* [[Wikipedia:Music Player Daemon|Wikipedia article]] | * [[Wikipedia:Music Player Daemon|Wikipedia article]] | ||
− | * | + | * [https://github.com/MusicPlayerDaemon/MPD GitHub repository] |
* {{Pkg|mopidy}} is an alternative to MPD written in Python. Note it is not a complete MPD replacement, its advantage is that it has plug-ins for playing music from cloud services like Spotify, SoundCloud, and Google Play Music. However, the project is not that active and some of its plugins are not maintained. | * {{Pkg|mopidy}} is an alternative to MPD written in Python. Note it is not a complete MPD replacement, its advantage is that it has plug-ins for playing music from cloud services like Spotify, SoundCloud, and Google Play Music. However, the project is not that active and some of its plugins are not maintained. |
Revision as of 16:59, 19 June 2018
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.
Contents
Installation
Install the mpd package, or mpd-gitAUR for the development version.
Configuration
MPD is able to run in #Per-user configuration or #System-wide configuration mode (settings apply to all users). Also it is possible to run multiple instances of MPD in a #Multi-MPD setup. The way of setting up MPD depends on the way it is intended to be used: a local per-user configuration is easier to setup and may prove more adapted on a desktop system.
In order for MPD to be able to playback audio, ALSA, optionally with PulseAudio, must be setup and working. The #Audio configuration section thereafter describes the parameters needed for ALSA or PulseAudio.
MPD is configured in the file mpd.conf(5) which can be located in various paths depending on the setup chosen (system-wide or per-user). In short, the two common locations used are:
~/.config/mpd/mpd.conf
in per-user configuration mode, this is the first location searched,/etc/mpd.conf
in system-wide configuration.
For indication, some of the most commonly used configuration options are listed thereafter:
pid_file
- The file where MPD stores its process IDdb_file
- The music databasestate_file
- MPD's current state is noted hereplaylist_directory
- The folder where playlists are saved intomusic_directory
- The folder that MPD scans for musicsticker_file
- The sticker database
Per-user configuration
MPD can be configured per-user. Running it as a normal user has the benefits of:
- Regrouping into one single directory
~/.config/mpd/
(or any other directory under$HOME
) all the MPD configuration files. - Avoiding unforeseen directory and file permission errors.
Configure the location of files and directories
In user mode, the configuration is read from $XDG_CONFIG_HOME/mpd/mpd.conf
.
We will assume here $XDG_CONFIG_HOME
equals ~/.config
which is the recommended XDG base directory specification.
To build the user configuration, the MPD configuration example included in the package is a good starting point, copy it using the following lines:
$ mkdir ~/.config/mpd $ cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf
A good practice is to use this newly created ~/.config/mpd/
directory to store, together with the configuration file, other MPD related files like the database or the playlists. The user must have read write access to this directory.
Then edit the configuration file in order to specify the required and optional files and directories:
~/.config/mpd/mpd.conf
# Recommended location for database db_file "~/.config/mpd/database" # Logs to systemd journal 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 "~/.config/mpd/state" #sticker_file "~/.config/mpd/sticker.sql"
If playlists are enabled in the configuration, the specified playlist directory must be created:
$ mkdir ~/.config/mpd/playlists
MPD can now be started (an optional custom location for the configuration file can be specified):
$ mpd [config_file]
In order to build the database file, MPD must scan into the music_directory
defined above. A MPD client is required to request this task, for example with mpc the command is:
$ mpc update
or alternatively one can set the option auto_update
to "yes"
in the configuration to refresh the database whenever files are changed in music_directory
.
Audio configuration
If ALSA is used, autodetection of the default device should work out of the box without any particular setting. If not, the syntax for ALSA audio output definition is provided thereafter; the required name
parameter specifies a unique name for the audio output.
The exact device as displayed using aplay --list-pcm
from the package alsa-utils can optionally be indicated with the device
option.
~/.config/mpd/mpd.conf
audio_output { type "alsa" name "ALSA sound card" # Optional #device "iec958:CARD=Intel,DEV=0" #mixer_control "PCM" }
Users of PulseAudio will need to make the following modification:
~/.config/mpd/mpd.conf
audio_output { type "pulse" name "pulse audio" }
User will also have to edit /etc/pulse/client.conf
and change the autospawn
option to yes
in order to allow the MPD user to use pulseaudio. It will be necessary to restart pulseaudio after making this modification.
Autostart with systemd
The mpd package provides a user service file. The service starts the process as user, there is no need to change permission nor use the user
and group
variables in the MPD configuration file.
start/enable the user unit mpd.service
(i.e. with the --user
flag).
~/.config/mpd/mpd.conf
, see systemd#Editing provided units if you would like to indicate a custom configuration file path.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
Scripted configuration
The following tool provides assistance for MPD configuration:
- mpd-configure — Create a MPD configuration optimized for bit perfect audio playback, without any resampling or conversion, using the ALSA interface hardware address (hw:x,y)
- https://github.com/ronalde/mpd-configure || no package
System-wide configuration
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 is defined by the option music_directory
in the configuration file /etc/mpd.conf
.
MPD needs to have execute permission on all parent directories of the music collection and also read access to all directories containing music files. This may conflict with the default configuration of the user directory, like ~/Music
, where the music is stored.
While there are several solutions to this issue, one of these should be most practical:
- Switch to the #Per-user configuration mode instead
- Add the
mpd
user to the user's group and grant group execute permission to the user directory. This way thempd
user has permission to open the user directory:
# gpasswd -a mpd user_group $ chmod 710 /home/user_directory
- Store the music collection in a different path, either:
- by moving it entirely,
- with a bind mount,
- or with Btrfs#Subvolumes (you should make this change persistent with an entry to
/etc/fstab
).
The MPD configuration file must define 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 with systemd
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
mpd provides a mpd.socket
unit. If mpd.socket
is enabled (and mpd.service
is disabled), systemd will not start MPD immediately, it will just listen to the appropriate sockets. Then, whenever an MPD client attempts to connect to one of these sockets, systemd will start mpd.service
and transparently hand over control of these ports to the MPD process.
If you prefer to listen to different UNIX sockets or network ports (even multiple sockets of each type), or if you prefer not to listen to network ports at all, edit the mpd.socket
unit appropriately and modify /etc/mpd.conf
to match the configuration (see mpd.conf(5) for details).
User id startup workflow
MPD should never run as root, you may use the user
option in the configuration to make MPD change its user id after initialization. Do not use this option if you start MPD as an unprivileged user.
To describe how MPD drops its superuser privileges and switch to those of the user set in the configuration, the steps of a normal MPD startup are listed thereafter:
- Since MPD is started as root by systemd, it first reads the
/etc/mpd.conf
file. - MPD reads the
user
variable in the configuration, and changes from root to this user. - MPD then reads the rest of the configuration file and configures itself accordingly. Uses of
~
in the configuration file points to the home user's directory, and not root's directory.
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 website. Popular options are:
Console
- clerk — MPD client using rofi.
- FMUI — Console user interface created with fzf and mpc.
- mpc — Command line user interface for MPD server.
- ncmpc — Ncurses client for MPD.
- ncmpcpp — Almost exact clone of ncmpc with some new features written in C++ (tag editor, search engine).
- ncmpy — Curses-based MPD client written in Python.
- nncmpp — Yet another MPD client. It is in effect a simplified TUI version of Sonata.
- pms — Highly configurable and accessible ncurses client written in Go.
- vimpc — Ncurses based MPD client with vi-like key bindings.
Graphical
- Ario — Very feature-rich GTK3 GUI client for MPD, inspired by Rhythmbox.
- Cantata — High-feature, Qt4, Qt5 or KDE client for MPD with very configurable interface.
- GMPC — Gnome Music Player Client. GTK+ frontend for MPD. 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.
- pymp'd — A GTK+ front end client for the music playing daemon MPD.
- QMPDClient — Qt4 GUI client.
- Quimup — Simple Qt5 frontend for MPD written in C++.
- RompЯ — Web client for MPD.
- SkyMPC — Simple MPD client, powered by Qt5.
- Sonata — Elegant Python GTK+ client.
- Xfce MPD Panel Plugin — MPD plugin for Xfce4 panel.
- Xfmpc — Graphical GTK+ MPD client focusing on low footprint.
- ympd — Standalone MPD Web GUI written in C, utilizing Websockets and Bootstrap/JS.
- https://ympd.org/ || ympdAUR
See also
- MPD Forum
- MPD User Manual
- Wikipedia article
- GitHub repository
- mopidy is an alternative to MPD written in Python. Note it is not a complete MPD replacement, its advantage is that it has plug-ins for playing music from cloud services like Spotify, SoundCloud, and Google Play Music. However, the project is not that active and some of its plugins are not maintained.