我想在其他设备上显示我的桌面通知(我正在使用 Gnome 3)。所以我想编写一个软件,可以在我的计算机上获取通知并通过互联网发送它。不幸的是,我没有找到任何好的点来开始我的代码如何获取通知并用它们做一些事情。
有一些 API 吗?
答案1
好吧,Gnome 通知使用 D-BUS 来传递消息。这侏儒规范描述了如何使用这些org.freedesktop.Notifications.*
类并提供了大量的格式化提示。一般来说,它是 HTML-ish 格式。
然而,您绝对不能远程与另一台机器上的 D-BUS 通信。我们甚至不知道会出现多少安全漏洞。
尽管如此,您始终可以在目标机器上安装一个程序,该程序将接收通信并与本地已有的 D-BUS 进行通信。
有两个选项可以作为包装器org.freedesktop.Notifications.*
,使编写程序变得更加容易:
libnotify
:这几乎是通知的事实上的标准,不仅支持 gnome,还支持其他几个。notify-sharp-3
:听起来很奇怪,它是一个围绕多个通知规范的基于开源 C# 的功能。在某些时候,它甚至有自己的语言,称为boo
,但它正在逐渐消失libnotify
。
好的,libnotify
我们走了。
libnotify
附带一个知道如何与通知守护进程通信的二进制文件(是的,这些通知由后台守护进程显示)。命令是notify-send
,使用起来相当简单。
notify-send 'Meeting in 5 minutes' 'John from the <b>QA Team</b> just found a bug that should never had happened. Seriously, we are doing something wrong'
这将显示通知。然而,使其远程化有点复杂。假设您知道bob
当前在计算机上运行 Xorg 的用户krakatoa
,并且 krakatoa 已安装 libnotify 并正在运行 gnome 通知守护进程,您可以执行以下操作:
ssh bob@krakatoa \
notify-send 'Meeting in 5 minutes' \
'John from the <b>QA Team</b> just found a bug that should never had happened. Seriously, we are doing something wrong'
但找到每台机器上的每个用户可能很棘手。您可以尝试创建一个脚本来执行ps -afe | grep gnome
、找到用户并运行su -u <user> DISPLAY=:0 notify-send ...
。但话又说回来,您可能不应该像一开始那样发送ssh
请求。root
这拱门维基libnotify
有多种语言的接口列表。从那里您可以创建自己的守护程序,并使用您自己的通知消息通信协议。例如,由于您专门追求 gnome,python Gobject
因此可能正好符合要求。
总之:
通知发生在 D-BUS 上;
无法远程直接访问D-BUS;
您可以使用
libnotify
目标机器上受您控制的程序来访问 D-BUS。
参考: