Ubuntu Dock 点击 Edge 图标总是新建图标的排查与解决

Ubuntu Dock 点击 Edge 图标总是新建图标的排查与解决

 在 Ubuntu(GNOME Shell / dash-to-panel)的 Dock 栏中,已将 Microsoft Edge 固定为收藏图标。但每次点击该图标,Edge 会在 Dock 栏另外生成一个新的图标启动,而不是在固定的图标上直接打开窗口。导致 Dock 上出现两个 Edge 图标,体验很差。

背景知识:GNOME 如何通过 .desktop 文件启动应用

GNOME Shell(以及 dash-to-panel / Ubuntu Dock)启动和管理应用的流程如下:

1. 用户点击 Dock 图标 2. Shell.AppSystem 根据 .desktop 文件 ID 查找应用 3. 调用 Shell.App.open_new_window() 4. 底层通过 GAppInfo.launch() 执行 .desktop 中的 Exec= 命令 5. 窗口出现后,Mutter 发出 window-created 信号 6. Shell.WindowTracker 根据窗口的 WM_CLASS 属性反向匹配 .desktop 文件 7. 匹配成功则图标合并到固定的 Dock 图标上,失败则新建图标

第 6 步是问题的关键:WM_CLASS 匹配依赖 .desktop 文件中的 StartupWMClass 字段。

排查过程

第一步:查找系统中所有 Edge 的 .desktop 文件

find /usr/share/applications/ ~/.local/share/applications/ -iname "*edge*"

结果发现系统中存在两个 Edge 主入口文件:

文件路径StartupWMClassNoDisplay
microsoft-edge.desktop microsoft-edge 无(默认 false)
com.microsoft.Edge.desktop microsoft-edge true

两个文件的 Exec=StartupWMClass 完全一样,区别仅在于文件名和 NoDisplay 字段。

第二步:理解 NoDisplay=true 的含义

查看 com.microsoft.Edge.desktop 文件,其中有一段关键注释:

# This is the same as microsoft-edge.desktop except NoDisplay=true prevents
# duplicate menu entries. This is required to match the application ID
# used by XDG desktop portal, which has stricter naming requirements.
# The old desktop file is kept to preserve default browser settings.
NoDisplay=true

这段注释说明:

  • NoDisplay=true 会隐藏这个文件,不让它出现在应用菜单中,避免出现两个 Edge 入口。
  • com.microsoft.Edge 是 XDG Desktop Portal 要求的反向域名格式应用 ID。
  • 旧的 microsoft-edge.desktop 保留是为了不丢失用户已设置的默认浏览器配置。

第三步:定位根因

Dock 收藏的是 microsoft-edge.desktop(可见的那个)。但当 Edge 窗口创建后,WindowTracker 根据 WM_CLASS=microsoft-edge 去匹配 .desktop 文件时,可能匹配到了另一个文件 com.microsoft.Edge.desktop

由于两个文件 ID 不同,Dock 认为这是一个不同的应用,于是在固定的图标旁边又新建了一个图标。

解决方案

 删除 microsoft-edge.desktop,只保留官方的 com.microsoft.Edge.desktop,并移除其 NoDisplay=true 使它在菜单和 Dock 中正常显示。

具体操作

 重要提示:操作前请先打开 Edge 浏览器!删除 .desktop 文件后,之前已经打开的 Edge 窗口会与新图标关联。如果先删除再打开,之前打开的窗口可能会丢失或无法归属到新图标上,导致需要手动找回。

1. 备份并删除旧文件:

sudo mv /usr/share/applications/microsoft-edge.desktop \
        /usr/share/applications/microsoft-edge.desktop.bak

2. 编辑官方文件,移除 NoDisplay:

sudo sed -i 's/^NoDisplay=true/NoDisplay=false/' \
    /usr/share/applications/com.microsoft.Edge.desktop

3. (此步骤非必须,有些桌面会自动处理)更新桌面数据库并重启 GNOME Shell:

sudo update-desktop-database /usr/share/applications/
# 按 Alt+F2 输入 r 回车,重启 GNOME Shell(仅 Xorg)
# Wayland 下需注销重新登录

4. 重新固定 Edge 到 Dock:

右键 Dock 上的 Edge 图标,选择"添加到收藏夹"。

修复后的效果

 修复前修复后
.desktop 文件 两个(冲突) 一个(唯一)
点击 Dock 图标 新生成一个图标 在固定图标上打开
XDG Portal 正常 正常(仍用 com.microsoft.Edge)
应用菜单 只有一个入口 只有一个入口

总结

这个问题的根因是 Microsoft Edge 同时安装了两个 .desktop 文件,虽然功能相同,但文件名(即应用 ID)不同。Dock 收藏的是一份,而窗口创建后 WindowTracker 可能匹配到另一份,导致被视为"不同应用"而生成新图标。

解决思路很简单:一个应用只保留一个 .desktop 文件,消除歧义即可。

posted @ 2026-08-12 11:02  橘子西瓜  阅读(44)  评论(2)    收藏  举报