From Gentoo Wiki
Jump to: navigation, search

MPD (Music Player Daemon) is a flexible, server-side application for playing music. Through plugins and libraries it can play a variety of sound files while being controlled by its network protocol. For more information, read about what mpd is and is not.


Install media-sound/mpd. Following minimal USE flags set is needed to be able to play most known audio file formats, and to listen to audio streams. For more features review the USE flags.

USE flags for media-sound/mpd The Music Player Daemon (mpd)

adplug Enable the AdPlug decoder plugin local
alsa Add support for media-libs/alsa-lib (Advanced Linux Sound Architecture) global
ao Use libao audio output library for sound playback global
audiofile Add support for libaudiofile where applicable global
bzip2 Use the bzlib compression library global
cdio Use libcdio for ISO9660 parsing support local
curl Support for web stream listening local
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see global
eventfd Use the eventfd function in MPD's event loop local
expat Enable the use of dev-libs/expat for XML parsing global
faad Use external faad library for AAC decoding local
ffmpeg Enable ffmpeg/libav-based audio/video codec support global
fifo Support writing audio to a FIFO local
flac Add support for FLAC: Free Lossless Audio Codec global
fluidsynth Enables Fluidsynth MIDI software synthesis (discouraged) local
glib Enable GLib usage local
gme Enables support for media-libs/game-music-emu for playing various video game music formats. local
icu Enable ICU (Internationalization Components for Unicode) support, using dev-libs/icu global
id3tag Support for ID3 tags local
inotify Use the Linux kernel inotify subsystem to notice changes to mpd music library local
ipv6 Add support for IP version 6 global
jack Add support for the JACK Audio Connection Kit global
lame Support for MP3 streaming via Icecast2 local
libav Prefer libav over ffmpeg whenever both are supported global
libmpdclient Enable support for remote mpd databases local
libsamplerate Build with support for converting sample rates using libsamplerate global
libsoxr Enable the libsoxr resampler local
mad Add support for mad (high-quality mp3 decoder library and cli frontend) global
mikmod Add libmikmod support to allow playing of SoundTracker-style music files global
mms Support for Microsoft Media Server (MMS) streams global
modplug Add libmodplug support for playing SoundTracker-style music files global
mpg123 Enable support for mp3 decoding over media-sound/mpg123 local
musepack Enable support for the musepack audio codec global
network Enables network streaming support local
nfs Enable support for the Network File System local
ogg Add support for the Ogg container format (commonly used by Vorbis, Theora and flac) global
openal Add support for the Open Audio Library global
opus Enable Opus codec support local
oss Add support for OSS (Open Sound System) global
pipe Support writing audio to a pipe local
pulseaudio Add support for PulseAudio sound server global
recorder Enables output plugin for recording radio streams local
samba Add support for SAMBA (Windows File and Printer sharing) global
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur global
sid Build with SID (Commodore 64 Audio) support local
signalfd Use the signalfd function in MPD's event loop local
sndfile Add support for libsndfile global
soundcloud Build plugin to access soundcloud local
sqlite Add support for sqlite - embedded sql database global
systemd Enable support for systemd socket activation local
tcpd Add support for TCP wrappers global
twolame Support twolame MPEG-2 encoding local
unicode Add support for Unicode global
upnp Enable UPnP port mapping support global
vorbis Add support for the OggVorbis audio codec global
wavpack Add support for wavpack audio compression tools global
wildmidi Enable MIDI support via wildmidi local
zeroconf Support for DNS Service Discovery (DNS-SD) global
zip Support for ZIP files local
zlib Add support for zlib (de)compression global
Note that a number of these flags are added by the desktop profile.

root #emerge --ask mpd


After finished installation MPD should be working with the Gentoo shipped default configuration.

Basic configuration

Below an example of a simple configuration:

FILE /etc/mpd.conf
music_directory      "/var/lib/mpd/music"
playlist_directory   "/var/lib/mpd/playlists"
db_file              "/var/lib/mpd/database"
log_file             "/var/lib/mpd/log"
state_file           "/var/lib/mpd/state"

user                 "mpd"

bind_to_address      "localhost"
bind_to_address      "/var/lib/mpd/socket"

input {
        plugin "curl"

At this point MPD should be able to run as a system daemon with its own user called mpd, which is the default setting of MPD.


You can now start MPD:

root #rc-service mpd start

To start MPD at boot time, add it your default runlevel:

root #rc-update add mpd default

PulseAudio (optional)

If MPD was build with PulseAudio support (pulseaudio USE flag), add a dedicated audio_output section to your /etc/mpd.conf:

FILE /etc/mpd.conf
audio_output {
        type            "pulse"
        name            "Pulse Output"
        mixer_control   "Master"
It may be a good practice to run both PulseAudio and MPD under X11 user instead.

Built-in HTTP streaming server (optional)

If MPD was build with network USE flag, add a dedicated audio_output section to your /etc/mpd.conf:

FILE /etc/mpd.conf
audio_output {    
        type            "httpd"
        name            "HTTP Stream"
        encoder         "vorbis"                # optional, vorbis(OGG) or lame(MP3)
        port            "8000"
        bitrate         "192"                   # do not define if quality is defined      
        format          "44100:16:1"

bind_to_address ""

Replace localhost with or a specific interface IP. Bind to address means here: stream on all local found IP interfaces. You could change it to a specific interface IP address like f.e. then the streaming server is bound to that interface IP only.

Some players require to specify the file format in the URL to be able to connect to the stream. Example:

Running as a specific user (optional)

Sometimes it may be handy to run MPD as a specific user.

Start with copying /etc/mpd.conf to ~/.mpdconf. There are some changes that you will have to change in order to run MPD as a user, most importantly user and group, also make sure the various path settings are correct:

FILE ~/.mpdconfuser definition
user    "YOUR_USER"
group   "YOUR_USER"

Make sure your user has read access to the directory you specify in music_directory.

If your cron program supports @reboot you can create a cronjob that has /usr/bin/mpd start at boot in place of the init script.

Bluetooth Headset (optional)

Setup your Bluetooth headset first, according to this wiki.

ALSA (non-PulseAudio) setup with BlueZ 5

Put a user level ~/.asoundrc file in MPD's $HOME directory, which is /var/lib/mpd by default. MPD will be able to control the volume of the headset.

FILE /var/lib/mpd/.asoundrc
# Specify the parameters of the Bluetooth connection
defaults.bluealsa {
     interface "hci0"            # host Bluetooth adapter
     device "XX:XX:XX:XX:XX:XX"  # Bluetooth headset MAC address
     profile "a2dp"

To be able to switch between the Bluetooth headset and the default sound card, add these lines to the audio_output section in /etc/mpd.conf:

FILE /etc/mpd.conf
audio_output {
        type            "alsa"
        name            "My ALSA Device"

audio_output {
        type            "alsa"
        name            "ALSA Bluetooth Headset"
        device          "bluealsa"
        mixer_type      "software"

MPD might crash when switching output _while_ playing (if so, pause before switching).

ALSA (non-PulseAudio) setup with BlueZ 4 (deprecated)

Put a user level ~/.asoundrc file in MPD's $HOME directory, which is /var/lib/mpd by default. The following example creates an extra "Bluetooth" slider in any mixer application, and enables MPD to control the volume of the headset:

FILE /var/lib/mpd/.asoundrc
# Change device to the MAC address of your headset
pcm.btheadset {
   type plug
   slave {
      pcm {
         type bluetooth
         device "XX:XX:XX:XX:XX:XX"
         profile "auto"
   hint {
      show on
      description "Bluetooth Headset"

ctl.btheadset {
   type bluetooth

pcm.btheadset_softvol {
   type softvol
   slave.pcm "btheadset" "Bluetooth"
   control.card 0

# Using bluetooth as default:
#pcm.!default {
#   type plug
#   slave.pcm "btheadset_softvol"

To be able to switch between the Bluetooth headset and the default sound card, add these lines to the audio_output section in /etc/mpd.conf:

FILE /etc/mpd.conf
audio_output {
        type            "alsa"
        name            "My ALSA Device"

audio_output {
        type            "alsa"
        name            "ALSA Bluetooth Headset"
        device          "btheadset_softvol"
        mixer_type      "software"

MPD might go crazy when switching output _while_ playing, and fill its log (if so, pause before switching).



Graphical (GTK+)

Graphical (Qt)


Scrobblers are clients that submit to Audioscrobbler-compatible services (eg. or


For general troubleshooting refer to the excellent MPD troubleshooting section.

External resources