天天看点

Citrix云桌面玩转Linux VDA之服务架构解析

作者:神行科技

Citrix Linux VDA产品经过不断更新完善,用户可以通过多样化的机器发布方式满足Linux桌面的快速制备以及高效的运维管理。Citrix支持Linux单机发布,Remote PC物理机发布,通过PVS或MCS技术批量发布,以及Linux虚拟应用发布。

本文的目的是帮助大家理解Linux VDA产品的服务架构以及各个子服务之间是如何协同运作的。

我们可以借助如下Linux VDA逻辑架构图,更加深入的理解Linux VDA产品:

Citrix云桌面玩转Linux VDA之服务架构解析

1.ConfDB

我们需要知道,Linux 本身并没有注册表的概念,但是为了与Windows VDA保持管理上的一致性,Linux VDA引入了注册表的容器以保存VDA配置信息。Linux VDA在安装配置过程中创建基于Postgresql数据库的ConfDB来存放注册表信息。用户可以通过我们提供的命令行接口ctxreg查看修改注册表信息,而无需通过PSQL命令操作Postgresql数据库:

/opt/Citrix/VDA/bin/ctxreg

• Usage: create -k<Key> -v<value> -t<type> -d[data] /*创建键值*/

• Usage: delete -k<Key> -v<value> /*删除键值*/

• Usage: dump -k[Key] /*查询键值*/

比如通过Ctxreg命令查询VDA上配置的DDC列表

Citrix云桌面玩转Linux VDA之服务架构解析

Linux VDA上所获取的Citrix策略配置结果也会通过注册表的形式保存在ConfDB中,我们可以通过上述注册表查询命令来验证或者排查Citrix策略的应用情况。这里需要说明的是并非所有的DDC 策略都对Linux VDA 适用,所以遇到策略下发异常的问题,我们要先确认该策略是否支持Linux,然后再检查相关配置信息是否成功写入VDA的注册表键值。当然也会有一些策略只支持Linux而无法应用在Windows端。例如,如下策略仅适用于Linux VDA来控制剪贴板的策略。

Citrix云桌面玩转Linux VDA之服务架构解析

Citrix管理员在部署策略时需要仔细阅读Citrix相关Edoc文档以及Studio中策略配置的详细描述信息以确保策略与VDA类型匹配。

Citrix云桌面玩转Linux VDA之服务架构解析

Linux VDA策略支持列表请参考如下链接:

https://docs.citrix.com/en-us/linux-virtual-delivery-agent/current-release/configure/policy-support-list.html

2.Ctxjproxy和Ctxvda服务

Windows VDA通过Citrix Desktop Service (Brokeragent.exe)来与DDC通讯完成VDA到DDC上的注册工作,承接DDC的会话分发,同时与DDC交互Citrix HDX会话状态、会话参数(连接时长、客户端信息等)。在Linux VDA中BrokerAgent的角色由一对服务Ctxjproxy和Ctxvda共同来承载。Ctxvda服务基于DotNet开发,其依赖于Linux VDA配置时安装的DotNet Runtime库。Ctxjproxy服务基于Java开发,其作为Proxy与DDC交互并完成Broker消息的安全传递,消息路径变成Ctxvda -> Ctxjproxy -> DDC Broker Service。

Citrix云桌面玩转Linux VDA之服务架构解析

3.HDX

Ctxhdx是Linux VDA最核心的服务,HDX服务负责ICA会话整个生命周期的管理:

•会话的连接监听

•与Ctxvda服务交互ICA会话状态信息

•提供会话状态查询接口

•提供会话状态控制接口,包括会话强制断连、注销

•会话连接的ACL准入控制

•为每个会话初始化一个Ctxgfx进程以创建会话

4.Xorg和Ctxgfx

Linux系统本身是没有图形界面的,它不像Windows系统的图形界面在系统内核中就实现了。Linux系统需要额外安装桌面系统软件来显示图形界面,如X Window。X Window提供视窗系统服务(采用Client/Server服务架构):其中Xorg提供了X服务端(X Server)来接收键盘鼠标输入并负责屏幕窗口的输出响应;而显示管理器Display Manager、窗口管理器Window Manager以及图形应用程序集合起来构成一个完整的Linux桌面环境,即X Window的客户端(X Client)。Linux VDA支持的桌面环境有MATE、GNOME、GNOME Classic、KDE (仅RHEL)。

关于Linux VDA支持的Linux版本与Xorg版本的对应关系,可以参考Citrix官方文档

Ctxgfx服务托管ICA的图像虚拟通道,负责ICA会话中VDA到客户端的图像画面传输。Ctxhdx服务会在会话建立时基于每个会话创建Ctxgfx进程。Ctxgfx会从X Server中获取系统正在渲染画面并通过Thinwire协议编码后发送给Citrix WorkspaceApp。同时Ctxgfx会键盘鼠标数据以及终端会话的显示大小和显示器的layout信息发送给X Server。在会话建立过程中,Ctxgfx会创建Ctxlogin进程,用于用户登录认证以及准备桌面环境(如Gnome或者KDE)。

5.Ctxlogin

Ctxlogin进程由Ctxgfx进程创建,其主要负责

•用户在ICA会话的登录认证(PAM认证)

•创建X session (X Session中会启动音频、剪切板等重定向服务)

•为每个X Session初始化Gnome桌面环境

•会话断开后的自动重连功能。如果自动重连无法完成,Ctxlogin会给用户展示会话重连对话框

•在用户注销时结束所有用户进程并销毁用户桌面环境(如Gnome或者KDE)

6.Ctxusbsd和Ctxvhcid服务

开源的VHCI可以在IP网络上形成一个通用的USB设备共享系统以控制USB设备的识别、数据传输等。它由 Linux 内核驱动程序和一些User Mode的函数库组成,这些库可以与系统内核驱动程序通信以获取所有 USB 数据。

Citrix USB服务作为一个Citrix模块,承载USB虚拟通道,管理USB设备上的所有虚拟化和数据传输工作。Citrix VHCI服务是Citrix提供的与VHCI内核模块通信的开源服务,充当VHCI和Citrix USB服务之间的网关。另外,USB设备重定向依赖于VHCI内核模块(usb-vhci-hcd.ko 和usb-vhci-iocif.ko),当VDA安装包中自带的这两个模块版本和Linux 系统版本不一致时,我们需要重新编译,

具体方法可以参考官方文档:https://docs.citrix.com/en-us/linux-virtual-delivery-agent/1912-ltsr/configuration/configure-usb-redirection.html#build-the-vhci-kernel-module

总结:ICA会话创建流程

在理解了上述的概念之后,我们可以来梳理用户登录Linux桌面并创建ICA会话的过程。

1、Linux VDA首先要通过Ctxvda和Ctxjproxy 服务与DDC完成注册。

2、当用户申请会话时,Ctxvda服务会响应DDC的会话准备请求,Ctxhdx服务监听ICA连接请求。

3、当用户会话接入,Ctxhdx创建Ctxgfx进程来传输用户会话的图像,此时用户端已经可以看到Linux机器的运行画面。

4、Ctxgfx创建Ctxlogin进程完成用户认证。在用户登录过程中,VDA通过Ctxpolicyd服务获取DDC下发的策略并将策略配置以注册表的形式贮存于ConfDB。同时,Ctxlogin服务创建X Session并加载相应的ICA虚拟通道并在Linux系统上创建用户桌面环境。

5、之后,每一个会话中的音频、剪切板等功能所对应的Ctxaudio和 Ctxclipoard 服务进程也会运行起来以提供良好的用户交互体验。

6、用户ICA会话建立完成Ctxhdx服务会将会话状况、连接信息、客户端信息等内容传递给Ctxvda,并通过Ctxjproxy发送到DDC端写入数据库。

继续阅读