Linux Virtual Delivery Agent

Xauthority

Linux VDA 支持使用 X11 显示功能(包括 xtermgvim)进行交互式远程处理的环境。此功能提供了一种安全机制,可确保 XClient 和 XServer 之间的安全通信。

  • 有两种方法可以保护此安全通信的权限:

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

  • 工作原理

Xorg 启动时,会将一个 .Xauthority 文件传递给 Xorg。此 .Xauthority 文件包含以下元素:

  • 显示器编号
  • 远程请求协议
  • Cookie 编号

  • 您可以使用 xauth 命令浏览此文件。例如:
# xauth -f ~/.Xauthority

# > list

# > us01msip06:107  MIT-MAGIC-COOKIE-1  fb228d1b695729242616c5908f11624b
<!--NeedCopy-->

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

  • DISPLAY 环境变量设置为远程 XServer。
  • 获取包含 Xorg 中某个 Cookie 编号的 .Xauthority 文件。

配置 Xauthority

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

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
<!--NeedCopy-->

启用 Xauthority 后,通过手动或通过装载共享主目录将 .Xauthority 文件传递给 XClient

  • 手动将 .Xauthority 文件传递给 XClient

    启动 ICA® 会话后,Linux VDA 会为 XClient 生成 .Xauthority 文件,并将其存储在登录用户的主目录中。您可以将此 .Xauthority 文件复制到远程 XClient 计算机,并设置 DISPLAYXAUTHORITY 环境变量。DISPLAY 是存储在 .Xauthority 文件中的显示器编号,XAUTHORITYXauthority 的文件路径。例如,请参阅以下命令:

     export DISPLAY={Display number stored in the Xauthority file}
    
     export XAUTHORITY={the file path of .Xauthority}
     <!--NeedCopy-->
    

    注意:

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

  • 通过装载共享主目录将 .Xauthority 文件传递给 XClient

    便捷的方法是为登录用户装载共享主目录。当 Linux VDA 启动 ICA 会话时,会在登录用户的主目录下创建 .Xauthority 文件。如果此主目录与 XClient 共享,则用户无需手动将此 .Xauthority 文件传输到 XClient。正确设置 DISPLAYXAUTHORITY 环境变量后,GUI 会自动显示在 XServer 桌面中。

故障排除

如果 Xauthority 不起作用,请按照以下故障排除步骤操作:

  1. 作为具有 root 权限的管理员,检索所有 Xorg Cookie:

    ps aux | grep -i xorg
    <!--NeedCopy-->
    

    此命令显示 Xorg 进程以及启动时传递给 Xorg 的参数。另一个参数显示使用了哪个 .Xauthority 文件。例如:

    /var/xdl/xauth/.Xauthority110
    <!--NeedCopy-->
    

    使用 Xauth 命令显示 Cookie:

    Xauth -f /var/xdl/xauth/.Xauthority110
    <!--NeedCopy-->
    
  2. 使用 Xauth 命令显示 ~/.Xauthority 中包含的 Cookie。对于相同的显示器编号,Xorg 和 XClient 的 .Xauthority 文件中显示的 Cookie 必须相同。

  3. 如果 Cookie 相同,请使用 Linux VDA 的 IP 地址和已发布的桌面显示器编号检查远程显示器端口的可访问性。

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

    telnet 10.158.11.11 6160
    <!--NeedCopy-->
    

    端口号是 6000 + <显示器编号> 的总和。

    如果此 telnet 操作失败,则防火墙可能正在阻止该请求。

Xauthority