Ubuntu Dock 应用显示齿轮图标的修复方法
文章目录
- [Ubuntu Dock 应用显示齿轮图标的修复方法](#Ubuntu Dock 应用显示齿轮图标的修复方法)
-
- 问题现象
- 核心原因
- [1. 查看当前桌面环境类型](#1. 查看当前桌面环境类型)
- [2. 查看应用的 WM_CLASS](#2. 查看应用的 WM_CLASS)
- [3. 也可以使用 xprop 查看](#3. 也可以使用 xprop 查看)
- [4. 找到应用对应的 .desktop 文件](#4. 找到应用对应的 .desktop 文件)
- [5. 修改 .desktop 文件](#5. 修改 .desktop 文件)
- [6. Navicat 示例](#6. Navicat 示例)
- [7. 更新 desktop 数据库](#7. 更新 desktop 数据库)
- [8. 重新启动应用](#8. 重新启动应用)
- [9. Dock 中仍然显示旧图标](#9. Dock 中仍然显示旧图标)
- [10. 常用排查命令](#10. 常用排查命令)
- 总结
问题现象
在 Ubuntu 中启动某些应用后,Dock / 导航栏里没有显示应用自己的图标,而是显示一个齿轮或默认图标。
这种情况通常不是图标文件本身有问题,而是 GNOME 无法把"当前运行的窗口"和对应的 .desktop 启动器匹配起来。
常见于:
- IntelliJ IDEA
- Navicat
- AppImage 程序
- 自己手动解压安装的软件
- Java / Qt / Electron 等应用
核心原因
Linux 桌面环境会根据窗口的 WM_CLASS 去匹配对应的 .desktop 文件。
如果 .desktop 中缺少:
ini
StartupWMClass=xxx
或者 StartupWMClass 与实际窗口的 WM_CLASS 不一致,GNOME 就可能把这个窗口当成一个未知程序,从而显示齿轮或默认图标。
1. 查看当前桌面环境类型
执行:
bash
echo $XDG_SESSION_TYPE
如果输出:
text
x11
可以使用 xprop 或 wmctrl 查看窗口类。
2. 查看应用的 WM_CLASS
推荐使用:
bash
wmctrl -lx
如果没有安装:
bash
sudo apt install wmctrl
示例输出:
text
0x05400054 0 jetbrains-idea.jetbrains-idea hostname IntelliJ IDEA
0x08000017 0 AppRun.AppRun hostname Navicat
中间这一列就是窗口类信息:
text
jetbrains-idea.jetbrains-idea
AppRun.AppRun
格式通常可以理解为:
text
instance.class
一般 StartupWMClass 使用后面的 class。
例如:
text
jetbrains-idea.jetbrains-idea
对应:
ini
StartupWMClass=jetbrains-idea
而:
text
AppRun.AppRun
对应:
ini
StartupWMClass=AppRun
3. 也可以使用 xprop 查看
执行:
bash
xprop WM_CLASS
然后点击需要查看的应用窗口。
正常会输出:
text
WM_CLASS(STRING) = "jetbrains-idea", "jetbrains-idea"
一般优先使用第二个值:
ini
StartupWMClass=jetbrains-idea
如果两个值不同,例如:
text
WM_CLASS(STRING) = "idea", "jetbrains-idea"
通常使用:
ini
StartupWMClass=jetbrains-idea
4. 找到应用对应的 .desktop 文件
用户自己的启动器通常位于:
bash
~/.local/share/applications/
系统级启动器通常位于:
bash
/usr/share/applications/
可以通过应用名搜索:
bash
grep -Ril "IntelliJ IDEA" \
~/.local/share/applications \
/usr/share/applications 2>/dev/null
也可以根据启动命令搜索:
bash
grep -Ril "AppRun" \
~/.local/share/applications \
/usr/share/applications 2>/dev/null
5. 修改 .desktop 文件
例如 IntelliJ IDEA:
ini
[Desktop Entry]
Version=1.0
Type=Application
Name=IntelliJ IDEA
Icon=/home/user/software/idea/bin/idea.png
Exec=/home/user/software/idea/bin/idea.sh
StartupWMClass=jetbrains-idea
Terminal=false
Categories=Development;IDE;
关键就是:
ini
StartupWMClass=jetbrains-idea
6. Navicat 示例
如果:
bash
wmctrl -lx
显示:
text
AppRun.AppRun
那么:
ini
StartupWMClass=AppRun
例如:
ini
[Desktop Entry]
Type=Application
Name=Navicat 17 for MySQL
Icon=/home/user/software/navicat/navicat-icon.png
Exec=/home/user/software/navicat/AppRun
StartupWMClass=AppRun
Categories=Development;
Keywords=database;sql;
7. 更新 desktop 数据库
修改完成后执行:
bash
update-desktop-database ~/.local/share/applications
如果修改的是系统级 /usr/share/applications,通常不一定需要手动执行,但也可以执行:
bash
sudo update-desktop-database /usr/share/applications
8. 重新启动应用
先彻底退出应用。
如果 desktop 文件名为:
text
intellij-idea.desktop
可以执行:
bash
gtk-launch intellij-idea
注意 gtk-launch 使用的是文件名去掉 .desktop 后的部分。
例如:
text
navicat.desktop
对应:
bash
gtk-launch navicat
9. Dock 中仍然显示旧图标
如果之前已经把错误的齿轮图标固定到了 Dock:
- 右键旧的齿轮图标
- 选择"从收藏夹移除"
- 完全退出应用
- 通过应用菜单或
gtk-launch重新启动 - 确认图标正常
- 再右键选择"添加到收藏夹"
10. 常用排查命令
查看桌面类型:
bash
echo $XDG_SESSION_TYPE
查看所有窗口类:
bash
wmctrl -lx
查看指定窗口的 WM_CLASS:
bash
xprop WM_CLASS
搜索 desktop 文件:
bash
grep -Ril "应用名" \
~/.local/share/applications \
/usr/share/applications 2>/dev/null
查看 desktop 文件:
bash
cat ~/.local/share/applications/xxx.desktop
更新 desktop 数据库:
bash
update-desktop-database ~/.local/share/applications
通过 desktop 启动应用:
bash
gtk-launch xxx
总结
Ubuntu Dock 中应用显示齿轮或默认图标,本质上通常是:
text
运行中的窗口
↓
WM_CLASS
↓
无法匹配
↓
.desktop
解决思路就是:
text
wmctrl -lx
↓
找到应用的 WM_CLASS
↓
找到对应 .desktop
↓
添加 StartupWMClass
↓
重新启动应用
最关键的一条:
ini
StartupWMClass=应用实际的窗口类
例如:
text
jetbrains-idea.jetbrains-idea
对应:
ini
StartupWMClass=jetbrains-idea
text
AppRun.AppRun
对应:
ini
StartupWMClass=AppRun