海南省网站建设_网站建设公司_博客网站_seo优化
2026/1/2 20:47:05 网站建设 项目流程

本文档详细记录了在 Arch Linux 系统下,使用 Niri(Wayland 合成器)时遇到的 Xwayland 应用程序(如微信)无法启动及光标过大问题的完整排查与修复过程。

1. 问题描述

现象 A:X11 应用无法启动

  • 症状:尝试启动微信(或其他 X11 应用)失败。
  • 报错信息
    Authorization required, but no authorization protocol specified xhost: unable to open display ":0"
  • 环境
    • OS: Arch Linux
    • Compositor: Niri (Wayland)
    • Package:wechat(AUR) /wechat-bin

现象 B:鼠标光标异常巨大

  • 症状:应用启动后,当鼠标移动到 Xwayland 窗口内时,光标变得非常大,与系统其他部分不一致。

2. 根本原因分析

2.1 启动失败原因 (Authorization required)

原因:Niri 作为一个极简的 Wayland 合成器,其内置的 Xwayland 支持可能不如 GNOME/KDE 那样全自动处理XAuthority 认证

什么是 XAuthority 认证?

X Window System 设计了一个基于 “Cookie” 的安全机制来防止未经授权的程序连接到你的显示服务器(并监听你的键盘输入或截屏)。

  1. Magic Cookie: 当 X Server(在此场景下是 Xwayland)启动时,它会生成一个随机的 “Magic Cookie”(一串加密数据)。
  2. 存储文件: 这个 Cookie 会被写入到一个文件中(通常是~/.Xauthority/run/user/1000/gdm/Xauthority)。
  3. 连接验证: 当任何 X11 客户端(如微信)尝试连接显示服务器时,它必须读取这个文件,并将里面的 Cookie 发送给服务器进行验证。只有 Cookie 匹配,连接才会被接受。

在我们的故障中

  • Xwayland 启动了,也监听了:0端口。
  • 但由于 Niri 的环境配置问题,它没有将生成的 Cookie 文件路径通过XAUTHORITY环境变量告知给用户会话(Shell)。
  • 因此,当我们在终端运行wechat时,微信找不到 Cookie 文件,只能向服务器发送空凭证。
  • X Server 发现凭证无效,直接拒绝连接,抛出错误:Authorization required, but no authorization protocol specified

2.2 光标过大原因

原因:Wayland 和 X11 使用不同的机制来处理光标。

  • 在 Wayland 下,合成器负责绘制光标。
  • 但在 Xwayland 窗口内,X11 应用负责绘制光标。
  • 如果没有专门的设置守护进程(Settings Daemon)来同步 Wayland 的光标设置(大小、主题)到 X11,Xwayland 应用就会回退到默认设置(通常是巨大的默认光标或错误缩放)。

3. 详细排查步骤 (Troubleshooting)

步骤 1: 确认 Xwayland 基础状态

首先检查系统是否具备运行 X11 应用的基础能力。

# 1. 检查 Xwayland 二进制文件whichXwayland# 2. 检查进程是否运行psaux|grepXwayland# 3. 检查环境变量echo$DISPLAYecho$WAYLAND_DISPLAY

结果:DISPLAY=:0存在,Xwayland 进程存在,但应用依然无法连接。

步骤 2: 验证 X11 连接性

尝试使用简单的工具连接 X Server。

# 安装 xorg-xhost (如果未安装)sudopacman-Sxorg-xhost# 尝试连接xhost

结果:报错Authorization required, but no authorization protocol specified。确认为权限/认证问题。

步骤 3: 检查 Niri 配置

查看 Niri 是否开启了 Xwayland 支持。

cat~/.config/niri/config.kdl

发现:配置文件中虽然有xwayland选项,但在某些 Niri 版本或特定环境下,原生支持可能不够完善或缺乏 XAuth 管理。


4. 修复方案 (Fix Steps)

我们采用了xwayland-satellite配合xsettingsd的组合方案。这是 Niri 官方推荐的最佳实践。

  • xwayland-satellite: 一个独立的 Xwayland 管理器,能更好地处理 XAuth 和生命周期。
  • xsettingsd: 一个轻量级的 X11 设置守护进程,用于同步主题和光标大小。

4.1 修复启动问题 (部署 xwayland-satellite)

1. 安装 xwayland-satellite

由于该包在 Arch 的extra仓库或 AUR 中。

# 确保使用正确的代理(如果需要)exporthttp_proxy=http://127.0.0.1:7890exporthttps_proxy=http://127.0.0.1:7890# 安装yay-Sxwayland-satellite
2. 配置 Niri 自动启动

编辑 Niri 配置文件~/.config/niri/config.kdl,在启动部分添加:

// 启动时自动运行 satellite spawn-at-startup "xwayland-satellite"

4.2 修复光标过大问题 (部署 xsettingsd)

1. 安装 xsettingsd
yay-Sxsettingsd
2. 创建配置文件

创建~/.xsettingsd文件,强制指定光标主题和大小。
注意:Gtk/CursorThemeSize通常设为 24,如果觉得大可以设为 16。

# 编辑 ~/.xsettingsdGtk/CursorThemeName"Adwaita"Gtk/CursorThemeSize16Xft/Antialias1Xft/Hinting1Xft/HintStyle"hintfull"Xft/RGBA"rgb"
3. 配置 Niri 自动启动

同样在~/.config/niri/config.kdl中添加:

spawn-at-startup "xsettingsd"

4.3 应用更改

完成上述配置后,重启 Niri 会话(或重启系统)是应用更改最稳妥的方式。
重启后:

  1. xwayland-satellite会自动接管 X11 支持(通常监听:1)。
  2. xsettingsd会在后台广播正确的光标设置。
  3. 微信等 X11 应用即可正常启动且光标大小正常。

5. 总结

在 Niri 这种非桌面环境(DE)的独立合成器下运行 X11 应用,不能依赖 GNOME/KDE 那样的“开箱即用”魔法。我们需要显式地组装组件:

  1. 连接层:用xwayland-satellite替代/增强原生的 Xwayland 支持,解决认证问题。
  2. 配置层:用xsettingsd解决 X11 应用的主题和光标不一致问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询