福建升騰資訊有限公司 楊榮尊
虛擬桌面服務是典型的云計算應用,它能夠在“云”上為用戶提供桌面服務。桌面云服務提供商在數據中心的服務器上運行用戶的操作系統以及應用,用戶數據全部保存在數據中心,然后通過虛擬桌面顯示協議將顯示圖像實時發送到用戶端設備上,同時接收用戶端設備的輸入,并對其進行實時的響應。
隨著桌面云虛擬化技術的不斷成熟,微軟Windows系統下的虛擬桌面顯示協議已經得到了廣泛的研究,國內外常見的虛擬桌面顯示協議,如思杰的ICA協議、微軟的RDP協議、VMWare的PCoIP協議主要支持Windows操作系統,對Linux操作系統支持較差;隨著桌面云應用范圍的不斷擴大以及國內軟件自主可控的要求,Linux桌面的需求也逐漸出現。由于Windows操作系統和Linux操作系統圖形系統有較大的差異,因此虛擬桌面顯示的實現在Linux平臺上存在較大的差異。
Linux系統使用最廣泛的圖形系統是X Window System,最初是由麻省理工于1984年設計,由于其良好的設計以及靈活性,目前已經成為UNIX系的操作系統的主流圖形系統。從邏輯上看,X Window System是一個典型的CS結構的設計,X Window System主要由以下三個部分組成:

圖1 X Window System邏輯結構圖
(1)X Server:圖形服務器端,負責位圖的顯示、輸入設備的處理等;目前Linux主流發行版本如Centos、Ubuntu使用X.Org基金會的開源實現;
(2)X Protocol:顯示協議,目前使用的是X第11個版本的協議,因此也經常稱為X11協議;
(3)X Client:圖形客戶端,通過X11協議和服務器端交互;為了軟件開發的方便,避免封裝X11協議的復雜性,應用程序一般調用封裝好的xlib庫進行X11的請求。

圖2 X Window System物理結構圖
在X Windows System中X Server是獨立運行的進程,這一個進程控制了系統中的屏幕、鍵盤、鼠標等設備,X Client進程通過X11協議向X Server發送顯示指令,并從X Server獲取鼠標鍵盤的輸入數據。X11底層通信一般采用TCP或者UNIX本地socket的方式。
X Windows System的設計本身就允許X Server和X Client跨主機運行,因此最簡單的虛擬桌面協議的實現是在協議客戶端運行一個X Server,然后通過設置環境變量DISPLAY通知X Client服務器的位置,就可以在客戶端運行遠端服務器上的圖像應用。

圖3 X11虛擬桌面
這一種實現方式不需要進行開發,只需要進行相應的設置,總體實現比較簡單。但是存在以下的問題:
(1)安全性較差:X11協議是一個明文的協議,并沒有對數據進行加密;
(2)網絡帶寬大:X11協議沒有對位圖數據進行壓縮,網絡帶寬要求比較大;
(3)客戶端系統兼容性差:目前只有Linux客戶端系統帶有X Server,其他的平臺如Windows、android、iOS都缺乏成熟的X Server開源實現;
(4)配置復雜:和典型的虛擬桌面協議相比,X11協議有較多的配置在X Server端,比如字體的安裝以及配置,因此客戶端上的X Server配置比較復雜,用戶比較難在不同客戶端獲取一致的使用體驗。
SSH(Secure Shell protocol)是一種在不安全網絡上提供安全遠程登錄及其它安全網絡服務的協議;SSH不僅僅可以用于遠程登錄服務器,還可以為其他的應用提供安全通信隧道。
OpenSSH X11 Forward這一種實現方式和直接X11協議類似,只是X11數據包并不直接通過TCP協議發送,而是使用SSH隧道發送。使用SSH隧道可以解決安全性的問題,同時SSH協議支持zlib數據壓縮,可以減少帶寬占用,不過由于zlib是通用數據壓縮算法,沒有為圖像進行優化,因此無法達到最佳的壓縮效果。
X damage extension是X11的擴展協議,通過這一個擴展協議,X Client可以直接從X Server上獲取到顯示的變化區域,在Windows系統下要實現類似的功能需要通過編寫虛擬的顯示驅動。
開源項目X11vnc使用這一個機制實現了一個標準的X Client應用,這一個應用通過X11擴展協議x damage extension獲取顯示變化區域,然后使用XGetImage或者XShmGetImage調用獲取變化區域對應的位圖;獲取變化位圖后就可以采用和Windows系統相同的機制處理:選擇合適的圖像壓縮算法壓縮數據,將壓縮后的數據發送到客戶端。

圖4 X11vnc虛擬桌面
SPICE(simple protocol for independent computing environment)最初是由Qumranet開發,后面由RedHat收購并完全開源,經過近幾年的發展,已經成為了成熟的虛擬桌面協議。

圖5 SPICE虛擬桌面
和前面實現相比,SPICE采用了完全不同的方式獲取顯示數據,它并沒有在Linux系統中開發單獨的組件,而是在虛擬機(QEMU)的Hyper-V層通過QXL的虛擬顯示設備獲取顯示數據。這一種實現方式和操作系統完全解耦,可以支持任意的操作系統。
SPICE協議最大的特點是在QEMU虛擬化平臺中通過軟件實現的PCI顯示設備QXL獲取顯示數據,這種架構使得SPICE協議緊密地依賴于服務器虛擬化軟/硬件基礎設施,SPICE必須與QEMU虛擬化環境綁定。傳統的虛擬桌面傳輸協議工作在虛擬機Guest OS中,而SPICE協議本身運行在虛擬機所在的主機中,可以直接使用服務器的硬件資源。
基于X11協議的虛擬桌面實現難以對位圖數據進行針對性的壓縮,而且需要在客戶端實現X Server,比較難適應各種類型的客戶端系統;基于x damage extension擴展的虛擬桌面,可以高效獲取屏幕變化區域,但是只能獲取到位圖數據,無法獲取到顯示指令,需要一個有效的圖像壓縮算法,才能達到較好的帶寬;SPICE協議的實現方式可以高效的獲取顯示指令,但是和QEMU完全綁定,無法在其他虛擬機平臺上使用。從機制上看,基于x damage extension擴展的實現方式和Windows系統下虛擬桌面實現比較類似,更適合虛擬化廠商擴展自己的虛擬桌面協議以支持Linux系統。