This script only works for older versions of Spotify for Linux.
An actively developed admute script for Spotify on Linux can be found here: https://github.com/SecUpwN/Spotify-AdKiller
This script only works for older versions of Spotify for Linux.
An actively developed admute script for Spotify on Linux can be found here: https://github.com/SecUpwN/Spotify-AdKiller
#!/bin/bash | |
#Linux Spotify Ad Mute v2 | |
#Put this script in the directory the "spotify" binary is in (e.g. /usr/share/spotify). | |
#To open Spotify, run it instead of the "spotify" binary. | |
#System sound will be muted as soon as an ad plays | |
#Find updated versions at: http://pcworldsoftware.kilu.net/files/link_spotify-admute.php and/or https://gist.github.com/pcworld | |
#On Debian, you need the package "pulseaudio-utils" for the command line util "pactl" which used in this script | |
# | |
#Update: For newer 0.8.x versions (x>4; such as 0.8.8), use this script: https://gist.github.com/pcworld/3198763/#comment-813440 | |
#For 0.9.x: https://gist.github.com/pcworld/3198763/#comment-857143 | |
# | |
#Copyright (c) 2012, "pcworld", [email protected] | |
#All rights reserved. | |
# | |
#Redistribution and use in source and binary forms, with or without | |
#modification, are permitted provided that the following conditions are met: | |
# * Redistributions of source code must retain the above copyright | |
# notice, this list of conditions and the following disclaimer. | |
# * Redistributions in binary form must reproduce the above copyright | |
# notice, this list of conditions and the following disclaimer in the | |
# documentation and/or other materials provided with the distribution. | |
# * Neither the name of the author nor the | |
# names of its contributors may be used to endorse or promote products | |
# derived from this software without specific prior written permission. | |
# | |
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY | |
#DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
#(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
#ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
#(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
#SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # http://stackoverflow.com/a/246128 | |
dbus-monitor "type='signal',path='/org/mpris/MediaPlayer2',member='PropertiesChanged'" | grep --line-buffered 'string "Metadata"' | | |
while read -r line ; do | |
if ! [[ "`dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify / org.freedesktop.MediaPlayer2.GetMetadata`" == *'string "mpris:artUrl"'* ]] | |
then | |
pactl set-sink-mute 0 yes | |
else | |
pactl set-sink-mute 0 no | |
fi | |
done & | |
$DIR/spotify "$@" & | |
wait $! && | |
test -z "`jobs -p`" || kill `jobs -p` # http://stackoverflow.com/a/2618497 |
I've put this to my space too - https://gist.github.com/logical-and/825bab160d604d82bf6ad9ebd3a6410d. Will update there when needed (bugfixes, incompatibilities with Spotify updates)
#!/bin/bash # spotify-automute-simple # - automatically mute Spotify when ad comes on and loop short track # - automatically switch back to Spotify when ad over # Settings PLAYER="mpv --loop=inf" LOOPTRACK="$HOME/Music/Alerts/Jeopardy_loop.mp3" # VAR WMTITLE="Spotify - Linux Preview" ADMUTE=0 PAUSED=0 # FCT get_pactl_nr(){ pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | cut -d \# -f2 \ | grep -v Spotify } # MAIN xprop -spy -name "$WMTITLE" WM_ICON_NAME | while read -r XPROPOUTPUT; do XPROP_TRACKDATA="$(echo "$XPROPOUTPUT" | cut -d \" -f 2 )" DBUS_TRACKDATA="$(dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify / \ org.freedesktop.MediaPlayer2.GetMetadata | grep xesam:title -A 1 | grep variant | cut -d \" -f 2)" echo "XPROP: $XPROP_TRACKDATA" echo "DBUS: $DBUS_TRACKDATA" if [[ "$XPROP_TRACKDATA" = "Spotify" ]] then echo "--PAUSED--" PAUSED="1" else PAUSED=0 echo "--NOTPAUSED--" fi if [[ "$PAUSED" = "1" || "$XPROP_TRACKDATA" =~ "$DBUS_TRACKDATA" ]] then echo "--NOAD--" if [[ "$ADMUTE" = "1" ]] then sleep 0.5 kill -s TERM "$ALTPID" for PACTLNR in $(get_pactl_nr); do pactl set-sink-input-mute "$PACTLNR" no > /dev/null 2>&1 echo "Unmuting sink $PACTLNR" done fi ADMUTE=0 else echo "--AD--" if [[ "$ADMUTE" != "1" ]] then for PACTLNR in $(get_pactl_nr); do pactl set-sink-input-mute "$PACTLNR" yes > /dev/null 2>&1 echo "Muting sink $PACTLNR" done $PLAYER "$LOOPTRACK" > /dev/null 2>&1 & ALTPID="$!" fi ADMUTE=1 fi done echo "Spotify not active. Exiting." exit 0
I'm getting this error Error org.freedesktop.DBus.Error.UnknownMethod: Object does not exist at path “/”
Hey guys, thanks for the useful script. As per good open source tradition, I've improved the script and pasting here.
Improvements
Bugfixes