Spotify
Spotify is a digital music service that gives you access to millions of songs. This Internet music service allows you to select any song in its database and stream for free.
Spotify also offers free users the ability to create playlist which can be shuffled, and set to repeat tracks. Content provided by Spotify comes in explicit versions as well as censored.
Contents
- 1 Installation
- 2 Tips & tricks
-
3 Troubleshooting
- 3.1 Desktop Environment alerts (beeps) mutes Spotify
- 3.2 Using search causes the whole interface to blink and then crash
- 3.3 Blinking images and improper rendering while using Spotify Linux with DWM
- 3.4 Broken search, browsing or radio
- 3.5 SpotifyHelper.exe crashes (Windows client)
- 3.6 Wrong launcher icon (Windows client)
- 3.7 Deadlock GUI Thread
- 3.8 Pulseaudio
- 3.9 Album art and images are missing, show up as squares
- 3.10 Spotify does not detect other devices on local network
- 3.11 Search Bar text is invisible when using a dark theme
- 3.12 Segmentation fault when playing a local file
- 4 See also
Installation
Choose which client you would prefer. The Linux client is receiving good reviews. However, if you are comfortable with wine and its configuration, you might want to choose the windows client. Please note that you do not need to install both. There is also the online player (requires Flash) on https://play.spotify.com/.
Third-party clients
- Clementine — Able of streaming from Spotify with a premium account after activating (downloading) a plugin in the settings.
- Mopidy — An alternative plug-in based implementation of Music Player Daemon is able of streaming from Spotify with an extension.
- https://www.mopidy.com/ || mopidy+ mopidy-spotifyAUR or despotify-svnAUR
- Librespot — An open source client library for Spotify. It enables applications to use Spotify's service (streaming), without using the official closed-source libspotify.
Official Linux client
Install it with the spotifyAUR package. If you wish to play local files you will need to install zenity and ffmpeg0.10AUR as well.
Official Windows client through Wine
First, install Wine.
Obtaining Spotify can be done by registering for an account on their Website, the application does not offer in-app registration. Obtain the appliction from https://www.spotify.com/nl/download/windows/.
After you have registered and downloaded your copy of the installer you will need to run the application through Wine, depending on your setup you may be able to run the application by right clicking the file. If not terminal will work just fine, as long as you run the below command in the directory of your download.
$ wine SpotifySetup.exe
Once the application is successfully installed you may run Spotify by using one of the following commands in terminal, or in the ALT+F2 launcher:
If you use a x86_64 copy of Arch Linux, you will have to run it like this:
$ wine ~/.wine/drive_c/Program\ Files\ \(x86\)/Spotify/spotify.exe
If you use a x86 copy of Arch Linux, you can use this command just fine:
$ wine ~/.wine/drive_c/Program\ Files/Spotify/spotify.exe
If you have any additional problems, I recommend setting the winecfg to Windows XP or Windows 7 emulation.
Tips & tricks
Global media hotkeys
The official Linux client has support for media keys like XF86AudioPlay
, but out of the box they only work inside Spotify. We can use for example xbindkeys to catch the global media keypresses, and then forward them to Spotify using one of the methods below. If you use xbindkeys, ensure that Spotify is restarted after installation and key configuration otherwise the key events will not be properly caught.
MPRIS
The Spotify client implements the MPRIS2 D-Bus interface which allows external control.
Playerctl
The playerctl utility provides a command line tool to send commands to MPRIS clients. The only commands you will likely need to bind globally are play-pause
, next
and previous
$ playerctl play-pause $ playerctl next $ playerctl previous
Playerctl will send the command to the first player it finds, so this method will also work with others players such as vlc. To ignore other players, pass --player=spotify
as an argument.
D-Bus
An alternative to the above is to manually use D-Bus, which should be available by default as it is a dependency of systemd.
To play or pause the current song in Spotify:
$ dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
In order to bind this and the other commands to the media keys you need to install Xbindkeys and edit your .xbindkeysrc and add the following lines:
# Play/Pause "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause" XF86AudioPlay # Next "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next" XF86AudioNext # Previous "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous" XF86AudioPrev # Stop "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop" XF86AudioStop
If the above commands do not work, try setting the dbus address:
USER=`whoami` PROCESS=spotify PID=`pgrep -o -u $USER $PROCESS` ENVIRON=/proc/$PID/environ if [ -e $ENVIRON ] then export `grep -z DBUS_SESSION_BUS_ADDRESS $ENVIRON` else echo "Unable to set DBUS_SESSION_BUS_ADDRESS." exit 1 fi
xdotool
With the help of xdotool
it is possible to send your hotkeys to the application. The following script is an example of how to control Spotify from the outside:
#!/bin/sh case $1 in "play") key="XF86AudioPlay" ;; "next") key="XF86AudioNext" ;; "prev") key="XF86AudioPrev" ;; *) echo "Usage: $0 play|next|prev" exit 1 ;; esac xdotool key --window $(xdotool search --name "Spotify (Premium |Unlimited |Free )?- Linux Preview"|head -n1) $key exit 0
Let us call it musickeys.sh
. Make the script executable:
$ chmod +x musickeys.sh
By executing ./musickeys.sh play
you can now toggle playing a song. Now you can bind this script to any tool that catches keypresses, such as xbindkeys.
Disable track notifications
After version 0.9.10, track change notifications were enabled by default. They can be quite intrusive. To disable them, add the following line to ~/.config/spotify/Users/<spotifylogin>-user/prefs
ui.track_notifications_enabled=false
It is also possible to launch spotify with the --ui.track_notifications_enabled=false
option.
Show track notifications
playerctl provides a library you can use with python-gobject and a notification daemon such as dunst to show the artist and title in a notification when the track changes.
#!/usr/bin/env python3 from gi.repository import Playerctl, GLib from subprocess import Popen player = Playerctl.Player() def on_track_change(player, e): track_info = '{artist} - {title}'.format(artist=player.get_artist(), title=player.get_title()) Popen(['notify-send', track_info]) player.on('metadata', on_track_change) GLib.MainLoop().run()
Skip overplayed radio tracks
Another use of the playerctl library is to skip tracks that are played too much on radio when you do not necessarily want to downvote these tracks because you may want to hear them again later on that station.
#!/usr/bin/env python3 from gi.repository import Playerctl, GLib player = Playerctl.Player() played_out = ['Zu Fuss', 'Walk And Talk', 'Neuland'] def on_track_change(player, e): if player.get_title() in played_out: player.next() player.on('metadata', on_track_change) GLib.MainLoop().run()
Mute commercials
blockify
With blockify you can mute commercials. It is available in the AUR as blockifyAUR.
To have this start and run in the background every time Spotify starts you will need to automate this yourself:
#!/bin/sh spotify=/usr/bin/spotify if [[ -x $spotify && -x /usr/bin/blockify ]]; then blockify & block_pid=$! $spotify trap "kill -9 $block_pid" SIGINT SIGTERM EXIT fi
By placing this script at /usr/local/bin/spotify
, it gets preferred to /usr/bin/spotify
everytime you start Spotify, so there's nothing else to change and updates won't break it.
spotblock
spotblock (spotblock-gitAUR) is a resource-efficient ad blocker that runs as a systemd daemon.
Spotify-AdKiller
Spotify-AdKiller (spotify-adkiller-gitAUR) is another alternative to block Spotify ads.
Remote Control
Send commands via SSH
If you set up ssh on the server, you can send controls from a client to a remote Spotify instance with
$ ssh user@host yourcommand
where yourcommand can be spotifycmd that you installed on the server, or a dbus script for the linux version, as described above.
Grab the Spotify window via SSH
Aside from grabbing the whole desktop with TeamViewer or VNC to remotely control your server, you can also only grab the Spotify Window from the server to your client.
To do that, you need to configure sshd on your server and install x11vnc on both server and client as well as tigervnc on the client. Then you can use these scripts to grab either the complete dektop or only the Spotify window, which essentially gets you GUI client-like behavior as with MPD.
#!/bin/bash # vncget.sh if [[ $1 == all ]];then ssh -f -t -L 5900:localhost:5900 user@host "x11vnc -q -display :0 -auth .Xauthority" else ssh -f -t -L 5900:localhost:5900 user@host ".bin/vncgetspotify.sh" fi for i in {1..4}; do sleep 2 if vncviewer localhost:0; then break; fi done
#!/bin/bash # vncgetspotify.sh export DISPLAY=:0 id=$(wmctrl -lx | awk '/spotify.exe.Wine/ {print $1}') [[ -z $id ]] && id=$(wmctrl -lx | awk '/spotify.Spotify/ {print $1}') x11vnc -sid $id -display :0 -auth .Xauthority
You will need to copy the second script to ~/.bin/vncgetspotify.sh on the server and the first script to any place on your client.
Finally, to grab the spotify window, run on the client:
$ sh vncget.sh
or, for the whole desktop:
$ sh vncget.sh all
HiDPI Mode
As the current Spotify build is not DPI aware, the amount to scale the interface by can be specified using the terminal command:
$ spotify --force-device-scale-factor=X
where X is the amount to scale the interface by, e.g 2.
This change can be added to the spotify.desktop
file in order to apply the scaling when launching from the desktop.
To make sure the file does not get overwritten when the package is updated, copy it to you local applications folder:
$ cp /usr/share/applications/spotify.desktop ~/.local/share/applications/
Now edit ~/.local/share/applications/spotify.desktop
and add the --force-device-scale-factor
option:
spotify.desktop
[Desktop Entry] Name=Spotify GenericName=Music Player Comment=Spotify streaming music client Icon=spotify-client Exec=spotify --force-device-scale-factor=2 %U TryExec=spotify Terminal=false Type=Application Categories=Audio;Music;Player;AudioVideo MimeType=x-scheme-handler/spotify
You might need to relaunch your Desktop Manager, before these override changes will be effective.
Troubleshooting
Desktop Environment alerts (beeps) mutes Spotify
Comment out "module-role-cork" in pulse audio configuration file.
Open /etc/pulse/default.pa
with your text editor and comment out:
load-module module-role-cork
Or simply unload it with:
pactl unload-module module-role-cork
Using search causes the whole interface to blink and then crash
Spotify is using an old version of Chromium Embedded Framework and hits a bug causing it to crash repeatedly when trying to use the search. This can be worked around by using the following command line option:
--force-device-scale-factor=1.0000001
Blinking images and improper rendering while using Spotify Linux with DWM
Start spotify as a floating window.
You can add this rule to the rules array in your config.h
:
{ "Spotify", NULL, NULL, 2, True, -1 },
This will tell dwm to start spotify as a floating window associated with the tag "2" no matter what window mode you are in. Recompile and install dwm to apply your new settings.
Broken search, browsing or radio
- Spotify bug report concerning non-english locales
If various tabs like browsing only show a blank screen, the search field doesn't seem to do anything or the radio page is broken (stuck when starting and unsresponsive to input) you might be using a custom locale.
Try setting the environment variable LC_NUMERIC
to en_US.utf8
before starting Spotify.
SpotifyHelper.exe crashes (Windows client)
If SpotifyHelper.exe crashes when starting Spotify, disable the d3d9 library with winecfg
. Go to the "Libraries" tab, choose "d3d9" and click Add. To disable it, click edit and select the "Disable" option.
Wrong launcher icon (Windows client)
If the Spotify icon does not show up correctly in your launcher, add the following line to ~/.local/share/applications/wine/Programs/Spotify.desktop
:
StartupWMClass=spotify.exe
Deadlock GUI Thread
Can occur under tiling window managers, such as Awesome, when double-clicking new song or playlist. Edit the file ~/.config/spotify/Users/[1-9]*-user/prefs
to add or change the following:
ui.track_notifications_enabled=false
Restart Spotify. Note that several causes appear to exist for this problem, and this particular fix only applies to select versions of Spotify client and Awesome, and it may be that additional root causes exist for the Debian and Ubuntu users reporting this issue. Observed with Spotify 0.9.17.1.g9b85d436 and Awesome 3.4.15.
Note: This issue has multiple causes, so keep track of what you change while researching this. Update this section with additional scenarios and fixes.
Pulseaudio
See PulseAudio/Troubleshooting and [2]
Album art and images are missing, show up as squares
Quit spotify, then open spotify preferences ~/.config/spotify/prefs
Change @https to @http:
network.proxy.addr="your-proxy.com:80@http" network.proxy.mode=2
See original form post here.
Spotify does not detect other devices on local network
If a firewall is in place, open ports 57621 for UDP and TCP. If you use a variant of the iptables Simple stateful firewall, the following should do it:
iptables -A TCP -p tcp --dport 57621 -j ACCEPT -m comment --comment spotify iptables -A UDP -p udp --dport 57621 -j ACCEPT -m comment --comment spotify
It is also possible to restrict the source and destination to the local network.
If you are using Spotify Connect to play music on a wireless speaker or AVR, your firewall needs to be configured for Spotify's mDNS lookup of those. Sadly, it uses a random unprivileged port [3] which makes these firewall rules rather nasty. Fortunately, you can restrict the rules to source port 1900 or 5353.
iptables -A UDP -p udp --sport 1900 --dport 1025:65535 -j ACCEPT -m comment --comment spotify iptables -A UDP -p udp --sport 5353 --dport 1025:65535 -j ACCEPT -m comment --comment spotify
Search Bar text is invisible when using a dark theme
The text in the search bar appears to be hardcoded to be white, making it invisible when using a dark Qt theme. To fix this, you'll need to make an override.
First create a css file somewhere your account has permission to read/write from (such as your home folder). Call it whatever you like (eg. spotify-override.css).
Open the newly created css file and add the following:
QLineEdit { color: #000 }
Save the file and exit. Next, you need to add the following to the end of your Spotify launcher (substitute the path with the actual path of your css file):
-stylesheet=/home/user/spotify-overide.css
So your full launch path should look something like this:
/usr/share/spotify/spotify-client/spotify -stylesheet=/home/user/spotify-override.css
Segmentation fault when playing a local file
The cause of this problem is a missing dependency. For Pulseaudio users, installing ffmpeg-compat-54AUR should fix it.
See also
- playerctl: A command-line utility and library for controlling media players
- SpotCommander: A web based remote control for Spotify
- http://www.spotify.com/int/help/faq/wine/
- http://www.spotify.com/int/download/previews/