by Zubair Abid
Update: 2020-12-13 - Future releases of
spotifyd might require quoted
strings in the configuration file. The
master branch already requires such,
hence the instructions in the
README, but that is not the one available in the
various repositories. If and when the update hits, I will probably add a new
post with the updated configuration, if it turns out to be necessary.
Update: 2021-02-06 - Yep.
I can’t seem to find any up-to-date setups for this, and have had to endure some degree of trial and error. Documenting it for myself, and in case others care.
I’m writing this guide for a Linux user who wants to run it with the pulseaudio backend. A Spotify Premium account is needed for this to work. This does not cover an installation guide, just how to set it up for pulseaudio.
▶ spotifyd --version spotifyd 0.2.24
So the first task is to setup spotifyd
on Linux. Installing is easy – check their provided guide to find the
instructions for your specific distribution. I used
pacman -Syu spotifyd on
mine. From what I understand, the pre-installed binaries for your distribution
might not be compiled to work with pulseaudio, so you will have to either get
full variant, or compile it yourself with the necessary flags. This has
not proven to be a problem on Arch-based systems in my limited testing of one
Note, 2021-02-06: This is an updated configuration. To see the older version of this page, check this commit.
The base configuration can be copied from the instructions. Some changes to note:
option = "value", but you should use
option = valueinstead. I think the space after the ‘=’ is important too.
Overall, this is what the configuration file should look like (stripped of comments)
# The username can be gotten from your Accounts page. It's the convoluted string # of characters, not the Email ID. username = "USERNAME" # Pick any of the password store methods. backend = "pulseaudio" volume_controller = "alsa" # The device name can't have spaces. The device type has only cosmetic changes. device_name = "PICKANAME" device_type = "computer" bitrate = 320 # create the directory. I chose not to keep a cache, but you might. cache_path = "/home/USER/.cache/spotifyd" no_audio_cache = true # Disabling normalisation works better for me # And for some reason, on my machine "0" corresponds to 38% initial_volume = "0" volume_normalisation = false normalisation_pregain = -10 zeroconf_port = 4444
Whatever volume normalisation
spotifyd uses internally seems to be, honestly,
quiet trash 1. Where I normally listen to music at 24% volume, I need
to raise it to around 50% to get anywhere close to the same loudness with
normalisation enabled, and the audio is compressed too.
I have opted to start it as a user service, using
systemctl. You can choose to
run it with
spotifyd --no-daemon if you so wish.
I created a file called
.config/systemd/user/default.target.wants. I’m like, 90% sure you need to put
it in the parent folder, but this seems to work fine for now – I guess you just
don’t get to disable the daemon. The file is sourced from the github link. As
of the time of writing this, the contents are:
[Unit] Description=A spotify playing daemon Documentation=https://github.com/Spotifyd/spotifyd Wants=sound.target After=sound.target Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/bin/spotifyd --no-daemon Restart=always RestartSec=12 [Install] WantedBy=default.target
Check that your service is running with
systemctl status --user
spotifyd.service. In fact, for a quick tutorial on systemd daemon services:
# Starts the service systemctl start --user spotifyd.service # Restarts the service systemctl restart --user spotifyd.service # Enables the service; it should autostart on boot systemctl enable --user spotifyd.service # Disables the service; it should stop autostarting on boot systemctl disable --user spotifyd.service # again, I'm not sure this works with my configuration. It wasn't ideal. # Checks how the service is going systemctly status --user spotifyd.service
At this point, you should have a functional
spotifyd instance running. If you
check your devices on any client, you should see your device popping up, and can
play audio through this.
At the moment, I’m just using Spotify TUI, written in Rust. This step is not necessary if you want to, say, play music from your phone.
Installation instructions are given here. For arch-based systems, run
spotify-tui (or use your preferred AUR helper. If you’re new to the AUR, check
the arch wiki). This will take a while as it compiles.
Once done, you can launch the client by running
spt on the terminal.
Configuration is easy enough – the intial startup gives instructions, and they
are trivial enough to follow.
Apart from official documentation, a number of blogs and posts offered (admittedly partial) information to help sort out what exactly was to be done:
No, that’s not a typo. ↩