Come monitorare continuamente Rhythmbox per il cambiamento traccia utilizzando bash
Domanda
Mi piacerebbe fare la stessa cosa come è descritto qui , ma utilizzando shell scripting (preferibilmente in bash) anziché pitone. Sembra una cosa del genere dovrebbe essere possibile utilizzando dbus-monitor
, ma io non sono molto familiare con dbus, e non è chiaro a me come prendere i concetti descritti nella soluzione della questione pitone e applicarle allo strumento dbus-Monitor .
Soluzione
Ecco il modo più semplice che ho trovato:
#!/bin/bash
interface=org.gnome.Rhythmbox.Player
member=playingUriChanged
# listen for playingUriChanged DBus events,
# each time we enter the loop, we just got an event
# so handle the event, e.g. by printing the artist and title
# see rhythmbox-client --print-playing-format for more output options
dbus-monitor --profile "interface='$interface',member='$member'" |
while read -r line; do
printf "Now playing: "
rhythmbox-client --print-playing
done
Si produce un output simile a questo:
Now playing: Daft Punk - Overture
Now playing: Daft Punk - The Grid
Esso stampa anche la canzone attualmente in riproduzione quando avviato. Se questo non è ciò che si vuole, sguardo al contenuto della $line
e vedere se contiene NameAcquired
o playingUriChanged
. Se contiene NameAcquired
, saltare.
La differenza principale tra la versione di Python e questa versione bash è che la versione Python usa DBus per ottenere le informazioni di brano in riproduzione. Non riuscivo a trovare un buon modo per farlo usando bash, ma rhythmbox-client --print-playing
sembra funzionare bene.