Linux Virtual Delivery Agent

Xauthority

Linux VDA 支持使用 X11 显示功能(包括 xtermgvim)进行交互式远程处理的环境。此功能提供必需的安全机制以确保 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
<!--NeedCopy-->

如果 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
<!--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 环境变量后,将自动在 XServer 桌面中显示 GUI。

故障排除

如果 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。如果显示编号相同,则显示的 cookie 必须与 Xorg 和 XClient 的 .Xauthority 文件中的 cookie 相同。

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

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

    telnet 10.158.11.11 6160
    <!--NeedCopy-->
    

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

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

Xauthority