Скрипт для отслеживания изменений заголовка окна

Вот в чем дело: я использую пакет lastfm для прослушивания своего Last.FM (duh)... И я хочу показать некоторые уведомления notify-osd при запуске новой музыки.

Пока программа не поддерживает его, я хочу создать сценарий оболочки, который будет отслеживать заголовок окна проигрывателя lastfm и отправлять уведомление при его изменении.

Как вы думаете? Как я могу начать?

2 ответа

Решение

Вы можете проверить заголовок открытого окна, используя wmctrl:

$ wmctrl -lx | grep "last.fm.Last.fm" | grep -Po "(?<=$HOSTNAME ).*$"
Insomnium – Death Walked the Earth

Однако просмотр заголовка с использованием этого метода потребует от сценария периодического опроса изменений, что может быть грязным и неэффективным.

Разумнее было бы подождать какое-то событие, генерируемое проигрывателем Last.fm. Интерфейс D-Bus или подобный API был бы идеальным, но я не вижу никакой документации, предлагающей такой. В качестве следующей лучшей альтернативы вы можете попробовать просмотреть вывод терминала для получения информации о том, что делает игрок:

#!/bin/bash

grabnextline=0
albumart="$(mktemp)"

while read line; do
    if [ $grabnextline = 1 ]; then
        title="$(echo "$line" | cut -d\" -f2)"
        wget -O "$albumart" "$(grep -A 10 "<title>$(echo "$title" | awk -F ' – ' '{print $2}')" ~/.local/share/Last.fm/Last.fm.log | grep -Eo "http://.*\.(jpg|png)" | sed 's/174s/64s/' | sed 's/jpg/png/')"
        notify-send "$title" --icon "$albumart"
        grabnextline=0
    fi
    if [[ "$line" = *ScrobblerManager::nowPlaying* ]]; then
        grabnextline=1
    fi
done < <( /usr/bin/lastfm 2>&1 )

rm "$albumart"

exit

Это все еще уродливый хак, но он выполняет свою работу.

Какой игрок вы используете для list.fm . Многие приложения используют dbus для уведомления о событиях. Вам нужно будет поймать их в сценарии.

Как и на следующей странице есть пример того, как использовать функцию изменения песни catch Rhythmbox.

Trace Rhythmbox смена дорожки с использованием dbus

Другие вопросы по тегам