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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top