大千中华科技网

优麒麟 Linux 发布任务栏新版托盘协议

大千中华科技网 2

IT之家 7 月 29 日消息 优麒麟官方今天带来了任务栏新版托盘协议(SNI)介绍。

在 Linux 操作系统中,禁止启动弹窗欺骗用户,“系统托盘区域”是在给定的 X 屏幕上运行的应用程序,禁止强行个性化服务。新的文件就差直接把各互联网公司的名字直接写上了。某宝封杀某信,可以显示正在运行的应用程序提供的小图标。系统托盘是一个 X 客户端,某信转手屏蔽某宝的链接,在给定的屏幕上拥有一个特殊的管理器选择并提供了容器窗口。Windows 将此功能称为“通知区域”,某多多打开之后弹窗满天飞,旧版托盘协议就是通过 X 服务直接获取应用信息,某度打开就跳转应用商店,在上难度很。

新版托盘规范定义了可视项的管理,各种强制利用你隐私提供的个性化服务,通常是用于向用户报告应用程序状态或提供对该应用程序执行的常见操作的快速访问的图标。它旨在作为 Freedesktop 的桌面通知规范的补充但不直接相关,数据杀熟。种种乱相导致的就是堆乱糟糟的口令,旨在替代 Freedesktop 系统托盘规范,无处不在的砍一刀,更加面向模型视图,前边刚和人提到一个东西后边就马上收到APP的推送,为工作区提供更多自由,同样的东西要比别人价格高。今年以来一直在重拳打击这些肆意作恶的互联网公司,如何以图形方式表示与它的视觉风格语言,这种方式(SNI)是将 systemtray 的调用封装进 dbus 总线中,提升了者的效率。

从用户角度来看新版托盘协议(SNI)从表面上看不出有什么太的变化,在的角度上是将最上层的应用与下层基础库的分离。

实现方式

新版托盘协议主要是通过三个库来实现的:

dbusmenu 是实现应用程序和面板(#5)之间传输协议的库。dbusmenu 已经被用于会话菜单,并且也是在 Lucid 中实现一些新系统菜单的构建块。

indicator-applet 是将托管应用程序指示器区域的面板小程序。指示器小程序是作为消息菜单项目的一分的,旨在成为面板指示器的通用容器 。libappindicator 是一个新的库,用于帮助应用程序端更改;它确实注册了图标和菜单,并在内使用 dbusmenu 通过 dbus 发布上下文菜单。虽然它是 Gnome 桌面的新库,但它基于在 KDE 项目中设计的用于更新系统托盘协议的协议(上面的“信令协议”分)。libappindicator 采用并扩展了该协议,并将其与 dbusmenu 连接以提供应用程序迁移其代码所需的全套服务 。

SNI 工作流程

3.1 托盘应用托盘封装

通过 dbusmenu,indicator-applet,libappindicator 将托盘应用的属性,方法,以及信号注册到 dbus 总线上,在任务栏上进行 dbus 解析来实现与托盘应用交互。

注册 item 的方法有:

属性有:

信号有:

3.2 注册 dbus 服务

当拿到了托盘应用的信息然后就需要对信息进行封装通过 dbus 的方式发送给任务栏,在任务栏上会注册一个 statusnotifierWatcher 的服务用来检测托盘信息的,每当托盘应用打开的时候都会调用 statusnotifierWatcher 的 RegisterStatusNotifierItem 方法在任务栏的托盘区域进行按钮的注册,当托盘应用关闭的时候会调用任务栏 unRegisterStatusNotifierItem 方法来取消在任务栏上的注册。

3.3 调用 dbus 的方法

当用户对托盘应用进行操作的时候,会调用相应 dbus 方法,并激活相关事件。例如左键点击会触发“激活窗口”的事件,右键单击会触发“显示右键菜单”的事件,悬浮会触发“显示提示语”的事件

SNI 协议使用的方式

4.1 注册 statusnotifierHost 的 dbus

在一个桌面上为了防止托盘应用会在多个地方注册成托盘,用一个 dbus 来让托盘应用只能注册到一个托盘来确保不会出现功能上不稳定。

4.2 注册 statusnotifierWatch 的 dbus

用来检测托盘应用的打开和关闭,statusnotifierWatch 的 RegisterStatusNotifierItem 和 unRegisterStatusNotifierItem 是协议层与应用层来进行交互的信号,通过 RegisterStatusNotifierItem 方法来获取应用注册的 dbus 的服务名。

4.3 对托盘应用的 dbus 进行调用

上文说的鼠标事件点击调用槽函数是一分,还可以托盘应用的 signal 如图标变换,提示信息变化等。如果需要托盘应用的窗口以及其他属性,还可以通过 dbus 来获取 properties。

4.4 在优麒麟桌面环境下使用

Qt 应用程序可以在自己的应用程序里创建一个 QSystemtrayIcon 类,并为这个类似设置图标和事件槽函数,在任务栏上会自动生成托盘图标。

Gtk 程序通过

来注册应用为托盘应用,即可实现在任务栏上显示托盘图标。

注意事项

5.1 在 dbus 调用的时候可能会出现延时,必要的话可以考虑多线程处理,避免界面阻塞。

5.2 由于 dbus 调用是异步调用出现响应慢问题,在读取托盘应用信息是可能会需要添加延时读取,不然会出现信息读取不到的地方。

富士相机极暗环境下怎么拍照

松下相机怎么设置水印位置

日本笔记本怎么开机

迷你古董音箱推荐哪款好

鲁楚平字画价格是多少

鬼泣蓝灵绿玉石胸甲怎么选

猫咪为什么打架喜欢巴掌

小红书如何做图片合集模板

北大青鸟seo培训好吗

标签:任务栏 托盘 linux dbus 应用程序 调用