背景 #
一觉醒来昨天还能正常进入 Wayland 会话,今天重启后系统直接退回了 X11。
众所周知的原因,ghostty和X11会话有些许BUG,尤其是在Ubuntu22.04上。
XDG_SESSION_TYPE 显示 x11,GDM 日志里 org.gnome.Shell@wayland.service 被标注为 Skipped due to 'exec-condition',随后启动的是 gdm-x-session。
这是一次典型的"软件静默破坏配置"事故,排查发现罪魁祸首竟然是一个毫不起眼的数位屏驱动。
排查过程 #
第一层:GDM 日志 #
查看 GDM 日志,发现关键线索:
org.gnome.Shell@wayland.service: Skipped due to 'exec-condition'这说明 Wayland 会话被系统级条件跳过了,而不是用户手动切换。顺着这条线查下去,问题指向了 /etc/gdm3/custom.conf 中的 WaylandEnable=false。
第二层:配置文件被动过 #
昨天确实安装了一个软件——Gaomon(高漫)数位屏驱动。
Gaomon 驱动的 postinst 安装脚本(/var/lib/dpkg/info/gaomontablet.postinst)会自动修改 GDM 配置,逻辑如下:
# 如果发现配置里有 #WaylandEnable=false(注释状态)
# → 改成 WaylandEnable=false
# 如果发现有 WaylandEnable=true
# → 额外插入 DefaultSession=x11本质上是把 Wayland 强制关闭,且没有任何确认提示。用户在安装时完全不知情。
第三层:NVIDIA 驱动规则 #
即使撤掉 gaomontablet 的修改,AMD + NVIDIA 570.211.01 混合显卡在 Ubuntu 22.04 + GDM3 环境下仍然会受到影响。
系统规则文件 /lib/udev/rules.d/61-gdm.rules 中有一条判断:
# NVIDIA 驱动版本 ≥ 510 时,默认 prefer Xorg当前驱动版本 570.211.01,满足此条件。所以混合显卡外接显示器走 NVIDIA 输出时,GDM 会倾向于选择 Xorg——这是系统级行为,不完全是配置问题。
踩坑:配置语法写错 #
在尝试自行修复时,还犯了一次蠢:
WaylandEnable=enable # ❌ 错误
WaylandEnable=true # ✅ 正确GDM 配置中 WaylandEnable 的值只能是 true/false,不是 enable/disable。写错了 GDM 会当作没看到这个字段,保持默认值。
解决方案 #
方案一:移除 gaomontablet 驱动 #
sudo apt remove gaomontablet驱动被移除后,其安装脚本不会再改写配置文件。但已经写入的改动需要手动还原。
方案二:手动还原 GDM 配置 #
编辑 /etc/gdm3/custom.conf,确保是以下内容:
[daemon]
WaylandEnable=true
# 不要写 DefaultSession=x11即:
WaylandEnable=true(不是enable)- 不要加
DefaultSession=x11,加了等于白设
方案三:重启 GDM #
配置改完后,重启服务:
sudo systemctl restart gdm3或者直接重启系统。
关键文件速查 #
| 文件路径 | 作用 |
|---|---|
/etc/gdm3/custom.conf |
GDM 主配置,WaylandEnable 在此 |
/var/lib/dpkg/info/gaomontablet.postinst |
gaomontablet 安装脚本,会强制改写 GDM 配置 |
/lib/udev/rules.d/61-gdm.rules |
NVIDIA 驱动 ≥ 510 时 prefer Xorg |
经验总结 #
-
gaomontablet(Gaomon)驱动会静默修改 GDM 配置,安装后务必检查
/etc/gdm3/custom.conf是否被改写。不想用 Wayland 的话倒无所谓,想用的话装完驱动要手动还原。 -
WaylandEnable 的值是
true/false,不是enable/disable,写错等于没写。 -
Ubuntu 22.04 + NVIDIA 510+ 驱动对混合显卡默认偏向 Xorg,这是系统级行为,不是配置的问题。如果接了外接显示器且走 NVIDIA 输出,Wayland 就是更容易被降级。
预防建议 #
如果你需要用 Wayland,又必须装 Gaomon 驱动,建议:
# 装驱动前先备份配置
sudo cp /etc/gdm3/custom.conf /etc/gdm3/custom.conf.bak
# 装完驱动后立即检查
grep -E "WaylandEnable|DefaultSession" /etc/gdm3/custom.conf有值被改了就手动还原,别等重启后发现已经进不去 Wayland 了才后悔莫及 ╮(╯▽╰)╭