Даже если вопрос требует сценария, я хотел оставить это здесь.
Я написал приложение C, которое делает это на Ubuntu. Еще лучше, он сидит на лотке индикатора (используя libappindicator) и проверяет, что Spotify играет, с короткими интервалами. Если он воспроизводит объявление (проверяет черный список), он отключает Spotify. Если воспроизводится новое объявление, вы просто нажимаете «Отключить звук» в меню индикатора и добавляет его в черный список.
Что он делает, ищет окно X, для которого XFetchName возвращает Spotify - Linux Preview. Затем он вызывает XGetWindowProperty, чтобы запросить свойство _NET_WM_ICON_NAME этого окна, которое возвращает строку в формате "Spotify –
"Spotify – Spotify – Premium Free Trial Cancel Any Time"
Он поддерживает тройное дерево поиска в списке объявлений, чтобы эффективно проверить, находится ли текущий заголовок в списке.
[d5 ] Он также использует асинхронный API PulseAudio для запроса sink-inputs и set-mute:
pa_context_get_sink_input_info_list()
pa_context_set_sink_input_mute()
. Поскольку это простой код C, он имеет малый вес. Проверьте исходный код и пакет Ubuntu .deb на: PulseAudio Asynchronous API . Вероятно, это будет бить сценарий оболочки на 2-3 порядка.
Существует переменная среды, называемая PATH. Введите echo $PATH в терминале, чтобы просмотреть его содержимое. Если некоторые приложения находятся в папках, не входящих в список, вы должны называть их абсолютным путем, например /opt/games/ponyhunting. Приложения из Software Center всегда находятся в PATH, но некоторые дистрибутивные агностические пакеты с сайтов приложений не являются.