天天看點

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端寫入資料庫。

繼續閱讀