Skip to content

Instantly share code, notes, and snippets.

@pcworld
Last active December 8, 2023 20:22
Show Gist options
  • Star 78 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save pcworld/3198763 to your computer and use it in GitHub Desktop.
Save pcworld/3198763 to your computer and use it in GitHub Desktop.
Linux Spotify Ad Mute
#!/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", 0188801@gmail.com
#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
@SecUpwN
Copy link

SecUpwN commented May 23, 2014

@Feltzer, thank you for your updated version of the script. I especially like the one where local music is being played instead of an Ad. Unfrtunately, it doesn't work yet. Maybe because I have no Music in my local directory? Do I have to use the wrapper script or is it OK if I just modify the Spotify-Launcher to launch the full script (my current setup)? It would be awesome if you could update it once more the following way:

  • Script works without having Music in the local directory (in this case just muting the Ad)
  • Script shall be generic to work with updated clients (I'm always on the latest available client)

Is this possible for you? Thanks ahead! And just for anyone reading my post and being interested in security for your Android device: Have a look at the Android IMSI-Catcher Detector. You can thank me later. 😸

@rhoconlinux
Copy link

:(
it didn't worked for me neither.
I tryed with the two scripts. I made sure that the mp3 file/folder is there.
No idea what could be. :/

@hairyheron
Copy link

@Feltzer: Thanks for the nice script! I experienced the problem that no muting/unmuting was performed (I did not see "Unmuting sink ..." or "Muting sink ..." in the output), although the ad detection worked fine.

It turned out that this was a locale issue:

pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | cut -d \# -f2 \

uses a locale-dependent regular expression. So, to everyone having the same problem: As other users have pointed out before me, a better way would be to replace the line by a language-independent version:

LC_ALL=C pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | cut -d \# -f2 \

@SecUpwN
Copy link

SecUpwN commented Jun 1, 2014

I feel like this script deserves its own Repository, so that more people can develop on it.
Welcome to the all-new and fresh Spotify-AdKiller-Project! 😈 LET'S PIMP IT UP!
Proper credit will be given - please tell me ASAP if you have any problem with anything.

@Feltzer
Copy link

Feltzer commented Jun 3, 2014

@hairyheron Thanks for the fix!

@SecUpwN I think it's a great idea. Feel free to go ahead :)

@rhoconlinux As far as the playback issue is concerned, please check out my comment on the new issue tracker.

@aneuronal
Copy link

@SecUpwN i try it, and work perfectly.
thx very much for a comprehensible installation.

@nmabhinandan
Copy link

I executed this script with the while loop of the first comment and now no sound is coming when I play music! How can I revert what I just did?

@openpaul
Copy link

Those scripts did not work for me anymore (I use ubuntu 14.04 and spotify 0.9.11.26) with the newest spotify version. So I went and modified them.
You have to start my script parallel to spotify and it will mute every commercial:

#!/bin/bash

# set commercial mute, so we do not neet to listen to them

echo "----------------------------------------------------------"
echo ""
echo "   Mute spotify commercial"
echo ""
echo "----------------------------------------------------------"


WMTITLE="Spotify - Linux Preview"


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)"

        # show something
        echo "XPROP:      $XPROP_TRACKDATA"
        echo "DBUS:       $DBUS_TRACKDATA"

        # first song should not be commerical
        if [ "$OLD_XPROP" != "" ]
        then
            # check if old DBUS is the same as the new, if true then we have a commercial, so mute
            if [ "$OLD_DBUS" = "$DBUS_TRACKDATA" ]
            then
                echo "commercial: yes"
                amixer -D pulse set Master mute >> /dev/null
            else
                echo "commercial: no"
                amixer -D pulse set Master unmute >> /dev/null
            fi
        else
            echo "commercial: we don't know yet"
        fi
        echo "----------------------------------------------------------"
        OLD_XPROP=$XPROP_TRACKDATA
        OLD_DBUS=$DBUS_TRACKDATA

done

exit 0

It is based on the script of Feltzer

@debrandt
Copy link

debrandt commented Nov 1, 2014

@openpaul your script assumes a commercial is playing when pausing and unpausing. I changed your second if statement to get around this.

if [ "$OLD_DBUS" = "$DBUS_TRACKDATA" ] && [ "$OLD_XPROP" != "Spotify" ]

@syss
Copy link

syss commented Nov 5, 2014

@debrandt it is useful not to mute master volume, when you pause spotify.
i extended the if statement to the following

if [ "$OLD_DBUS" = "$DBUS_TRACKDATA" ] && [ "$OLD_XPROP" != "Spotify" ] && [ "$XPROP_TRACKDATA" != "Spotify" ]

@SecUpwN
Copy link

SecUpwN commented Dec 31, 2014

TO EVERYONE: This script has MATURED and MOVED into Spotify-AdKiller!

@SecUpwN i try it, and work perfectly.
thx very much for a comprehensible installation.

Thank you very much for your kind words. Unfortunately mentions are not possible within Gist, so I bet you'll never know how thankful I'm for this. Please join the development in my repository mentioned above. Cheers!

@jasyuiop
Copy link

God job.

@vvsarana
Copy link

vvsarana commented Sep 9, 2018

thanks to @felzer and others who have contributed.
I edited the version 1 to work with nuvolaplayer's spotify app on ubuntu 18.04. enjoy!
be sure to change the Player and Looptrack!

`

flatpak run eu.tiliado.NuvolaAppSpotify 
#!/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"
#PLAYER = "mpv --no-audio" 
PLAYER="mpv"
LOOPTRACK=""

# VAR

WM_NAME="Spotify"
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 "$WM_NAME" 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.NuvolaAppSpotify /org/mpris/MediaPlayer2 \
    org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | grep xesam:title -A 1 | grep variant | cut -d \" -f 2)"

    echo "XPROP:    $XPROP_TRACKDATA"
    echo "DBUS:     $DBUS_TRACKDATA"

    if [[ "$DBUS_TRACKDATA" = "Spotify" ]]
      then
          echo "--PAUSED--"
          PAUSED="1"
      else
          PAUSED=0
          echo "--NOTPAUSED--"
    fi

    if [[ "$PAUSED" = 0 ]]
      then
          # || "$XPROP_TRACKDATA" =~ "$DBUS_TRACKDATA" ]]
          echo "--NOAD--"
          echo "ADMUTE: $ADMUTE"
      echo "PAUSED: $PAUSED" 		
          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--"
          echo "ADMUTE: $ADMUTE"
          echo "PAUSED: $PAUSED"            
          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

`

@maximvl
Copy link

maximvl commented Jun 21, 2019

I did some changes to the script from @vvsarana:

  1. Find the window by class instead of a name which changes with a song
  2. Follow up the window name change to track "Advertisement"
  3. Removed replacement play, just mutes the Spotify

Enjoy :)

#!/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

# VAR
ADMUTE=0
PAUSED=0

# FCT

get_pactl_nr(){
    pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | cut -d \# -f2 \
    | grep -v Spotify
}

# Find window id
WM_ID=$(xdotool search --class "spotify" | sed -n 2p)

# MAIN

xprop -spy -id "$WM_ID" WM_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/mpris/MediaPlayer2 \
    org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | grep xesam:title -A 1 | grep variant | cut -d \" -f 2)"

    echo "XPROP:    $XPROP_TRACKDATA"
    echo "DBUS:     $DBUS_TRACKDATA"

    if [[ "$DBUS_TRACKDATA" = "Advertisement" ]]
      then
          echo "--PAUSED--"
          PAUSED="1"
      else
          PAUSED=0
          echo "--NOTPAUSED--"
    fi

    if [[ "$PAUSED" = 0 ]]
      then
          # || "$XPROP_TRACKDATA" =~ "$DBUS_TRACKDATA" ]]
          echo "--NOAD--"
          echo "ADMUTE: $ADMUTE"
      echo "PAUSED: $PAUSED" 		
          if [[ "$ADMUTE" = "1" ]]
            then
                sleep 0.5
                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--"
          echo "ADMUTE: $ADMUTE"
          echo "PAUSED: $PAUSED"            
          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
          fi
          ADMUTE="1"
    fi
done

echo "Spotify not active. Exiting."
exit 0

@AWilliams17
Copy link

Does anybody here have version 0.8.4 of Spotify for AMD64? I can only find i386 versions.

@hotta3443
Copy link

Hey, @maximvl!
Could you please help me out with your code? I'm new to linux, though I hate commercials.
So, I'm running Xubuntu 18.04.4 and when I try to run your script with spotify already running I get the following mesange:

./spotify-admute.sh: line 20: xdotool: command not found
xprop: error: Invalid window id format: .
Spotify not active. Exiting.

Will be supper grateful for your help.
Maksym

@re0078
Copy link

re0078 commented Apr 6, 2020

hey, @bim9262
I used the piece of code you suggested in script.
Somehow I ran this script in wrong directory and now spotify has no sound. It does not matter how I launch spotify or how many times I remove and reinstall it.I appreciate any idea that might help.

@bim9262
Copy link

bim9262 commented Apr 6, 2020

Try:

num=$(pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | awk '/Spotify/ {print a} {a = $0}' | cut -c 13-)
pactl set-sink-input-mute $num no

Otherwise if you use something gui to control your volume, look at the per application volumes and set Spotify back to a non-zero value.

@efazati
Copy link

efazati commented Jul 20, 2020

I add changed some parts of your script @vvsarana and @maximvl.
It captures more ads

#!/bin/bash
# Based on https://gist.github.com/pcworld/3198763
# Mute spotify when it starts advertisement
# Run like this
# nohup bash ~/bin/spotify/mute.sh  > /tmp/spotify_mute.log & 

# Settings

# VAR
ADMUTE=0
PAUSED=0

# FCT

get_pactl_nr(){
    pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | cut -d \# -f2 \
    | grep -v Spotify
}

# Find window id
WM_ID=$(xdotool search --class "spotify" | sed -n 2p)

# MAIN

xprop -spy -id "$WM_ID" WM_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/mpris/MediaPlayer2 \
    org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | grep xesam:title -A 1 | grep variant | cut -d \" -f 2)"

    echo "XPROP:    $XPROP_TRACKDATA"
    echo "DBUS:     $DBUS_TRACKDATA"

    if [[ "$DBUS_TRACKDATA" =~ ^(Advertisement|Spotify)$ ]]
      then
          echo "--PAUSED--"
          PAUSED="1"
      else
          PAUSED=0
          echo "--NOTPAUSED--"
    fi


    if [[ "$PAUSED" = 0 ]]
      then
          # || "$XPROP_TRACKDATA" =~ "$DBUS_TRACKDATA" ]]
          echo "--NO ADS--"
          echo "ADMUTE: $ADMUTE"
          echo "PAUSED: $PAUSED" 		
          if [[ "$ADMUTE" = "1" ]]
            then
                sleep 0.5
                num=$(pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | awk '/Spotify/ {print a} {a = $0}' | cut -c 13-)
                pactl set-sink-input-mute $num no
                echo "UnMuting"
          fi
          ADMUTE=0
      else
          echo "--ADS--"
          echo "ADMUTE: $ADMUTE"
          echo "PAUSED: $PAUSED"            
          if [[ "$ADMUTE" != "1" ]]
            then
              num=$(pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | awk '/Spotify/ {print a} {a = $0}' | cut -c 13-)
              pactl set-sink-input-mute $num yes
              echo "Muting"
          fi
          ADMUTE="1"
    fi
done

echo "Spotify not active. Exiting."
exit 0

@logical-and
Copy link

Hey guys, thanks for the useful script. As per good open source tradition, I've improved the script and pasting here.

Improvements

  • Automatically attaches to Spotify when the player is open. So now you can run this script on system startup and once Spotify is open it attaches to it. When close - detaches. When restarted - attaches to new instance!
  • Pause when unmuting (configurable, default = 2 sec)
  • New logging (with time, not that verbose)
  • Code refactored a little bit

Bugfixes

  • Mute didn't work after spotify restart (there were two Spotify sinks)
  • When the script was crashed / killed and Spotify was muted, it didn't unmute the Spotify
#!/bin/bash
# Based on https://gist.github.com/pcworld/3198763
# Mute spotify when it starts advertisement
# Run like this
# nohup bash ~/bin/spotify/mute.sh  > /tmp/spotify_mute.log &
# Link: https://gist.github.com/pcworld/3198763/af2a4981c6f26075c0a16a261f5294f2cf5e5da5#gistcomment-3384837

# Settings
PAUSE_BEFORE_UNMUTE=2
PAUSE_NOT_ACTIVE=5

# VAR
AD_MUTED=0
AD_DETECTED=0

# FCT

get_pactl_nr() {
    pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | cut -d \# -f2 \
    | grep -v Spotify
}

mute_player() {
  num=$(pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | awk '/Spotify/ {print a} {a = $0}' | cut -c 13- | tail -n 1)
  pactl set-sink-input-mute $num yes
}

unmute_player() {
  num=$(pactl list | grep -E '(^Sink Input)|(media.name = \"Spotify\"$)' | awk '/Spotify/ {print a} {a = $0}' | cut -c 13- | tail -n 1)
  pactl set-sink-input-mute $num no
}

log() {
  local line=${1}
  echo \[$( date "+%H:%M:%S" )\] $line
}

# Unmute just in case this script crashed the previous time
unmute_player

# Endless loop, sort of service
while [ 1 ]; do

  # Find window id
  WM_ID=$(xdotool search --class "spotify" | sed -n 2p)

  if [ -z "$WM_ID" ]; then
    log "Spotify not active"
    sleep $PAUSE_NOT_ACTIVE
    continue
  fi

  # MAIN
  xprop -spy -id "$WM_ID" WM_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/mpris/MediaPlayer2 \
      org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | grep xesam:title -A 1 | grep variant | cut -d \" -f 2)"

      if [[ "$DBUS_TRACKDATA" =~ ^(Advertisement|Spotify)$ ]]; then
          log "AD detected"
          AD_DETECTED="1"
      else
          AD_DETECTED="0"
          log "No AD detected"
      fi

      # Debug (uncomment if you need to debug the script)
      # echo "XPROP: \"$XPROP_TRACKDATA\""
      # echo "DBUS: \"$DBUS_TRACKDATA\""
      # echo "Debug: AD_MUTED = $AD_MUTED, AD_DETECTED = $AD_DETECTED"

      if [[ "$AD_DETECTED" = "0" ]] && [[ "$AD_MUTED" = "1" ]]; then
        log "Unmuting (AD_MUTED = $AD_MUTED, AD_DETECTED = $AD_DETECTED)"
        sleep $PAUSE_BEFORE_UNMUTE
        unmute_player
        AD_MUTED="0"
        log "Unmuted"
      elif [[ "$AD_DETECTED" = "1" ]] && [[ "$AD_MUTED" = "0" ]]; then
        log "Muting (AD_MUTED = $AD_MUTED, AD_DETECTED = $AD_DETECTED)"
        mute_player
        AD_MUTED="1"
        log "Muted"
      fi
  done

  log "Spotify is not active, unmuting"
  unmute_player
  AD_MUTED="1"

done

log "Something went wrong. Exiting."
exit 1

@logical-and
Copy link

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)

@mage1k99
Copy link

#!/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 “/”

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment