Как определить из командной строки, играет ли ритмбокс?
rhythmbox-client --print-playing
говорит мне название песни, независимо от того, играет ли она на самом деле. Мне просто нужно знать, генерируется ли в данный момент звук с помощью ритмбокса (чтобы я знал, хочу ли я его приостановить, а затем отключить).
Обновить:
Один уродливый кандидат ответ:
Я думаю, что Rhythmbox действительно может быть лишен этого базового интерфейса.
Но когда я бегу pacmd list-sink-inputs
который я собираю, запрашивает микшер о том, что кормит, он все еще перечисляет ритмбокс независимо от того, играет ли он Тем не менее, он имеет строку "state" на выходе, которая является "RUNNING" или "CORKED" в зависимости от того, приостановлена ли музыка.
2 ответа
Спецификация удаленного интерфейса медиаплеера (MPRIS)
Вы можете использовать интерфейс MPRIS2 DBus, он является общепризнанным стандартом и реализован практически всеми игроками.
Тот же стандарт, который используется звуковым индикатором Ubuntu Unity для обнаружения, отображения и управления игроками. Таким образом, ваш сценарий будет общим и может работать с любым плеером, который вам нравится.
Подсказка: используйте D-Feet
чтобы исследовать его, d-foot является монитором 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 или bash, я уверен:
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)