一、问题背景
在 Ubuntu 系统中,手动安装的软件、JetBrains 系列 IDE、AppImage 程序常会出现 Dock 图标变成齿轮、窗口与图标分离、双击图标新建窗口、重复图标 问题。
核心原因:.desktop 快捷方式文件中 StartupWMClass 配置错误或缺失,系统无法将运行窗口与桌面图标绑定。
传统网上教程均基于 xprop WM_CLASS 命令实现,但 Ubuntu 21.04+ 默认采用 Wayland 会话,该命令完全失效(无十字拾取光标、无法获取窗口类名)。
本文将彻底区分 X11(Xorg) 与 Wayland 两大图形会话的原理差异,并提供对应场景的完整修复方案。
二、X11 与 Wayland 核心区别(关键差异)
1. 基础定位与版本适配
- X11(Xorg):经典老旧图形协议,沿用数十年,兼容性极强,Ubuntu 26 为兼容保留的遗留会话,非默认模式。
- Wayland:新一代现代化图形协议,Ubuntu 21.04 及以上版本默认会话,是 Linux 桌面未来主流方向。
2. 安全与权限机制(最核心区别)
- X11:无窗口隔离,所有程序可随意读取、拾取、监听其他窗口信息,
xprop、xdotool、全局截图拾取工具均可正常使用,兼容性拉满但安全性弱。 - Wayland:严格窗口隔离机制,程序默认只能访问自身窗口,禁止全局拾取其他窗口信息,原生屏蔽 xprop 工具,安全性、稳定性、性能全面升级。
3. 性能与硬件适配
- X11:多层中转渲染,延迟高、易画面撕裂,对高分屏、高刷屏、多显示器、HDR 等现代硬件适配差,多为后期补丁兼容。
- Wayland:点对点直接渲染,零拷贝、低延迟,天然防画面撕裂,原生支持高分屏缩放、多屏独立适配、触控手势、省电优化。
4. 窗口标识规则(直接影响图标修复)
- X11 程序:统一使用 WM_CLASS 作为窗口唯一标识,StartupWMClass 完全依赖该值绑定图标。
- Wayland 程序分两类:
1. XWayland 兼容程序(JetBrains IDE、AppImage、大部分第三方软件):保留 WM\_CLASS,可正常配置 StartupWMClass;
2. 纯 Wayland 原生程序(系统自带应用、新版 GTK/Qt 软件):无 WM\_CLASS,仅用 AppID 标识,无需配置 StartupWMClass。
5. 核心工具可用性
- X11:
xprop WM_CLASS正常生效,鼠标十字拾取窗口,一键获取类名; - Wayland:原生不支持 xprop,必须用专属工具替代拾取。
三、先确认当前系统会话(必做前置步骤)
终端执行以下命令,判断当前是 X11 还是 Wayland:
echo $XDG_SESSION_TYPE- 输出
x11→ 走 X11 修复方案 - 输出
wayland→ 走 Wayland 修复方案
四、X11 会话 完整修复方案(传统经典方法)
适配:登录时选择「Ubuntu on Xorg」的用户,完全适配网上主流教程,操作最简单。
步骤1:获取程序 WM_CLASS 窗口类名
- 先打开出现齿轮图标的目标软件,保持窗口前台运行;
- 终端执行命令:
xprop WM_CLASS - 鼠标变为十字光标,直接点击目标软件窗口;
- 终端输出结果,取第二个字符串为有效类名,示例(Android Studio):
WM_CLASS(STRING) = "jetbrains-studio", "jetbrains-studio"
有效取值:jetbrains-studio
步骤2:找到并编辑 desktop 快捷方式文件
桌面快捷方式文件默认存放路径:
- 用户自定义软件(常用):
~/.local/share/applications/ - 系统自带软件:
/usr/share/applications/
用文本编辑器打开对应软件的 .desktop 文件,在 [Desktop Entry] 段落末尾添加/修改如下配置:
StartupWMClass=获取到的WM_CLASS值完整示例配置(参考原文案例)
[Desktop Entry]
Name=AndroidStudio
Comment=Integrated Development Environment for Android Applications
Exec=/home/dean/Applications/android-studio/bin/studio.sh %f
Icon=/home/dean/Applications/android-studio/bin/studio.svg
Terminal=false
Type=Application
Categories=Development;IDE;
StartupWMClass=jetbrains-studio步骤3:生效配置
update-desktop-database ~/.local/share/applications若未生效:删除 Dock 上旧齿轮图标,重新从应用菜单固定图标,或注销重登系统。
五、Wayland 会话 完整修复方案(Ubuntu26 默认适配)
适配:Ubuntu22.04/24.04/26.04 默认 Wayland 会话,无需切换 X11、不牺牲系统性能。
核心:Wayland 禁用 xprop,改用 GNOME 官方 Looking Glass 工具拾取窗口信息。
步骤1:打开系统调试工具拾取 WM_CLASS
- 保持目标软件窗口打开;
- 按下快捷键
Alt + F2,弹出系统运行框; - 输入
lg回车,打开 Looking Glass 调试控制台; - 切换顶部 Windows 标签,查看当前所有窗口列表;
找到目标软件,查看两个关键字段:
- wm_class:有字符串值 → XWayland 程序,可正常配置 StartupWMClass(90% 第三方软件均为此类);
- wm_class: null:纯 Wayland 原生程序,无需配置 StartupWMClass,系统自动绑定 AppID。
- 复制有效的 wm_class 字符串(与 xprop 获取的值完全等效);
- 再次
Alt + F2输入lg回车,关闭调试窗口。
步骤2+步骤3:同 X11 方案
编辑 desktop 文件添加 StartupWMClass、刷新数据库、重启生效的操作,与 X11 完全一致。
六、临时切换 X11 会话(追求传统xprop操作)
若你习惯原文的十字拾取操作,可临时切换 X11 会话:
- 注销当前系统登录;
- 登录界面点击右下角齿轮图标;
- 选择 Ubuntu on Xorg 登录;
- 登录后即可正常使用
xprop WM_CLASS十字拾取功能。
缺点:丢失 Wayland 高刷、低延迟、高分屏优化、安全隔离特性,仅建议临时使用。
七、常见踩坑总结(必看)
- 大小写敏感:StartupWMClass 的值必须与拾取的 wm_class 完全一致,大小写不能偏差;
- 缓存问题:修改配置后务必删除 Dock 旧图标重新固定,单纯刷新数据库可能无效;
- 纯Wayland程序无需配置:wm_class 为 null 时,填写 StartupWMClass 无效,无需多余配置;
- JetBrains 全家桶通用:IDEA、PyCharm、Android Studio 均运行在 XWayland,可正常用本方案修复。
八、方案选择建议
- 日常办公、追求性能、稳定性、高分屏适配:保留默认 Wayland 会话,使用 Looking Glass 拾取方案;
- 频繁使用 xprop、xdotool 等老旧自动化工具:临时切换 X11 会话,短期兼容使用。
(注:部分内容可能由 AI 生成)
Dean King
2026/8/21 夜于唐山
没有评论