完美解决 Ubuntu 中自定义启动器图标重复的问题(以 MATLAB 为例)
如果你在 Ubuntu 上为 MATLAB、PyCharm、Android Studio 或其他第三方应用创建了自定义启动器,并把它固定到了左侧的 Dock 栏,你很可能遇到过这个令人抓狂的场景:
当你满心欢喜地点击固定的图标启动程序后,Dock 栏上竟然“凭空”冒出了第二个一模一样的图标来代表正在运行的程序!
[一张动图或截图,清晰地展示了点击固定的 MATLAB 图标后,旁边弹出了另一个代表运行中程序的 MATLAB 图标]
这不仅破坏了 Dock 栏的整洁,也让“添加到收藏夹”这个功能变得毫无意义。这感觉就像你邀请一位客人(MATLAB)来参加派对,结果他进门后,管家(GNOME 桌面)不认识他,又给他发了一个新的临时名牌。
别担心,这并不是 Bug,而是可以完美解决的“身份识别”问题。今天,我们就以 MATLAB 为例,彻底根治这个“双图标”顽疾。
问题根源:启动器与窗口的“身份识别危机”
简单来说,当一个应用程序运行时,它的窗口会向桌面系统报告一个自己的“身份ID”,这个 ID 叫做 WM_CLASS
(Window Manager Class)。
而我们创建的 .desktop
启动文件,就像一个静态的快捷方式。默认情况下,桌面系统不知道这个快捷方式应该对应哪个窗口的 WM_CLASS
。因此,当程序启动时,系统看到一个它不认识的 WM_CLASS
窗口,就认为这是一个“新程序”,并为它生成了一个临时的图标。
我们的任务就是:找到 MATLAB 窗口的真实 WM_CLASS
,然后明确地告诉启动器:“你启动后,应该和这个 WM_CLASS
的窗口合并!”
解决方案:三步搞定
第 1 步:扮演侦探,找到窗口的真实 WM_CLASS
这是最关键的一步。我们需要一个名为 xprop
的小工具,它能帮我们查询窗口的各种属性。
-
首先,正常启动 MATLAB。让那个重复的、代表运行中程序的图标出现在 Dock 栏上。
-
打开一个新的终端(快捷键
Ctrl + Alt + T
)。 -
输入以下命令并按回车。此时,你的鼠标光标会变成一个十字准星(
+
)。xprop WM_CLASS
-
将这个十字准星光标,移动到 MATLAB 程序的主窗口上(注意!是点击程序窗口本身,不是 Dock 栏上的图标),然后单击鼠标左键。
-
终端会立刻返回一行信息,这就是我们需要的“身份ID”。对于新版的 MATLAB,你可能会看到类似下面的输出:
WM_CLASS(STRING) = "Matlab-GLEE", "MATLAB R2025a"
这里的 "MATLAB R2025a"
就是我们需要的、独一无二的 WM_CLASS
!我们通常选择第二个字符串,因为它更具体,更具代表性。
第 2 步:更新 .desktop
文件,为启动器“正名”
现在,我们要把找到的 WM_CLASS
添加到一个叫做 StartupWMClass
的字段里。
-
用文本编辑器打开你之前创建的
matlab.desktop
文件。# 路径可能因人而异,这里以放在用户个人目录为例 nano ~/.local/share/applications/matlab.desktop
-
在文件末尾,添加新的一行
StartupWMClass=...
。请确保填写的值与你刚刚查到的完全一致。[Desktop Entry] Type=Application Name=MATLAB Comment=MATLAB R2025a Exec=/home/lz/Programs/MATLAB/R2025a/bin/matlab -desktop Icon=/home/lz/Pictures/matlab.png Terminal=false Categories=Development;Math;# ↓↓↓ 这是我们添加的关键一行 ↓↓↓ # 它将启动器和实际运行的窗口关联起来 StartupWMClass=MATLAB R2025a
-
保存文件并退出编辑器 (在
nano
中是Ctrl + X
->Y
->Enter
)。
第 3 步:重启桌面,见证奇迹
为了让桌面环境(GNOME Shell)加载我们修改后的配置,最简单可靠的方法是注销当前用户再重新登录。
重新登录后,再次点击你固定在 Dock 栏上的 MATLAB 图标。
[一张动图或截图,展示了点击固定的 MATLAB 图标后,该图标下方出现一个运行指示点,没有再弹出新图标]
你会发现,这一次,程序启动后完美地“吸附”到了你固定的图标上,只在图标下方出现一个表示正在运行的小圆点。那个烦人的重复图标,彻底消失了!
结语与延伸
这个利用 xprop
查找 WM_CLASS
并配置 StartupWMClass
的方法,是 Linux 桌面自定义的“必杀技”。它不仅仅适用于 MATLAB,对于解决以下这些应用的图标重复问题同样有效:
- JetBrains 全家桶 (PyCharm, IntelliJ IDEA, WebStorm…)
- Eclipse 和 Android Studio
- 其他任何用 Java (Swing/AWT)、Qt 或非原生 GTK 工具包编写的第三方软件
掌握了这个技巧,你就能让任何“外来”的应用都像原生程序一样,与你的 Ubuntu 桌面完美融合。现在,去享受你那整洁、有序、不再逼死强迫症的 Dock 栏吧!