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

Я немного потихоньку искал, но все статьи и ответы только рассказывают, как создать собственное уведомление. Что я хочу сделать, так это отслеживать все уведомления, сделанные всеми приложениями, и выполнять определенный скрипт каждый раз, когда делается определенное уведомление.

Я напишу свою программу для этого. Все, что мне нужно, - это как перехватить уведомления.

1 ответ

Решение

Используйте (и идентифицируйте) уведомления для запуска последующих действий

Если мы немного отредактируем предложенный фрагмент в этом очень хорошем ответе, мы можем записать вызванное уведомление в файл:

dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "string" | grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | grep --line-buffered -v '^\s*$' | xargs -I '{}' echo {} > file.txt

или иным образом использовать его для запуска последующих действий.

Пример

Если мы отредактируем фрагмент для запуска скрипта при появлении уведомления:

dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "string" | grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | grep --line-buffered -v '^\s*$' | xargs -I '{}' /bin/bash /path/to/script.sh {}

а также script.sh является:

#!/bin/bash
string=$1
match="een aap op een fiets"
if [[ $string == $match ]]
  then
    gedit
fi

Затем, каждый раз, если уведомление соответствует "een aap op een fiets":

gedit откроется:)

Заметка

Хотя код отлично работает, чтобы перехватить уведомление, чтобы вызвать любое действие, я не нашел способа идентифицировать pid это называется уведомлением.

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