技术解析

请教 “Ubuntu 16.04 Unity 桌面下 系统托盘第三方应用图标重复”如何解决?
0
2021-06-24 17:58:23
idczone

安装 albert 和 flameshot 后,

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

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

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


退不出?

可以正常退出,就是图标变了,很难受。

c++写的还有这种问题,你试试给他们 issue 下问问。

在 Ubuntu 17.10 Gnome 环境下没有问题,图标显示正常。
也有很多人也出现了类似的问题,但没解决:
https://bugs.launchpad.net/ubuntu/+source/quiterss/+bug/1529957

这个是开发者在致敬 Windows

我墙都不扶就服你

unity 好像出新版了

楼主可以试试看用 hardcode-tray,说不定有奇效

omph Unity 7.4.5 用了,没用

hardcode-tray 没有用啊

那就不知道了,我在 Manjaro+Deepin 上也试了这两个软件,没有你这个问题

[![screenshot.png]( https://i.loli.net/2018/02/19/5a8aa60700ca6.png)]( https://i.loli.net/2018/02/19/5a8aa60700ca6.png)

出问题的是 Unity 桌面环境。不是 deepin 的桌面环境。

知道呀,就是跟你说一下这个 bug 估计是 unity-only 的,再偷偷的安利一下 dde 和 kde (

windows 也会有这个 bug ?

多谢。

对的还会经常空图标

我用了 ubuntu 很多年了,竟然不知道有两个这么好的软件。请问还有其它软件推荐没有啊??@zetaoyang,谢谢

有啊。我博客写过 https://zetaoyang.github.io/post/2017/06/20/my-linux-mint-configuration.html

还有些软件没有加进去,我抽空会更一更。

我没遇到过呢…

博客里面图在我这儿挂啦

我这边可以打开,图片没有挂掉。你可以挂个代理试试


我还重新用 AppImage 打包了 深度截图。https://github.com/ZetaoYang/deepin-app-package/releases

666 不过我这边 dde 自带有这个(而且我觉得 flameshot 好像比深度截图好用

''qb" 这图标是什么应用啊?![3434318.png]( https://i.loli.net/2018/02/20/5a8b992be8077.png)

是一个叫做 qbittorrent 的应用,下 bt 的

顺便说一下,之后可以在 Ubuntu 18.04 官方源里找到 flameshot。

感谢你为 flameshot 所做的工作。

我的系统是 Ubuntu 16.04 LTS,在我这里是可以重现的。作为一个老程序员,推测应该是向系统注册通知栏图标的时候 ID 重复了……

刚才随便看了下两者的源代码,看到 flameshot 是使用 QDBusInterface 去和系统的 org.freedesktop.Notifications 服务交互的,ID 指定为 0。由此,结合上面有人提到的新版本系统下无此问题的情况,进一步推测,应该是指定值为 0 的 ID 会由系统生成随机 ID,也许算法是某种 hash,而 flameshot 和 albert 的计算结果正好撞上了。

十分感谢,不过在 Ubuntu 17.10 Unity 桌面环境下图标是正常的。

借这个地方问一下。org.freedesktop.Notifications 这个 dbus 服务不是用来向桌面发送通知消息的吗,这个能实现托盘图标吗?托盘图标不是基于 X11 协议的吗?
https://developer.gnome.org/notification-spec/
https://specifications.freedesktop.org/systemtray-spec/systemtray-spec-0.3.html

我对 *nix 的图形系统所知相当有限,但是从你列出的第一个链接里看,很显然应该就是在 gnome 环境下实现托盘图标的基本方法。而且,X11 作为底层协议,貌似也不应该能够对桌面实现这样的高层直接定义 API/通讯方式吧。
顺便 @zetaoyang,从上面这位 V 友提供的官方编程接口文档来看,我的推测有所偏差,ID 是对应图标不差,不过调用时指定的话是用于更新图标的(也即代表要被更新的图标),0 这个值表示并不是更新图标,而是新增一个。尽管如此,我仍然推测是系统在这个机制的实现代码里有 bug,而在 17.10 这样的后续版本中得到了修正。


我是说 org.freedesktop.Notifications 似乎不是托盘图标( System Tray )协议,而是“通知”( Notifications )的协议
比如卸载一个 u 盘时 Ubuntu 在右上角显示一个长方形通知“ xxxx 已安全移除”
托盘协议

手抖,接上文
托盘协议可能是基于 X11 的(基于 X11 ),但库可能对其封装,比如 QT 就封装这个协议
最终似乎是使用 _NET_SYSTEM_TRAY_OPCODE
这两者应该不是同一个东西

这个我认为极有可能。假如 DE 换成 KDE 的话,也会以 KDE 的风格相应展现,但你只要知道 DE 会自如地处理这个请求就够了,毕竟只是使用它。

因为单从效果来看,你并不在意是不是 qt 封装,上述讨论中我也没太考虑 qt 自己的方式。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服