如果你在 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 欄吧!