Я хочу приостановить воспроизведение после того, как наушники были отключены, затем возобновляются после того, как они были включены назад.
Мое текущее решение использует ACPI для обнаружения разъема / отключают, как показано здесь. Для проигрывания / приостанавливают воспроизведение, я использую xdotool key XF86AudioPlay
.
Это решение хорошо работает в основном случае:
Однако я не хочу возобновлять воспроизведение, если это не было активно, когда наушники были отключены.
Вообразите этот сценарий:
Последняя точка - то, где проблема заключается – воспроизведение возобновилось бы после того, как наушники включаются назад, хотя это не было активно в то время, когда они были отключены.
Кроме того, xdotool key XF86AudioPlay
просто переключает воспроизведение, тогда как xdotool key XF86AudioPause
ничего не делает. Это делает вещи еще хуже:
Таким образом, то, в чем я нуждаюсь, должно обнаружить игру / пауза / события остановки, а также разъем / отключают события, чтобы смочь правильно реагировать во всех возможных сценариях.
Этот конечный автомат описывает желаемую операцию:
Одна идея, которая прибыла по моему мнению, состоит в том, чтобы снова переплести сочетания клавиш для игры / пауза / остановка для добавления логики конечного автомата. Это имеет недостаток, которые воспроизводят, всегда должен управляться с помощью этих сочетаний клавиш, вместо, например, кнопок Rhythmbox, который несколько непрактичен.
Кроме того, если я закрою Rhythmbox при проигрывании, то конечный автомат останется в a playing
состояние. Конечно, у меня мог быть 'демон', который будет ожидать, пока Rhythmbox не закрывается и затем устанавливает состояние на stopped
. Но что, если это не Rhythmbox, который играет музыку, что, если это - например, VLC и т.д.? Этот подход ужасен и ненадежен, таким образом, я хотел бы избежать его.
Мой вопрос: То, как обнаружить, когда воспроизведение медиа было приостановлено / возобновленный / остановилось?