配置 Xauthority
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
<!--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 计算机,并设置DISPLAY
和XAUTHORITY
环境变量。DISPLAY
是存储在.Xauthority
文件中的显示编号,XAUTHORITY
是 Xauthority 的文件路径。例如,请查看以下命令: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。正确设置DISPLAY
和XAUTHORITY
环境变量后,将自动在 XServer 桌面中显示 GUI。
故障排除
如果 Xauthority 不起作用,请按照故障排除步骤进行操作:
-
以具有 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-->
-
使用
Xauth
命令显示~/.Xauthority
中包含的 cookie。如果显示编号相同,则显示的 cookie 必须与 Xorg 和 XClient 的.Xauthority
文件中的 cookie 相同。 -
如果 cookie 相同,请检查是否能够使用 Linux VDA 的 IP 地址(例如 10.158.11.11)访问远程显示端口,并检查已发布桌面显示数量(例如 160)。
在 XClient 计算机上运行以下命令:
telnet 10.158.11.11 6160 <!--NeedCopy-->
端口号为 6000 + \<显示数量\> 的总和。
如果此 Telnet 操作失败,防火墙可能在阻止请求。