Как непрерывно контролировать ритмбокс для смены треков, используя bash - PullRequest
6 голосов
/ 17 марта 2011

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

1 Ответ

14 голосов
/ 18 марта 2011

Вот самый простой способ, который я мог найти:

#!/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, кажется, работает хорошо.

...