Ubuntu从13.04起移除systray白名单机制,Unity桌面仅允少数进程显示托盘图标;14.04+需安装indicator-systemtray-unity,18.04–22.04 GNOME下须启用appindicatorsupport扩展且运行于X11会话,并注意应用需适配AppIndicator协议而非传统X11 systray。

Ubuntu 从 13.04 起就移除了传统 systray 白名单机制,Unity 桌面默认只允许少数几个进程(如 JavaEmbeddedFrame、Wine)显示托盘图标;后续版本甚至彻底废弃了 systray-whitelist 配置项。现在想让某个具体程序(比如 skypeforlinux、teams、自研 Qt/Python 应用)显示图标,不能靠“加白名单”一招鲜,得看桌面环境、应用技术栈和 Ubuntu 版本三者是否匹配。
Ubuntu 18.04–22.04(GNOME 桌面):托盘图标默认被禁用,需手动启用扩展
GNOME 3.28+ 默认隐藏所有传统 systray 图标,包括老式 libappindicator 应用。要恢复显示:
- 安装 GNOME 托盘扩展:
sudo apt install gnome-shell-extension-appindicator - 启用扩展(需重启 GNOME Shell 或注销重登):
gnome-extensions enable appindicatorsupport@rgcjonas.gmail.com - 某些应用(如
qbittorrent)需额外设置:在偏好设置里勾选「在系统托盘中显示图标」,否则即使扩展启用也不显示 - 注意:该扩展不支持 Wayland 会话,必须在 X11 下运行(登录界面选择「Ubuntu on Xorg」)
Ubuntu 14.04–16.04(Unity 桌面):白名单已失效,改用 indicator-systemtray-unity
gsettings set com.canonical.Unity.Panel systray-whitelist 在 14.04 后完全无效,强行写入会被忽略。正确路径是:
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 添加 PPA 并安装:
sudo apt-add-repository ppa:fixnix/indicator-systemtray-unity→sudo apt update→sudo apt install indicator-systemtray-unity - 安装后需注销再登录,新托盘服务会接管
libappindicator类应用(如旧版pidgin、dropbox) - 若仍不显示,检查应用是否链接了
libappindicator3-1(不是libappindicator1),缺失则运行:sudo apt install libappindicator3-1
Qt 或 Python 自研应用无法显示图标:不是配置问题,是 API 适配问题
很多开发者误以为只要调用 QSystemTrayIcon 就能显示,但在 Ubuntu Unity/GNOME 上常失败——根本原因是 Qt 默认使用 X11 systray 协议,而现代桌面只响应 AppIndicator 协议。
- Qt 应用:必须显式启用 AppIndicator 支持,编译时链接
libappindicator-qt(Ubuntu 仓库已弃用),或改用QApplication::setAttribute(Qt::AA_EnableHighDpiScaling)+QSystemTrayIcon配合libappindicator3-1的 D-Bus 接口(实际兼容性差) - Python 应用:推荐直接用
pystray(纯 D-Bus 实现)而非PyQt5.QtWidgets.QSystemTrayIcon,示例:pystray.Icon("name", icon, menu=menu).run() - 关键点:图标文件路径必须是绝对路径且可读,相对路径(如
"icon.png")在 daemon 化后常失效
图标本身被替换但不生效:路径、权限与缓存全都要查
修改 /usr/share/pixmaps/xxx/tray/icon.svg 后没变化,大概率卡在以下环节:
- 图标文件权限不对:
sudo chmod 644 /usr/share/pixmaps/xxx/tray/icon.svg(不能是 root-only 可读) - 应用缓存未清:
killall xxx再启动,某些应用(如telegram-desktop)会缓存图标尺寸,需删~/.local/share/TelegramDesktop/tdata/下缓存 - 主题缩放干扰:GNOME 中若设置了 200% 缩放,应用可能尝试加载
icon@2x.png,但你只提供了icon.png→ 补上对应高分屏版本 - SVG 渲染限制:部分旧应用(如
pidgin)只认 PNG,SVG 会被忽略,必须提供.png格式且尺寸为 22×22 或 24×24
真正麻烦的不是改哪行配置,而是 Ubuntu 不同版本混用了至少四种托盘机制(X11 systray、Unity indicator、GNOME AppIndicator、D-Bus StatusNotifierItem),同一个应用在 16.04 和 22.04 上可能需要完全不同的修复路径。动手前先确认你的 Ubuntu 版本、桌面环境、应用类型,再决定是装扩展、换库、还是重写托盘逻辑。

















