请教 “Ubuntu 16.04 Unity 桌面下 系统托盘第三方应用图标重复”如何解决?

2018-02-19 09:16:24 +08:00
 zetaoyang

安装 albertflameshot 后,

1.先启动 albert,再启动 flameshot,这两图标全部变成 flameshot 的图标;

2.先启动 flameshot,再启动 albert,这两图标全部变成 albert 的图标;

遇到这样问题,请问高手们应该怎样解决?

5132 次点击
所在节点    Linux
38 条回复
luojianxhlxt
2018-02-19 19:29:41 +08:00
@heiybb 我没遇到过呢…
x86vk
2018-02-19 19:37:06 +08:00
@zetaoyang 博客里面图在我这儿挂啦
zetaoyang
2018-02-19 19:41:18 +08:00
@x86vk 我这边可以打开,图片没有挂掉。你可以挂个代理试试
zetaoyang
2018-02-19 19:44:25 +08:00
@x86vk
我还重新用 AppImage 打包了 深度截图。https://github.com/ZetaoYang/deepin-app-package/releases
x86vk
2018-02-19 21:49:43 +08:00
@zetaoyang 666 不过我这边 dde 自带有这个(而且我觉得 flameshot 好像比深度截图好用
zetaoyang
2018-02-20 11:43:26 +08:00
@x86vk ''qb" 这图标是什么应用啊?![3434318.png]( https://i.loli.net/2018/02/20/5a8b992be8077.png)
x86vk
2018-02-20 11:44:59 +08:00
@zetaoyang 是一个叫做 qbittorrent 的应用,下 bt 的
hosiet
2018-02-20 12:57:53 +08:00
顺便说一下,之后可以在 Ubuntu 18.04 官方源里找到 flameshot。
zetaoyang
2018-02-20 13:28:37 +08:00
@hosiet 感谢你为 flameshot 所做的工作。
dandycheung
2018-02-22 18:33:50 +08:00
我的系统是 Ubuntu 16.04 LTS,在我这里是可以重现的。作为一个老程序员,推测应该是向系统注册通知栏图标的时候 ID 重复了……
dandycheung
2018-02-22 18:42:43 +08:00
刚才随便看了下两者的源代码,看到 flameshot 是使用 QDBusInterface 去和系统的 org.freedesktop.Notifications 服务交互的,ID 指定为 0。由此,结合上面有人提到的新版本系统下无此问题的情况,进一步推测,应该是指定值为 0 的 ID 会由系统生成随机 ID,也许算法是某种 hash,而 flameshot 和 albert 的计算结果正好撞上了。
zetaoyang
2018-02-23 09:36:39 +08:00
@dandycheung 十分感谢,不过在 Ubuntu 17.10 Unity 桌面环境下图标是正常的。
iwtbauh
2018-02-23 17:47:53 +08:00
@dandycheung 借这个地方问一下。org.freedesktop.Notifications 这个 dbus 服务不是用来向桌面发送通知消息的吗,这个能实现托盘图标吗?托盘图标不是基于 X11 协议的吗?
https://developer.gnome.org/notification-spec/
https://specifications.freedesktop.org/systemtray-spec/systemtray-spec-0.3.html
dandycheung
2018-02-24 16:52:26 +08:00
@iwtbauh 我对 *nix 的图形系统所知相当有限,但是从你列出的第一个链接里看,很显然应该就是在 gnome 环境下实现托盘图标的基本方法。而且,X11 作为底层协议,貌似也不应该能够对桌面实现这样的高层直接定义 API/通讯方式吧。
顺便 @zetaoyang,从上面这位 V 友提供的官方编程接口文档来看,我的推测有所偏差,ID 是对应图标不差,不过调用时指定的话是用于更新图标的(也即代表要被更新的图标),0 这个值表示并不是更新图标,而是新增一个。尽管如此,我仍然推测是系统在这个机制的实现代码里有 bug,而在 17.10 这样的后续版本中得到了修正。
iwtbauh
2018-02-24 19:32:32 +08:00
@dandycheung
我是说 org.freedesktop.Notifications 似乎不是托盘图标( System Tray )协议,而是“通知”( Notifications )的协议
比如卸载一个 u 盘时 Ubuntu 在右上角显示一个长方形通知“ xxxx 已安全移除”
托盘协议
iwtbauh
2018-02-24 19:34:53 +08:00
@iwtbauh 手抖,接上文
托盘协议可能是基于 X11 的(基于 X11 ),但库可能对其封装,比如 QT 就封装这个协议
最终似乎是使用 _NET_SYSTEM_TRAY_OPCODE
这两者应该不是同一个东西
dandycheung
2018-02-26 19:37:11 +08:00
@iwtbauh 这个我认为极有可能。假如 DE 换成 KDE 的话,也会以 KDE 的风格相应展现,但你只要知道 DE 会自如地处理这个请求就够了,毕竟只是使用它。
dandycheung
2018-02-26 19:39:48 +08:00
@iwtbauh 因为单从效果来看,你并不在意是不是 qt 封装,上述讨论中我也没太考虑 qt 自己的方式。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/431201

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX