rhythmbox-client --print-playing
говорит мне название песни, независимо от того, играет ли оно на самом деле. Я просто должен знать, сгенерирован ли звук в настоящее время rhythmbox (так, чтобы я знал, хочу ли я приостановить его и более поздняя непауза он).
Обновление:
Один ужасный ответ кандидата:
Я думаю, что rhythmbox действительно может быть лишен этого основного интерфейса.
Но когда я работаю pacmd list-sink-inputs
то, которое я собираю, запрашивает микшер о том, что питается, он все еще перечисляет rhythmbox независимо от того, играет ли он. Однако это имеет строку "состояния" в выводе, который "РАБОТАЕТ" или "ЗАКУПОРЕННЫЙ" в зависимости от того, приостанавливается ли музыка.
можно использовать интерфейс MPRIS2 DBus , он хорошо установлен стандарт и реализован почти всеми плеерами.
тот же стандарт, который используется индикатором звука Единицы Ubuntu для обнаружения, показывает и управляет плеерами. Таким образом, Ваш сценарий будет универсален и мог работать с любым плеером, который Вы любите.
Подсказка: Использование D-Feet
для исследования его d-ноги являются монитором DBus и могут взаимодействовать с интерфейсами DBus непосредственно.
gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.mpris.MediaPlayer2.Player.Pause
gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.mpris.MediaPlayer2.Player.PlayPause
~$ gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.freedesktop.DBus.Properties.Get \
org.mpris.MediaPlayer2.Player PlaybackStatus
(<'Playing'>,)
~$ gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.freedesktop.DBus.Properties.Get \
org.mpris.MediaPlayer2.Player PlaybackStatus
(<'Stopped'>,)
pacmd list-sink-inputs
дает список всех рабочих плееров, таким образом, Вы не должны даже знать, которые Вы ищете заранее, и говорит Вам, которые играют / приостановленный и т.д. Я записал это для Python, но Вы могли сделать лучшее задание с awk или ударом, я уверен:
import commands,re
def linux_musicplayer_check_whether_playing():
"""
Report which applications are currently sending
sound to the mixer, based on the output of the command:
pacmd list-sink-inputs
Also list those which are running/connected,
but not currently sending sound.
Returns a dict listing applications and a boolean playing state.
This is very GNU/Linux specific! At least, it works on Ubuntu.
On other platforms, there may be direct ways for each application.
For instance, under Ubuntu, you can ask banshee:
'playing' in commands.getstatusoutput("banshee --query-current-state")[1])
but there's nothing like this for rhythmbox.
"""
found={}
for cl in commands.getstatusoutput("pacmd list-sink-inputs |grep -e index: -e state: -e client:")[1].split('index:')[1:]:
found[ re.findall('<(.*?)>', cl.split(':')[2])[0].lower() ] =
'RUNNING' in cl.split(':')[1]
return(found)