Comment surveiller en permanence Rhythmbox pour le changement de piste en utilisant bash
Question
Je voudrais faire la même chose que décrit ici , mais en utilisant les scripts shell (de préférence en bash) au lieu de python. Il semble qu'une telle chose devrait être possible en utilisant dbus-monitor
, mais je ne suis pas très familier avec dbus, et il est pas clair pour moi comment prendre les concepts décrits dans la solution à la question de python et de les appliquer à l'outil dbus-moniteur .
La solution
Voici la façon la plus simple que je pouvais trouver:
#!/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
Il produit une sortie comme ceci:
Now playing: Daft Punk - Overture
Now playing: Daft Punk - The Grid
Il imprime aussi la chanson en cours de lecture après avoir démarré. Si ce n'est pas ce que vous voulez, regardez le contenu de $line
et voir si elle contient NameAcquired
ou playingUriChanged
. Si elle contient NameAcquired
, sauter.
La principale différence entre la version Python et cette version bash est que la version Python utilise DBus pour obtenir les informations de la chanson de jeu. Je ne pouvais pas trouver une bonne façon de le faire en utilisant bash, mais rhythmbox-client --print-playing
semble bien fonctionner.