Как непрерывно контролировать ритмбокс для смены треков, используя bash

Я хотел бы сделать то же самое, что описано здесь, но с использованием сценариев оболочки (предпочтительно в bash) вместо python. Кажется, что такая вещь должна быть возможна с помощью dbus-monitor, но я не очень знаком с dbus, и мне не ясно, как взять концепции, описанные в решении вопроса о питоне, и применить их к инструменту dbus-monitor.

1 ответ

Решение

Вот самый простой способ найти:

#!/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 использует DBus для получения информации о воспроизводимой песне. Я не мог найти хороший способ сделать это с помощью Bash, но rhythmbox-client --print-playing Кажется, работает хорошо.

Другие вопросы по тегам