Cómo monitorear continuamente Rhythmbox para el cambio de pista usando bash
Pregunta
Me gustaría hacer lo mismo que se describe aquí, pero usando scripting de shell (preferiblemente en Bash) en lugar de Python. Parece que tal cosa debería ser posible usar dbus-monitor
, pero no estoy muy familiarizado con DBUS, y no me queda claro cómo tomar los conceptos descritos en la solución a la pregunta de Python y aplicarlos a la herramienta DBUS-Monitor.
Solución
Aquí está la forma más sencilla que pude encontrar:
#!/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
Produce salida como esta:
Now playing: Daft Punk - Overture
Now playing: Daft Punk - The Grid
También imprime la canción de reproducción actualmente cuando se inicia. Si eso no es lo que quieres, mira el contenido de $line
y ver si contiene NameAcquired
o playingUriChanged
. Si contiene NameAcquired
, Saltarlo.
La principal diferencia entre la versión de Python y esta versión bash es que la versión de Python usa DBUS para obtener la información de la canción de reproducción. No pude encontrar una buena manera de hacerlo usando Bash, pero rhythmbox-client --print-playing
parece funcionar bien.