我已经对系统进行了配置,这样当我收到新邮件时,屏幕上会出现一个通知气球。有时这很方便,而有时会分散注意力。无需卸载我正在使用的gmail集成,是否可以集中切换是否显示某些种类的通知?
换句话说,我正在寻找一个应用程序(或API),该应用程序允许我查看使用通知服务的“已注册”应用程序列表,并将它们切换为启用/禁用状态。或者,允许我创建一个或多个正则表达式,以匹配源应用程序名称或通知气泡内容,如果发生匹配,则可以阻止该通知。
我已经对系统进行了配置,这样当我收到新邮件时,屏幕上会出现一个通知气球。有时这很方便,而有时会分散注意力。无需卸载我正在使用的gmail集成,是否可以集中切换是否显示某些种类的通知?
换句话说,我正在寻找一个应用程序(或API),该应用程序允许我查看使用通知服务的“已注册”应用程序列表,并将它们切换为启用/禁用状态。或者,允许我创建一个或多个正则表达式,以匹配源应用程序名称或通知气泡内容,如果发生匹配,则可以阻止该通知。
Answers:
您也许可以在d总线级别对此进行过滤,但是这似乎需要大量工作。首先查看这篇文章,以深入了解osd的运行方式
在单独的控制台上发送运行“通知发送”之前,请先启动dbus-monitor。
方法调用sender =:1.2450-> dest = org.freedesktop.DBus serial = 5 path = / org / freedesktop / DBus; interface = org.freedesktop.DBus; 成员= GetNameOwner
字符串“ org.freedesktop.Notifications”
方法调用sender =:1.2450-> dest =:1.41 serial = 6 path = / org / freedesktop / Notifications; interface = org.freedesktop.Notifications; 成员= GetServerInformation
方法return sender =:1.41-> dest =:1.2450 reply_serial = 6
字符串“ notify-osd”
字符串“ Canonical Ltd”
字符串“ 1.0”
字符串“ 1.1”
方法调用sender =:1.2450-> dest =:1.41 serial = 7 path = / org / freedesktop / Notifications; interface = org.freedesktop.Notifications; 成员=通知
字符串“通知发送”
uint32 0
字符串“ /usr/share/pixmaps/debian-logo.png”
字符串“我的标题”
字符串“某些文本正文”
数组[
]
数组[
字典条目(
字符串“紧急”
变体字节1
)
]
int32 -1
notify-osd确实存在于dbus上
dpkg -L notify-osd /usr/share/dbus-1/services/org.freedesktop.Notifications.service
但是/etc/dbus-1/system.d中对此服务没有其他限制
因此,您可以制作一个配置文件,该文件可以根据通知事件的来源过滤掉它们,并实现您所需要的控制。这是我最好的方法,无需深入研究问题和dbus规范。希望对您有所帮助,开始时应该更轻松地进行配置。
...但是看起来很多工作...
至少对于粗略的通用解决方案来说,这还算不错。
这是我的答复到去年(2012年9月)中的详细信息的副本
dbus-monitor "interface='org.freedesktop.Notifications'" \
| grep --line-buffered 'string "NetworkManager"' \
| sed -u -e 's/.*/killall notify-osd/g' \
| bash
替换string "NetworkManager"为所需的RE以确定阻塞。
要了解要运行的RE模式匹配的内容
dbus-monitor "interface='org.freedesktop.Notifications'"
,请在弹出通知时查看输出。
即。要notify-send也删除消息,请改用此grep行:
| grep --line-buffered 'string "NetworkManager"\|string "notify-send"' \
需要注意:
killall notify-osd在非鉴别和完全擦拭任何待决消息的通知堆irregardless是否NetworkManager或notify-send是所述通知代理。
“诚实”的解决方案需要考虑在确定需要进行通知清除然后再进行清除之间可能出现的竞争状况,此时会弹出另一个通知,该通知应该弹出而不被其余部分清除。
另外,如果在要阻止的有问题的通知到来时通知处于待处理状态,则将全部清除。这种情况至少可以通过以下方式解决:复制dbus待处理的通知,然后notify-send在清除后重新发出所需的通知。
这有点体力劳动!
理想情况下,直接使用dbus
method void org.freedesktop.Notifications.CloseNotification(uint id) [1]
不幸的是,仅针对所需的通知进行专门定位是不明显的……但是……
另一个答案是否
可以通过DBus触发和调用org.freedesktop.Notifications.CloseNotification(uint id)?
显示了如何使用[1],至少与结合使用notify-send,但不幸的是,该方法不适用于任意通知aps。虽然有些APS。具有用于控制弹出通知的自定义界面。
交叉引用: