完美解決 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 的小工具,它能幫我們查詢窗口的各種屬性。

  1. 首先,正常啟動 MATLAB。讓那個重復的、代表運行中程序的圖標出現在 Dock 欄上。

  2. 打開一個新的終端(快捷鍵 Ctrl + Alt + T)。

  3. 輸入以下命令并按回車。此時,你的鼠標光標會變成一個十字準星(+

    xprop WM_CLASS
    
  4. 將這個十字準星光標,移動到 MATLAB 程序的主窗口上(注意!是點擊程序窗口本身,不是 Dock 欄上的圖標),然后單擊鼠標左鍵

  5. 終端會立刻返回一行信息,這就是我們需要的“身份ID”。對于新版的 MATLAB,你可能會看到類似下面的輸出:

    WM_CLASS(STRING) = "Matlab-GLEE", "MATLAB R2025a"
    

這里的 "MATLAB R2025a" 就是我們需要的、獨一無二的 WM_CLASS!我們通常選擇第二個字符串,因為它更具體,更具代表性。

第 2 步:更新 .desktop 文件,為啟動器“正名”

現在,我們要把找到的 WM_CLASS 添加到一個叫做 StartupWMClass 的字段里。

  1. 用文本編輯器打開你之前創建的 matlab.desktop 文件。

    # 路徑可能因人而異,這里以放在用戶個人目錄為例
    nano ~/.local/share/applications/matlab.desktop
    
  2. 在文件末尾,添加新的一行 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
    
  3. 保存文件并退出編輯器 (在 nano 中是 Ctrl + X -> Y -> Enter)。

第 3 步:重啟桌面,見證奇跡

為了讓桌面環境(GNOME Shell)加載我們修改后的配置,最簡單可靠的方法是注銷當前用戶再重新登錄

重新登錄后,再次點擊你固定在 Dock 欄上的 MATLAB 圖標。

[一張動圖或截圖,展示了點擊固定的 MATLAB 圖標后,該圖標下方出現一個運行指示點,沒有再彈出新圖標]

你會發現,這一次,程序啟動后完美地“吸附”到了你固定的圖標上,只在圖標下方出現一個表示正在運行的小圓點。那個煩人的重復圖標,徹底消失了!

結語與延伸

這個利用 xprop 查找 WM_CLASS 并配置 StartupWMClass 的方法,是 Linux 桌面自定義的“必殺技”。它不僅僅適用于 MATLAB,對于解決以下這些應用的圖標重復問題同樣有效:

  • JetBrains 全家桶 (PyCharm, IntelliJ IDEA, WebStorm…)
  • EclipseAndroid Studio
  • 其他任何用 Java (Swing/AWT)、Qt 或非原生 GTK 工具包編寫的第三方軟件

掌握了這個技巧,你就能讓任何“外來”的應用都像原生程序一樣,與你的 Ubuntu 桌面完美融合。現在,去享受你那整潔、有序、不再逼死強迫癥的 Dock 欄吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90040.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90040.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90040.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一文讀懂深度模型優化器,掌握煉丹工具

深度模型優化器是訓練神經網絡的核心工具,其目標是高效地找到損失函數的最小值。從基礎的隨機梯度下降(SGD)到結合一階動量修正與兩階段更新的Ranger,優化器的發展始終圍繞著加速收斂、提升穩定性、適應參數差異和增強泛化能力四大…

關于虛擬機部署的k8s集群calico組件在開機恢復快照時的問題

在恢復虛擬機開機快照的時候總會出現各種的網絡問題,連接不到自己的443端口,集群狀態異常等等,繞一圈都發現不了問題,其實根本就沒問題。虛擬機環境再現,恢復快照后的k8s環境,nfs莫名宕掉提示此報錯&#x…

從感知到決策:虛擬仿真系統與視覺算法融合下的多路RTSP視頻接入技術探究

1?? 背景概述 隨著國防信息化和智能化進程的不斷加快,虛擬仿真系統 與 智能視覺算法平臺 正逐步成為現代化裝備研發、測試驗證與戰術訓練的重要技術支撐。相比傳統的靜態建模或離線推演,新一代作戰仿真與智能系統更強調 實時性、感知能力與動態交互&a…

Android app如果不適配Android 15會怎么樣

深度思考完成 用時49秒 首先,用戶的問題是:“Android app如果不適配Android 15會怎么樣?”我需要基于搜索結果來回答。 讓我回顧搜索結果: ?1:標題是“Android 15應用適配指南”,內容強調了不適配Androi…

Vue-21-利用Vue3的axios+Python的flask實現前后端交互功能

文章目錄 1 任務需求 2 前端 2.1 模板template 2.2 JS代碼script 2.3 Calculate.vue(子組件) 2.4 App.vue(根組件) 3 后端 3.1 導入模塊 3.2 創建應用實例 3.3 配置CORS 3.4 定義路由 3.5 處理請求 3.6 main.py 4 附錄 4.1 CORS 4.1.1 全局啟用CORS 4.1.2 限制允許的域名(更安…

動態規劃之最長回文子串

題目:最長回文子串 給你一個字符串 s,找到 s 中最長的 回文 子串。 示例 1: 輸入:s “babad” 輸出:“bab” 解釋:“aba” 同樣是符合題意的答案。 示例 2: 輸入:s “cbbd” 輸…

Linux 編程中的錯誤處理機制詳解 —— `errno` 全解析

文章目錄Linux 編程中的錯誤處理機制詳解 —— errno 全解析一、什么是 errno??為什么需要 errno?? 它在哪里定義?二、errno 的設置與讀取規則?? errno 不是總是有效!?使用 errno 的正確步驟:三、與 errno 配套使…

力扣-最長遞增子序列

簡單記錄學習~給你一個整數數組 nums ,找到其中最長嚴格遞增子序列的長度。子序列 是由數組派生而來的序列,刪除(或不刪除)數組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數組 [0,3,1,6,2,2,7] 的子序列。示例…

公司內部網址怎么在外網打開?如何讓外網訪問內網的網站呢?

很多公司內部本地會部署有中小型的服務器,可以很好的方便用于一些辦公業務系統,或測試開發需要。在數字化辦公和生活場景中,除了公司內部局域網內訪問公司系統外,經常會遇到需要讓外網訪問內網網站的情況。比如企業員工遠程辦公時…

有趣的css - 多選立體標簽按鈕

🍭 大家好,我是 Just,這里是「設計師工作日常」,今天分享的是一個交互較完整的多選立體標簽按鈕。 最新文章通過公眾號「設計師工作日常」發布。 目錄整體效果核心代碼html 代碼css 部分代碼完整代碼如下html 頁面css 樣式頁面渲…

C++中byte*和char*的區別

在C中,byte*(通常指 std::byte*)和 char* 都是指針類型,但它們在語義和用途上有重要區別:1. 類型定義char* char 是C內置的基本類型,表示字符(通常是1字節)。 char* 常用于&#xff…

【node】npm包本地開發與調試

npm link 進入本地的 babel-plugin-function-try-catch 這個 npm 包的根目錄執行: npm link上面的命令可以將當前的這個包安裝在全局(mac 中的路徑是 /usr/local/bin),也就是 npm i -g 安裝包的目錄。 執行后結果如圖&#xff…

突破量子仿真瓶頸:微算法科技MLGO量子算法的算術化與核操作迭代模型

近年來,量子計算機的迅速發展和潛在的強大計算能力吸引了全球科研機構和企業的廣泛關注。量子計算機利用量子力學的特性來處理復雜的計算任務,具有在某些方面遠超經典計算機的潛力。然而,真正實用的量子計算機尚未大規模普及,因此…

python中讀取 Excel 表格數據

在pandas中讀取 Excel 表格后,有多種方式可以按列、按行提取數據,下面我將詳細介紹常見的方法。 0.聲明 在本文中我使用的excel表內容如下:1. 讀取 Excel 文件 首先,我們需要使用 pandas 的 read_excel 函數讀取 Excel 文件&#…

算法訓練營day28 貪心算法②122.買賣股票的最佳時機II、55. 跳躍游戲、 45.跳躍游戲II 、1005.K次取反后最大化的數組和

貪心算法第二篇博客!感覺這篇博客中的算法都很巧妙,需要動動腦筋 122.買賣股票的最佳時機II (這道題可以遍歷數組,如果不能遍歷的話,就不能做了,需要注意的是: 只有一只股票!當前只…

NumPy核心操作全攻略

NumPy(Numerical Python)是 Python 生態中用于科學計算的核心庫,提供高性能的多維數組對象(ndarray)及相關的數學運算工具。其核心功能圍繞數組操作、線性代數、隨機數生成等,是數據科學、機器學習等領域的…

Redis 主從同步對象模型

淘汰策略 對最外層的key進行淘汰 expire(秒)/pexpire(毫秒) ttlmaxmemory:最大內存的一半(持久化fork()子進程) 數據遷移需要額外的空間 maxmemory-policy 提供淘汰機制 默認不會淘汰 lru 最近最少使用 lfu最近最少頻次 voltaile 對由expire的進行淘汰持久化: fork:寫時復制原理…

C++ 使用 constexpr 、查表法、分治法加速位鏡像翻轉

代碼////// brief 左右翻轉位。////// note 翻轉后&#xff0c;最低位位將變為最高位&#xff0c;最高位將變為最低位。//////template <typename T>requires(std::is_same_v<T, uint8_t>)constexpr T Reverse(T value){int32_t bit_count sizeof(T) * 8;for (int…

知識庫搭建之Meilisearch‘s 搜索引擎 測評-東方仙盟測評師

windows 啟動后 啟動成功后關鍵信息 Config file path: "none" Database path: "./data.ms" Server listening on: "http://localhost:7700" Environment: "development" Commit SHA: &quo…

【筆記】Anaconda 重裝后虛擬環境寫入路徑異常的完整排查與解決過程

Anaconda 安裝[僅為當前用戶安裝/為所有用戶安裝]選項對環境變量設置的影響_anaconda沒有添加環境變量-CSDN博客 Anaconda 路徑治理指南&#xff1a;路徑精簡、權限優化與環境隔離-CSDN博客 Windows系統下手動升級Anaconda的詳細指南_anaconda升級-CSDN博客 Conda 命令大全&…