ref:
Close button on notify-osd?
Bookmark:
Can org.freedesktop.Notifications.CloseNotification(uint id) be triggered and invoked via DBus?
Currently, this script
dbus-monitor "interface='org.freedesktop.Notifications'" | \
grep --line-buffered "member=Notify" | \
sed -u -e 's/.*/killall notify-osd/g' | \
bash
will kill all pending notifications.
It would be better to finesse the specific target OSD notification to cancel, by using org.freedesktop.Notifications.CloseNotification(uint id)
. Is there an interface method that can put this on (in?) the DBus to fire when a particular notify event occurs?
The method will need to get the notify PID to use as the argument for CloseNotification(uint id)
. Alternatively,
qdbus org.freedesktop.Notifications \
/org/freedesktop/Notifications \
org.freedesktop.Notifications.CloseNotification(uint id)
could be used from the shell, if the (uint id)
argument could be determined. The actual command syntax would use an integer in place of (uint id)
.
Perhaps a better question to ask first might be "How is a notification's DBus address found?".
Neither of these identify it correctly:
gdbus monitor --session --dest org.freedesktop.Notifications
returns
The name org.freedesktop.Notifications is owned by :1.130
...
or
dbus-monitor "interface='org.freedesktop.Notifications'"
returns
... string ":1.340" ...
In hindsight, the previous question "How is the (uint id)
for a notification found?"is rhe torical given this previous answer to another question:
https://askubuntu.com/a/186311/89468
provides details so either method below can be used:
gdbus call --session --dest org.freedesktop.DBus \
--object-path / \
--method org.freedesktop.DBus.GetConnectionUnixProcessID :1.16
returning:
(uint32 8957,)
or
qdbus --literal --session org.freedesktop.DBus \
/ \
org.freedesktop.DBus.GetConnectionUnixProcessID :1.16
returning:
8957
The pop-up notify-OSD graffit would be then defeated with:
qdbus org.freedesktop.Notifications \
/org/freedesktop/Notifications \
org.freedesktop.Notifications.CloseNotification \
$(qdbus --literal --session \
org.freedesktop.DBus \
/ \
org.freedesktop.DBus.GetConnectionUnixProcessID :?.??? )
The "trick" is to find the :?.???
DBus address.