Difference between revisions of "Music Player Daemon"
AlexanderR (talk | contribs) m (more styling, no issues found) |
(→Clients: Link to full client list updated. The existing link is dead due to the MPD project moving their documentation to a custom site instead of hosting on Wikia.) |
||
(201 intermediate revisions by 88 users not shown) | |||
Line 1: | Line 1: | ||
− | [[Category: | + | [[Category:Multimedia players]] |
− | |||
[[de:Music Player Daemon]] | [[de:Music Player Daemon]] | ||
+ | [[es:Music Player Daemon]] | ||
[[fr:MPD]] | [[fr:MPD]] | ||
− | [[ | + | [[it:Music Player Daemon]] |
− | {{ | + | [[ja:Music Player Daemon]] |
+ | [[nl:Music Player Daemon]] | ||
+ | [[pl:Music Player Daemon]] | ||
+ | [[ru:Music Player Daemon]] | ||
+ | [[sr:Music Player Daemon]] | ||
+ | [[zh-hans:Music Player Daemon]] | ||
+ | {{Style|Needs improvements in structure and clarify; compare to the [http://www.musicpd.org/doc/user/index.html User's manual].|section=Style comment}} | ||
− | {{ | + | {{Related articles start}} |
− | {{ | + | {{Related|MPD/Tips and Tricks}} |
− | + | {{Related|MPD/Troubleshooting}} | |
− | + | {{Related articles 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. | + | '''[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 == | ||
− | [[ | + | |
+ | [[Install]] the {{Pkg|mpd}} package, or {{AUR|mpd-git}} for the development 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. However, mopidy project is not as active and many plugins become unusable or buggy at least over time.}} | ||
== Setup == | == 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 playback audio, [[ALSA]] or [[OSS]] (optionally with [[PulseAudio]]) needs to be setup and working. | |
− | + | ||
− | + | 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: | |
− | + | * {{ic|pid_file}} - The file where mpd stores its process ID | |
+ | * {{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 | ||
+ | |||
+ | === Global configuration === | ||
+ | |||
+ | {{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!}} | ||
+ | |||
+ | 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''. | ||
+ | |||
+ | ==== Music directory ==== | ||
+ | |||
+ | The music directory has to be set by parameter {{ic|music_directory}} in file {{ic|/etc/mpd.conf}}: | ||
+ | music_directory "/path/to/music" | ||
+ | |||
+ | 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. | ||
− | + | While there are several solutions to this problem one of these should be most practical: | |
+ | * [[#Local configuration .28per user.29|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#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. | |
− | |||
− | {{ | ||
− | MPD | + | ==== 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, [[edit]] the {{ic|mpd.socket}} unit appropriately '''and''' modify {{ic|/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 | + | 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 83: | Line 83: | ||
} | } | ||
}} | }} | ||
− | |||
− | + | The {{ic|mixer_type "software"}} option tells 'mpd' to use its own independent software volume control. | |
− | + | Users of [[PulseAudio]] will need to make the following modification: | |
− | + | {{hc|/etc/mpd.conf|2= | |
+ | audio_output { | ||
+ | type "pulse" | ||
+ | name "pulse audio" | ||
+ | } | ||
+ | }} | ||
− | + | User will also have to edit {{ic|/etc/pulse/client.conf}} and change the default ''autospawn = no'' line to ''autospawn = yes'' in order to allow the mpd user to use pulseaudio. It will be necessary to restart pulseaudio after making this modification. | |
− | |||
− | |||
− | |||
− | |||
− | + | ==== Changing user ==== | |
− | |||
− | |||
− | |||
− | + | 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"}}. | |
− | + | 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 | |
− | + | ==== 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: | ||
− | + | # Since MPD is started as root by systemd, it first reads the {{ic|/etc/mpd.conf}} file. | |
− | # Since MPD is | ||
# MPD reads the user variable in the {{ic|/etc/mpd.conf}} file, and changes from root to this user. | # 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. | # MPD then reads the contents of the {{ic|/etc/mpd.conf}} file and configures itself accordingly. | ||
Line 134: | Line 115: | ||
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 | + | === Local configuration (per user) === |
− | MPD | + | |
− | + | 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: | |
− | |||
− | Running MPD as a normal user has the benefits of: | ||
− | |||
− | |||
− | |||
− | |||
− | + | * 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. | ||
− | {{ | + | 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]). |
− | + | 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. | |
− | + | 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 {{ic|~/.config/mpd/mpd.conf}} and specify the required files: |
− | + | {{hc|~/.config/mpd/mpd.conf| | |
+ | # Required files | ||
+ | db_file "~/.config/mpd/database" | ||
+ | log_file "~/.config/mpd/log" | ||
− | + | # Optional | |
− | music_directory "/ | + | music_directory "~/Music" |
− | playlist_directory "/ | + | playlist_directory "~/.config/mpd/playlists" |
− | + | pid_file "~/.config/mpd/pid" | |
− | + | state_file "~/.config/mpd/state" | |
− | + | sticker_file "~/.config/mpd/sticker.sql" | |
− | |||
}} | }} | ||
− | MPD can | + | Create the playlist directory as configured above: |
− | To | + | |
+ | $ 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 {{ic|~/.profile}} (or another [[Autostarting#Shells|autostart file]]): | ||
+ | |||
+ | # MPD daemon start (if no other user instance exists) | ||
+ | [ ! -s ~/.config/mpd/pid ] && mpd | ||
+ | |||
+ | ==== Autostart in X ==== | ||
− | {{hc|mpd.desktop| | + | If you use a [[desktop environment]], place the following file in {{ic|~/.config/autostart/}}: |
+ | {{hc|~/.config/autostart/mpd.desktop|<nowiki> | ||
[Desktop Entry] | [Desktop Entry] | ||
Encoding=UTF-8 | Encoding=UTF-8 | ||
− | |||
Type=Application | Type=Application | ||
Name=Music Player Daemon | Name=Music Player Daemon | ||
− | Comment= | + | Comment=Server for playing audio files |
Exec=mpd | Exec=mpd | ||
StartupNotify=false | StartupNotify=false | ||
Terminal=false | Terminal=false | ||
Hidden=false | Hidden=false | ||
− | }} | + | X-GNOME-Autostart-enabled=false |
+ | </nowiki>}} | ||
+ | |||
+ | If you do not use a DE, place the line from [[#Autostart on tty login]] in your [[Autostarting#Graphical|autostart file]]. | ||
+ | |||
+ | ==== Autostart with systemd ==== | ||
+ | |||
+ | The {{Pkg|mpd}} package provides a [[systemd/User|user service]] file. 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 a different path. The service starts the process as user, there is no need to change permission nor use the {{ic|user}} and {{ic|group}} variables in the MPD configuration file. | ||
+ | |||
+ | All you have to do is [[start/enable]] the user unit {{ic|mpd.service}} (i.e. with the {{ic|--user}} flag). | ||
+ | |||
+ | {{Note|{{Pkg|mpd}} also provides a system service file. The process is started as root and reads the [[#Global configuration]] from {{ic|/etc/mpd.conf}} rather than the [[#Local configuration (per user)]].}} | ||
+ | |||
+ | ==== Scripted configuration ==== | ||
+ | |||
+ | 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. | ||
+ | |||
+ | ==== Scripted configuration for bit perfect playback ==== | ||
− | + | 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. | |
− | |||
=== Multi-mpd setup === | === 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., {{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 [https://www.musicpd.org/clients/ mpd website]. Popular options are: | ||
=== Console === | === Console === | ||
− | *{{App|mpc| | + | |
− | *{{App|ncmpc| | + | *{{App|mpc|Command line user interface for MPD server|http://www.musicpd.org/clients/mpc/|{{Pkg|mpc}}}} |
− | *{{App|ncmpcpp| | + | *{{App|ncmpc|Ncurses client for mpd|http://www.musicpd.org/clients/ncmpc/|{{Pkg|ncmpc}}}} |
− | *{{App|pms|Highly configurable and accessible ncurses client| | + | *{{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|https://github.com/boysetsfrog/vimpc|{{AUR|vimpc-git}}}} | ||
+ | *{{App|vimus|MPD client with vim-like key bindings, written in Haskell|https://github.com/vimus/vimus|{{AUR|vimus-git}}{{Broken package link|package not found}}}} | ||
+ | |||
=== Graphical === | === Graphical === | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | *{{App|Ario|Very feature-rich GTK2 GUI client for mpd, inspired by Rhythmbox|http://ario-player.sourceforge.net/|{{Pkg|ario}}}} | |
− | *{{App| | + | *{{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}}}} | ||
+ | *{{App|Xfmpc|A graphical GTK+ MPD client focusing on low footprint|http://goodies.xfce.org/projects/applications/xfmpc|{{Pkg|xfmpc}}}} | ||
+ | *{{App|pymp'd|A GTK+ front end client for the music playing daemon MPD|http://pympd.sourceforge.net|{{Pkg|pympd}}}} | ||
+ | *{{App|Quimup|A client for the music player daemon (MPD) written in C++ and QT3 / since v. 1.4.0 the code was migrated to Qt5 for MPD 0.17.0 and above|http://goodies.xfce.org/projects/applications/xfmpc|{{Aur|quimup}}}} | ||
+ | *{{App|SkyMPC|A simple MPD client, powered by Qt5|https://github.com/soramimi/SkyMPC|{{Aur|skympc-git}}}} | ||
− | See | + | == See also == |
− | + | * [http://forum.musicpd.org/ MPD Forum] | |
− | * [http:// | + | * [http://www.musicpd.org/doc/user/ MPD User Manual] |
− | * [http://www.musicpd.org/ | + | * [[Wikipedia:Music Player Daemon|Wikipedia article]] |
Revision as of 06:03, 12 January 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.
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 playback 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 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
Global 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 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 mpd.conf(5) 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" }
User will also have to edit /etc/pulse/client.conf
and change the default autospawn = no line to autospawn = yes in order to allow the mpd user to use pulseaudio. It will be necessary to restart pulseaudio after making this modification.
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:
- Since MPD is started as root by systemd, it first reads the
/etc/mpd.conf
file. - MPD reads the user variable in the
/etc/mpd.conf
file, and changes from root to this user. - 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
The mpd package provides a user service file. 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 a different path. 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.
All you have to do is start/enable the user unit mpd.service
(i.e. with the --user
flag).
/etc/mpd.conf
rather than the #Local configuration (per user).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 website. Popular options are:
Console
- 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)
- pms — Highly configurable and accessible ncurses client
- vimpc — Ncurses based MPD client with vi-like key bindings
- vimus — MPD client with vim-like key bindings, written in Haskell
- https://github.com/vimus/vimus || vimus-gitAUR[broken link: package not found]
Graphical
- Ario — Very feature-rich GTK2 GUI client for mpd, inspired by Rhythmbox
- QmpdClient — GUI client written with Qt 4.x
- Sonata — Elegant Python GTK+ client
- 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.
- Cantata — High-feature, Qt4, Qt5 or KDE client for MPD with very configurable interface
- Xfmpc — A graphical GTK+ MPD client focusing on low footprint
- pymp'd — A GTK+ front end client for the music playing daemon MPD
- Quimup — A client for the music player daemon (MPD) written in C++ and QT3 / since v. 1.4.0 the code was migrated to Qt5 for MPD 0.17.0 and above
- SkyMPC — A simple MPD client, powered by Qt5