Ubuntu GNOME Shell 42.9下使用AppIndicator3添加顶栏图标失败求助
你好!看了你的问题描述和代码,没报错但图标不显示确实挺头疼的,结合GNOME Shell 42.9和Ubuntu 22.04的环境,我帮你梳理几个可能的原因和解决办法:
缺少菜单是常见的“隐形”原因
AppIndicator3的图标在GNOME环境下,通常需要绑定一个菜单才会正常显示——哪怕是一个最简单的退出菜单。你的代码里只初始化了Indicator,但没有添加任何菜单,这很可能导致图标被系统忽略。给你修改后的代码,添加一个基础菜单试试:
import signal import gi gi.require_version('Gtk', '3.0') gi.require_version('AppIndicator3', '0.1') from gi.repository import Gtk, AppIndicator3, GLib APPINDICATOR_ID = 'custom_indicator' CUSTOM_ICON_PATH = '/home/afranz/Desktop/ActiveTime/activity_counter_app/icon.svg' class CustomIndicator: def __init__(self): self.indicator = AppIndicator3.Indicator.new( APPINDICATOR_ID, CUSTOM_ICON_PATH, AppIndicator3.IndicatorCategory.APPLICATION_STATUS ) self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) # 添加菜单(关键!) self.menu = Gtk.Menu() # 添加退出选项 quit_item = Gtk.MenuItem(label='退出') quit_item.connect('activate', Gtk.main_quit) self.menu.append(quit_item) self.menu.show_all() self.indicator.set_menu(self.menu) def run(self): Gtk.main() def main(): app = CustomIndicator() signal.signal(signal.SIGINT, signal.SIG_DFL) app.run() if __name__ == '__main__': main()验证扩展是否正确启用
你提到装了支持托盘图标的GNOME扩展,要确认装的是官方的AppIndicator and KStatusNotifierItem Support(旧版也叫TopIcons Plus,但现在官方推荐前者)。可以打开GNOME扩展管理器,检查这个扩展是否处于启用状态,有时候重启后可能需要手动重新开启。排除图标本身的问题
先暂时替换成系统内置的图标测试,比如把CUSTOM_ICON_PATH改成'system-run'(这是GNOME自带的图标名),如果能显示,说明是你的SVG图标有问题——比如尺寸不符合要求(建议用24x24或16x16的SVG),或者文件损坏。检查文件权限
虽然你说路径正确,但还是要确认当前用户有读取这个SVG文件的权限。打开终端执行:ls -l /home/afranz/Desktop/ActiveTime/activity_counter_app/icon.svg确保输出里的权限列包含
r(比如-rw-r--r--),如果权限不足,执行:chmod +r /home/afranz/Desktop/ActiveTime/activity_counter_app/icon.svg尝试用StatusNotifierItem替代
如果你不想局限于AppIndicator,GNOME原生推荐用StatusNotifierItem(KStatusNotifierItem),它是现代GNOME更兼容的托盘标准。不过实现逻辑和AppIndicator类似,同样需要绑定菜单才能显示。
备注:内容来源于stack exchange,提问作者Álvaro Franz

