当前位置: 首页 > ds >正文

完美解决 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.xdnf.cn/news/15918.html

相关文章:

  • bash方式启动模型训练
  • python基础复习
  • 高压电工作业证考试核心考点:电气安全基础篇
  • 响应式单位rpx及搭配使用UI产品工具
  • 风格多样!5 个覆盖全风格的素材网站,创作有新意
  • AUTOSAR进阶图解==>AUTOSAR_SWS_DiagnosticOverIP
  • 创建套接字并bind的详细过程
  • 从 Server.xml 到字节码:Tomcat 内核全景与请求旅程 10 000 字深剖
  • MinIO深度解析:从核心特性到Spring Boot实战集成
  • 数据结构与算法之美:拓扑排序
  • 外观设计模式
  • Uniapp之键盘弹窗
  • win10连接鼠标自动关闭触摸板/win10关闭触摸板(笔记本)
  • 智能合约代理与批量调用优化:最小代理与MultiCall的应用
  • android studio libs.versions.toml 配置
  • 嵌入式硬件中电感的基本原理与实现详解
  • CSS篇——第二章 六十五项关键技能(下篇)
  • Kotlin方差
  • OpenCV 官翻5 - 机器学习
  • 智能制造——解读39页汽车行业数字化工厂解决方案【附全文阅读】
  • 考研408《计算机组成原理》复习笔记,第三章(5)——磁盘存储器
  • 文生图-StoryGAN:用于故事可视化的顺序条件GAN
  • Github Actions Workflows 上传 Dropbox
  • 【C++】初识C++(2)
  • 【RK3576】【Android14】UART开发调试
  • 微信小程序入门实例_____从零开始 开发一个“旅行清单 ”微信小程序
  • 微信小程序——世界天气小助手
  • 【EMC设计基础--信号环路分析、PCB设计规则】
  • VSCode - VSCode 查找中文字符
  • LVS工作模式和算法的总结