Как непрерывно отслеживать Rhythmbox для изменения пути с помощью Bash
Вопрос
Я хотел бы сделать то же самое, что и описано здесь, но с помощью сценариев оболочки (предпочтительно в Bash) вместо Python. Кажется, что такая вещь должна быть возможна, используя dbus-monitor
, но я не очень знаком с DBU, и мне не ясно, как принять концепции, описанные в решении вопроса Python, и применить их к инструменту DBUS-Monitor.
Решение
Вот самый простой способ, которым я мог найти:
#!/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
Он производит выход, как это:
Now playing: Daft Punk - Overture
Now playing: Daft Punk - The Grid
Он также печатает в настоящее время воспроизводимая песня при запуске. Если это не то, что вы хотите, посмотрите на содержимое $line
и посмотрите, содержит ли он NameAcquired
или же playingUriChanged
. Анкет Если он содержит NameAcquired
, пропусти это.
Основное различие между версией Python и этой версией Bash заключается в том, что версия Python использует DBU для получения информации о воспроизведении песни. Я не мог найти хорошего способа сделать это с помощью Bash, но rhythmbox-client --print-playing
Кажется, работает хорошо.