If you are a Linux user and a music collection nerd, you’ll find that you don’t have that many choices, more so since the days of good old Amarok 1.x.
One of the applications to handle your collection (and not just play it) is Lollypop (yes, nice site!).
Though it defines some shortcuts, they are only available when the main window has focus. So to control it from your window manager you need to dig into it’s dbus implementation.
To see what methods it provides, just run:
dbus-send --print-reply --type=method_call --dest='org.gnome.Lollypop' /org/mpris/MediaPlayer2 org.freedesktop.DBus.Introspectable.Introspect
(You can use whatever dbus client you like of course).
For a shortcut to Play/Pause, just bind the following to a key combination:
dbus-send --print-reply --type=method_call --dest='org.gnome.Lollypop' /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
There is a also a method to call up and get song data (metadata):
dbus-send --print-reply --type=method_call --dest='org.gnome.Lollypop' /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata'
You can use the above in a simple python script to get a readable Now Playing output:
#!/usr/bin/python3 import dbus session_bus = dbus.SessionBus() lollypop_bus = session_bus.get_object("org.gnome.Lollypop","/org/mpris/MediaPlayer2") lollypop_properties = dbus.Interface(lollypop_bus,"org.freedesktop.DBus.Properties") metadata = lollypop_properties.Get("org.mpris.MediaPlayer2.Player", "Metadata") title = metadata['xesam:title'] artist = metadata['xesam:albumArtist'][0] # Some radio stations only have artist and a dot for title if title == ".": print('{0}'.format(artist)) else: print('{0} by {1}'.format(title, artist))
(Replace albumArtist with Artist if your collection’s tags don’t fit).