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

完美解决 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.dtcms.com/a/288020.html

相关文章:

  • 游戏开发日志
  • 操作系统-进程同步机制
  • 搭建比分网服务器怎么选数据不会卡顿?
  • SEO长尾关键词优化实战指南抢占市场
  • 基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现
  • 你的网站正在被Google最新算法惩罚吗?
  • SpringJDBC源码初探-JdbcTemplate类
  • xss的利用
  • 博图SCL语言中常用运算符使用详解及实战案例(下)
  • 抖音回应:没有自建外卖,就是在团购的基础上增加的配送功能
  • 前端开发技巧:浏览器模拟弱网络环境
  • Streamlit 官翻 4 - 快速参考、知识库 Quick Reference
  • 电脑windows系统深度维护指南
  • 网络包从客户端发出到服务端接收的过程
  • 初识C++——开启新旅途
  • 【每日算法】专题十五_BFS 解决 FloodFill 算法
  • Xshell若依项目部署到云服务器
  • 考研408《计算机组成原理》复习笔记,第三章(5)——磁盘存储器
  • react+antd 可拖拽模态框组件
  • 智能设备畅想
  • AWD练习的平台搭建
  • 牛客-倒置字符串
  • 如何使用orthofinder进行同源基因鉴定
  • 【Web APIs】JavaScript 自定义属性操作 ② ( H5 自定义属性 )
  • Node.js dns 模块深入解析
  • python的第三方库的基本运用
  • node.js学习笔记1
  • Tomcat配置和部署项目
  • 从零手写红黑树(C++实现详解)
  • Java 中的继承与多态