我会傻傻地 上网搜索,搜索出来 --ozone-platform 这个命令行参数可以指定用 x11 还是 wayland,在以前,我只会做到这里,妥协地改 .desktop 文件(我不太想改 .desktop 文件,因为.desktop 文件一般是由包管理器负责部署的,直接改,不"通知"包管理器的话以后可能会出问题,而且 chrome 这边PWA也会生成 .desktop 文件)。

但现在,我们可以直接派 Agent 过去调查 chromium 的源代码:

使用 deepseek 的 claude code:
2025-11-17T15:24:15.png

● Ozone 平台在启动时选择 X11 和 Wayland 的具体逻辑如下:

  构建时配置

  在 build/config/ozone.gni:59-90 中定义了默认平台选择:
  - Linux 桌面:默认使用 x11 平台
  - ChromeOS:默认使用 x11 平台
  - Fuchsia:默认使用 flatland 平台
  - 其他情况:默认使用 headless 平台

  运行时选择逻辑

  在 ui/linux/display_server_utils.cc:50-70 中的 SetOzonePlatformForLinuxIfNeeded() 函数:

  1. 命令行参数优先:如果已指定 --ozone-platform,直接使用该值
  2. Wayland 检测:
    - 检查 XDG_SESSION_TYPE 环境变量是否为 "wayland"
    - 如果是,自动选择 wayland 平台
  3. X11 回退:如果没有指定平台且不是 Wayland 会话,默认选择 x11

  环境检测

  在 ui/linux/display_server_utils.cc:72-87 中的检测函数:
  - Wayland:检查 WAYLAND_DISPLAY 环境变量或 $XDG_RUNTIME_DIR/wayland-0 套接字文件
  - X11:检查 DISPLAY 环境变量

  平台初始化流程

  在 ui/ozone/public/ozone_platform.cc:32-43 中:
  1. 通过 GetOzonePlatformId() 获取平台 ID
  2. 使用 PlatformObject<OzonePlatform>::Create() 创建对应平台实例
  3. 平台列表在构建时由 generate_ozone_platform_list.py 生成

  总结:Ozone 优先使用命令行参数,其次根据桌面环境自动选择 Wayland(当检测到 Wayland 会话时),否则默认回退到 X11。

好耶~~!我们现在就知道了 chrome 原来是根据 XDG_SESSION_TYPE 选择 X11/Wayland 的。

我们就可以把 XDG_SESSION_TYPE 改到 wayland 之外的值

2025-11-17T15:34:03.png

启动 chrome ,它真的按照 Agent 说的那样使用 X11 (Xwayland) 了!

虽然 Agent 写代码现在不太行,但让它看现有代码效率比自己看要高。