Product Documentation

配置 Xauthority

Feb 26, 2018

Linux VDA 支持使用利用 X11 显示功能(包括 xterm 和 gvim 等)进行交互式远程处理的环境。此功能提供必需的安全机制以确保 XClient 与 XServer 之间的通信安全。

可以通过两种方法确保此安全通信的权限安全:

  • Xhost。默认情况下,Xhost 仅允许本地主机 XClient 与 XServer 进行通信。如果选择允许远程 XClient 访问 XServer,则必须执行 Xhost 命令授予对特定计算机的权限。或者,也可以使用 xhost + 以允许任意 XClient 连接到 XServer。
  • Xauthority。Xauthority 文件可以在每个用户的主目录中找到,用于在 xauth 使用的 cookie 中存储凭据以供 XServer 的身份验证可使用。启动 XServer 实例 (Xorg) 后,该 cookie 将用于对与该特定显示的连接进行身份验证。

工作原理

Xorg 启动时,Xauthority 文件将被传递到 Xorg。此 Xauthority 文件包含以下元素:

  • 显示数量
  • 远程请求协议
  • cookie 数量

可以使用 xauth 命令浏览此文件。例如:

命令 复制

# xauth –f ~/.Xauthority

# > list

# > us01msip06:107  MIT-MAGIC-COOKIE-1  fb228d1b695729242616c5908f11624b

如果 XClient 远程连接到 Xorg,则必须满足两个必备条件:

  • 设置远程 XServer 的 DISPLAY 环境变量。
  • 获取包含 Xorg 中的其中一个 cookie 数量的 Xauthority 文件。

配置 Xauthority

要在 Linux VDA 上启用 Xauthority 以进行远程 X11 显示,必须创建下面两个注册表项:

命令 复制

sudo /opt/Citrix/VDA/bin/ctxreg create -k "HKLM\System\CurrentControlSet\Control\Citrix\Xorg" -t "REG_DWORD" -v "XauthEnabled" -d "0x00000001" --force

sudo /opt/Citrix/VDA/bin/ctxreg create -k "HKLM\System\CurrentControlSet\Control\Citrix\Xorg" -t "REG_DWORD" -v "ListenTCP" -d "0x00000001" --force

启用 Xauthority 后,手动或通过挂载共享主目录将 Xauthority 文件传递到 XClient:

  • 手动将 Xauthority 文件传递到 XClient

启动 ICA 会话后,Linux VDA 将为 XClient 生成 Xauthority 文件(文件名为 .Xauthority)并将该文件存储在登录用户的主目录中。可以将此 Xauthority 文件复制到远程 XClient 计算机,并设置 DISPLAY 和 XAUTHORITY 环境变量。DISPLAY 是存储在 Xauthority 文件中的显示数量,XAUTHORITY 是 Xauthority 的文件路径。例如,请查看以下命令:

命令 复制

set DISPLAY={Display number stored in the Xauthority file}

set XAUTHORITY={the file path of .Xauthority}

注意

如果未设置 XAUTHORITY 环境变量,默认将使用 ~/.Xauthority 文件。

  • 通过挂载共享主目录将 Xauthority 文件传递到 XClient
最便捷的方式是为登录用户装载共享主目录。当 Linux VDA 启动 ICA 会话时,将在登录用户的主目录下创建 .Xauthority 文件。如果此主目录与 XClient 共享,用户不需要手动将此 Xauthority 文件传输到 XClient。正确设置 DISPLAY 和 XAUTHORITY 环境变量后,将自动在 XServer 桌面中显示 GUI。

故障排除

如果 Xauthority 无法运行,请按照下面的步骤进行故障排除:

1. 以具有 root 权限的管理员身份获取所有 Xorg cookie:

命令 复制

ps aux | grep -i xorg

此命令将显示启动过程中传递到 Xorg 的 Xorg 进程和参数。另一个参数将显示使用的 Xauthority 文件。例如:

命令 复制

/var/xdl/xauth/.Xauthority110

使用 Xauth 命令显示 cookie:

命令 复制

Xauth -f /var/xdl/xauth/.Xauthority110

2. 使用 Xauth 命令显示 ~/.Xauthority 中包含的 cookie。如果显示编号相同,则显示的 cookie 必须与 Xorg 和 XClient 的 Xauthority 文件中的 cookie 相同。

3. 如果 cookie 相同,请检查是否能够使用 Linux VDA 的 IP 地址(例如 10.158.11.11)访问远程显示端口,并检查已发布桌面显示数量(例如 160)。

在 XClient 计算机上运行以下命令:

命令 复制

telnet 10.158.11.11 6160

端口号为 6000 + <显示数量> 的总和。

如果此 Telnet 操作失败,防火墙可能在阻止请求。