--- author: email: mail@petermolnar.net image: https://petermolnar.net/favicon.jpg name: Peter Molnar url: https://petermolnar.net copies: - http://web.archive.org/web/20180901185436/https://petermolnar.net/headless-spotify-without-gpu/ lang: en published: '2017-09-19T18:00:00+01:00' summary: Fine tunes and extras for Vivek Panyam's guide "How to build a headless Spotify Streaming box" tags: - linux title: Headless Spotify Debian linux server fine tunes --- I have a minor local collection of music files - these days I'm trying to buy only from BandCamp[^1], given nobody else is offering FLAC - so I found myself listening to Spotify more and more. My home server used to have mpd[^2] running on it, which was later replaced by mopidy[^3], because that has a Spotify plugin[^4]. While the plugin is decent the Spotify API is very restricted and doesn't allow, for example, radios. *I still want the last.fm radio algorythm back. Their radio was completely different and was recalculated after each track played, unlike Spotify, where the playlist of a track, album, or artist gets boring very soon.* So I started looking around what other ways are there to run Spotify on a headless server and I came across Vivek Panyam's guide: "How to build a headless Spotify Streaming box"[^5]. It's almost perfect, only a few things were missing. ## First run and config In order to run Spotify on the server, but display it on your own host do the following: ssh -C -X [my-username]@[my-server] /usr/bin/spotify --disable-gpu This needs the option `X10Forwarding yes` enabled in `/etc/ssh/sshd_config` on the server. Explanation: `-C` : compress all data `-X` : forward X (the program will run remotely but will be displayed on your ssh client) Log in, make your configurations and exit. ## Systemd unit file I wanted to be able to run spotify for more, than one user, so I needed a multi-user unit file on the server. `/lib/systemd/system/spotify@.service` [Unit] Description=Spotify Documentation= After=network.target [Service] User=%i ExecStart=/usr/bin/xvfb-run -f /home/%i/.Xauthority --auto-servernum /usr/bin/spotify --disable-gpu Restart=on-failure [Install] WantedBy=multi-user.target The `-f` is in order for us to be able to match all the processes, one by one by monit. `--disable-gpu` is a Chromium flag[^6] - since Spotify sadly is an electron app, by default it tries to do all the things Chromium does, including accessing the GPU for hardware acceleration. This is not available in the virtual X environment `xvfb` is providing, so we need to turn it off. Enable it for a user as: sudo systemctl enable spotify@[my-username] sudo systemctl start spotify@[my-username] ## Optional: Monit monit[^7] is a small system supervisor which, in our case, is needed to check if Spotify is behaving, as in not eating our CPU and memory. `/etc/monit/monitrc.d/spotify.conf` CHECK PROCESS "spotify-[my-username]" matching "xvfb-run.*[my-username].*spotify" if total cpu > 50% for 5 cycles then restart if total memory usage > 15% for 10 cycles then restart Careful with the memory usage: Spotify easily consumes at minumim 3-400 MB so change the setting according to your server capacity. [^1]: [^2]: [^3]: [^4]: [^5]: [^6]: [^7]: