Ubuntu 17.10(GNOME 3.26.2/Xorg)桌面应用启动器图标异常求助
问题原因与解决方案
这个问题我之前帮不少开发者排查过,本质是GNOME Shell的Ubuntu Dock(GNOME Dock)通过窗口的WM_CLASS属性匹配对应的桌面文件——你的应用启动后,窗口的WM_CLASS属性和Firefox的WM_CLASS重合了,系统就错误关联到Firefox的.desktop文件,自然显示它的图标。
下面是具体的排查和修复步骤:
1. 确认应用窗口的实际WM_CLASS值
首先要搞清楚你的应用窗口到底用了什么WM_CLASS:
- 打开终端,输入命令:
xprop WM_CLASS - 终端会变成十字光标,点击你启动后的应用窗口,终端会输出类似这样的内容:
WM_CLASS(STRING) = "myapp-bin", "MyApp"
- 记下这两个字符串(比如上面的
myapp-bin和MyApp),后面会用到。
2. 修改应用的.desktop文件
找到你的应用对应的.desktop文件(通常在~/.local/share/applications/(用户级)或/usr/share/applications/(系统级)目录下),用文本编辑器打开它:
- 检查是否存在
StartupWMClass字段,如果没有就添加;如果有,把它的值改成你刚才记下的WM_CLASS值(优先试第二个首字母大写的那个,比如上面的MyApp)。示例如下:[Desktop Entry] Name=我的应用 Exec=/path/to/your/app Icon=/path/to/your/icon.png Type=Application StartupWMClass=MyApp # 关键是这个字段 - 保存修改后的.desktop文件。
3. 刷新桌面数据库
让系统识别到.desktop文件的修改:
- 如果是用户级的.desktop文件,运行:
update-desktop-database ~/.local/share/applications/ - 如果是系统级的,需要加sudo:
sudo update-desktop-database /usr/share/applications/
4. 让设置生效
- 最简单的方式是注销当前用户再重新登录;
- 或者按
Alt+F2,输入r并回车,重启GNOME Shell(仅适用于Xorg环境,你的环境正好符合)。
额外提示:如果是你自己开发的应用
如果这个应用是你自己写的,最好从代码层面设置正确的WM_CLASS,避免后续再出问题:
- GTK应用:使用
gtk_window_set_wmclass()函数,比如:gtk_window_set_wmclass(GTK_WINDOW(window), "myapp-bin", "MyApp"); - Qt应用:在
main()函数里设置:QApplication app(argc, argv); app.setApplicationName("MyApp"); app.setApplicationDisplayName("我的应用");
内容的提问来源于stack exchange,提问作者dln949
相关产品推荐
相关产品推荐

