Notification 底层服务 #
在 KDE Plasma 中,通知功能是内置于 Plasma Shell(或者说更广义上属于 plasma-workspace)的一个组件。 它负责接收来自各个应用的通知请求,并根据系统的视觉风格和用户的设置以图形化的形式显示通知。 这个实现遵循了 freedesktop.org 定义的 Desktop Notifications 规范,因此许多基于该规范的发送工具(如 notify-send)都可以无缝地与之交互。
DBus 的作用 #
D-Bus 在整个架构中作为应用程序间通信 (IPC) 的桥梁起到了核心作用。具体来说:
Plasma 的通知管理器在启动时,会在 session bus 上注册 org.freedesktop.Notifications 接口。 当应用(例如使用 notify-send 的工具或其它基于此接口的程序)发送通知请求时,它们通过 D-Bus 向该接口发送一个包含通知内容、图标、超时设置、操作按钮及其他提示信息的消息。 通知管理器接收到这些消息并处理,随后显示出对应的通知窗口,并在通知被点击或超时后,通过 D-Bus 发出反馈(比如响应点击事件)。
notify-send 工作原理 #
当你在终端中使用 notify-send 命令时,实际上发生了如下过程:
- notify-send 工具构造一个遵循 spec 的 D-Bus 消息,消息内容中包括应用名称、图标、标题、说明、可选的操作和提示等信息。
- 该消息通过用户的 session bus 发送到 org.freedesktop.Notifications 接口。
- KDE Plasma 中注册在该接口上的通知服务接收到消息后,会解析信息,并以系统统一风格展示通知。
- 当用户与通知交互(例如点击、忽略或者等待超时)时,该服务还可能进一步通过 D-Bus 反馈相应的操作或状态给发送端(如果发送端对反馈有需求)。