每次特定应用程序发出通知时执行脚本

piy*_*a25 5 command-line dbus notify-send

我安静地搜索了一下,但所有文章和答案都只告诉您如何创建自己的通知。我想要做的是跟踪所有应用程序发出的所有通知,并在每次发出特定通知时执行特定脚本。

我将编写我的程序来做到这一点。我需要的帮助是如何“拦截”通知。

Jac*_*ijm 5

使用(并识别)通知来触发后续操作

如果我们稍微编辑一下这个非常好的答案中建议的片段,我们可以将调用的通知写入文件:

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
Run Code Online (Sandbox Code Playgroud)

或以其他方式使用它来触发后续操作。

一个例子

如果我们编辑代码片段以在弹出通知时运行脚本:

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 {}
Run Code Online (Sandbox Code Playgroud)

并且script.sh是:

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
Run Code Online (Sandbox Code Playgroud)

然后,每次,如果通知匹配“een aap op een fiets”:

在此输入图像描述

gedit将打开:)

在此输入图像描述

笔记

尽管代码可以完美地拦截通知以触发任何类型的操作,但我发现无法识别pid调用通知的方法。