專利名稱:Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法及其裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及訪問遠(yuǎn)程Windows應(yīng)用程序的方法,特別是涉及一種基于C/S (Client/Server,客戶端/服務(wù)器端)架構(gòu)的Linux終端訪問遠(yuǎn)程Windows應(yīng)用 程序的方法及其裝置,以保證Windows應(yīng)用程序能夠無縫地顯示在Linux終 端窗口系統(tǒng)中,對于用戶是透明的。
背景技術(shù):
現(xiàn)有的在Linux終端上訪問Windows程序的方法,大體上可以分成三類 一類是利用瘦客戶協(xié)議(例如RDP、 VNC、 THINC等)訪問遠(yuǎn)程Windows 服務(wù)器,另一類是在Linux系統(tǒng)上運(yùn)行模擬器(例如VMWare等),最后一 類是在Linux系統(tǒng)中提供Windows API的實(shí)現(xiàn)(例如Wine等)。并且這三種 方法中只有瘦客戶協(xié)議方法能夠訪問遠(yuǎn)程Windows應(yīng)用程序,后兩種方法一 般將Windows應(yīng)用程序放到Linux終端上運(yùn)行。其中RDP (Remote Desktop Protocol)是遠(yuǎn)程桌面協(xié)議,VNC (Virtual Network Computing)是虛擬網(wǎng)絡(luò)i十 算,THINC ( Thin-Client Internet Computing )是瘦客戶網(wǎng)絡(luò)計(jì)算,API (Application Program Interface)是應(yīng)用程序接口 。
瘦客戶協(xié)議方法對用戶完全透明,性能較高,并且對Linux客戶端要求低, 因此得到了廣泛應(yīng)用。但這些瘦客戶協(xié)議一般顯示的是整個(gè)Windows窗口而 非單個(gè)應(yīng)用程序,因此所有遠(yuǎn)程應(yīng)用程序都在本地的一個(gè)任務(wù)欄中。當(dāng)Linux 終端用戶需要在本地應(yīng)用和遠(yuǎn)程應(yīng)用之間切換窗口時(shí),或者用戶需要運(yùn)行多個(gè) 服務(wù)器上的應(yīng)用程序時(shí),單純的瘦客戶協(xié)議不能很好的滿足用戶需要。為了進(jìn) 一步提升用戶的體驗(yàn),出現(xiàn)了無縫窗口 (Seamless Window)的概念。無縫窗 口使得遠(yuǎn)程應(yīng)用程序在外觀、感覺以及執(zhí)行等各方面都與本地安裝的應(yīng)用程序 類似,它并沒有一個(gè)公認(rèn)的定義,可簡單的歸納為如下幾點(diǎn)
1、 應(yīng)用程序在外觀上不具有遠(yuǎn)程桌面框架;
2、 用戶可以最大化、最小化或者調(diào)整應(yīng)用程序的窗口大??;3、 用戶可以像點(diǎn)擊和拖動(dòng)本地應(yīng)用程序的窗口一樣移動(dòng)應(yīng)用程序到達(dá)會(huì) 話窗口;
4、 當(dāng)從已有應(yīng)用程序的窗口中啟動(dòng)一個(gè)新的應(yīng)用程序時(shí), 一個(gè)應(yīng)用程序 按鈕將出現(xiàn)在用戶的任務(wù)欄上。
雖然在一些商業(yè)系統(tǒng)例如Citrix MetaFmme等已經(jīng)集成了無縫窗口的概 念,但這些無縫窗口的實(shí)現(xiàn)技術(shù)一般是基于窗口裁減的,也就是說,實(shí)際上完 整的用戶會(huì)話,包括整個(gè)Windows桌面及相關(guān)的進(jìn)程都是存在的,通過月艮務(wù) 器端或客戶端的裁剪,只顯示了屬于該應(yīng)用程序窗口的部分。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種Linux終端無縫訪問遠(yuǎn)程 Windows應(yīng)用程序的方法及其裝置,用于解決現(xiàn)有技術(shù)中無法實(shí)現(xiàn)對Windows 應(yīng)用程序的真正的無縫訪問,從而導(dǎo)致服務(wù)器端計(jì)算和存儲(chǔ)資源的浪費(fèi),以致 無法提升服務(wù)容量的問題。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種Linux終端無縫訪問遠(yuǎn)程Windows 應(yīng)用程序的方法,其特征在于,該方法包括
步驟一,Windows服務(wù)器端截獲Windows應(yīng)用程序所需的顯示調(diào)用,并 發(fā)送給Linux客戶端;
步驟二,所述Linux客戶端將從所述Windows服務(wù)器端接收的所述顯示 調(diào)用轉(zhuǎn)換為本地繪圖操作,調(diào)用所述本地繪圖操作完成實(shí)際的繪制操作。
所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法,其中,所述 步驟一中,進(jìn)一步包括
通過遠(yuǎn)程代理對所述Windows服務(wù)器端的用戶帳號(hào)及應(yīng)用程序權(quán)限信,息 進(jìn)行維護(hù)的步驟。
所述的Li皿x終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法,其中,所述 步驟一中,進(jìn)一步包括-
當(dāng)所述Linux客戶端通過本地代理要?jiǎng)?chuàng)建遠(yuǎn)程應(yīng)用時(shí),所述遠(yuǎn)程代理接收 由所述本地代理發(fā)送的用戶帳號(hào)信息及應(yīng)用程序信息,并對所述Windows應(yīng) 用程序進(jìn)行權(quán)限檢査,當(dāng)權(quán)限檢査通過后,在所述服務(wù)器端啟動(dòng)相應(yīng)的應(yīng)用程 序的步驟。所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法,其中,戶大述 步驟一中,進(jìn)一步包括
當(dāng)所述應(yīng)用程序權(quán)限檢査失敗后,所述遠(yuǎn)程代理結(jié)束與所述本地代理之間 通信的步驟;或
當(dāng)所述Windows服務(wù)器端的用戶帳號(hào)不具備啟動(dòng)相應(yīng)的應(yīng)用程序的權(quán)限 時(shí),所述遠(yuǎn)程代理結(jié)束與所述本地代理之間通信的步驟。
所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法,其中,所述 步驟一中,進(jìn)一步包括
當(dāng)所述Windows應(yīng)用程序啟動(dòng)后,所述遠(yuǎn)程代理將通過Hook Dll截獲的 所述顯示調(diào)用發(fā)送至所述本地代理的步驟。
所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法,其中,所述
步驟二中,進(jìn)一步包括
所述本地代理將所述顯示調(diào)用轉(zhuǎn)換成所述Linux客戶端的本地繪圖操作, 在所述Linux客戶端繪制所述Windows應(yīng)用程序的窗口,并將用戶針對戶萬述 遠(yuǎn)程應(yīng)用的鼠標(biāo)/鍵盤操作發(fā)送至所述遠(yuǎn)程代理,由所述遠(yuǎn)程代理將所述鼠標(biāo)/ 鍵盤操作送至對應(yīng)的應(yīng)用程序進(jìn)行處理的步驟。
所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法,其中,戶萬述 步驟二中,進(jìn)一步包括
當(dāng)所述Linux客戶端希望結(jié)束所述Windows應(yīng)用程序時(shí),通過所述本地 代理向所述遠(yuǎn)程代理發(fā)送消息,所述遠(yuǎn)程代理根據(jù)所述消息通知所述Windows 應(yīng)用程序結(jié)束的步驟。
為了實(shí)現(xiàn)上述目的,本發(fā)明還提供了一種Linux終端無縫訪問遠(yuǎn)程 Windows應(yīng)用程序的裝置,其特征在于,該裝置包括
Windows服務(wù)器端,用于截獲Windows應(yīng)用程序所需的顯示調(diào)用;
Linux客戶端,用于從所述Windows服務(wù)器端接收所述顯示調(diào)用,將所述 顯示調(diào)用轉(zhuǎn)換為本地繪圖操作,根據(jù)所述本地繪圖操作完成實(shí)際的繪制操作。
所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的裝置,其中,所述 Windows服務(wù)器端包括
HookDlI模塊,用于捕獲所述顯示調(diào)用;
遠(yuǎn)程代理模塊,連接所述Hook Dll模塊,用于從所述Hook Dll模塊接收
6所述顯示調(diào)用,并將所述顯示調(diào)用發(fā)送給所述Linux客戶端;
虛擬顯示驅(qū)動(dòng)模塊,用于維護(hù)與所述本地繪圖操作相應(yīng)的數(shù)據(jù)結(jié)構(gòu); 輸入設(shè)備驅(qū)動(dòng)模塊,連接所述遠(yuǎn)程代理模塊,用于對所述Windows服務(wù)
器端的輸入設(shè)備驅(qū)動(dòng)進(jìn)行修改,以對從所述遠(yuǎn)程代理接收的鼠標(biāo)/鍵盤事件進(jìn)
行處理。
所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的裝置,其中,所述 Linux客戶端包括
本地代理模塊,用于將所述遠(yuǎn)程代理模塊發(fā)送的所述顯示調(diào)用轉(zhuǎn)換為本地 繪制操作;
顯示設(shè)備驅(qū)動(dòng)模塊,用于在所述本地代理模塊的調(diào)用下,根據(jù)所述本地繪 圖操作完成實(shí)際的繪制操作;
輸入設(shè)備驅(qū)動(dòng)模塊,用于將用戶的針對所述遠(yuǎn)程應(yīng)用的鼠標(biāo)/鍵盤操作送 至對應(yīng)的應(yīng)用程序處理。
所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的裝置,其中,所述 Linux客戶端希望結(jié)束所述Windows應(yīng)用程序時(shí),由所述本地代理模塊發(fā)送消 息給所述遠(yuǎn)程代理模塊,所述遠(yuǎn)程代理根據(jù)所述消息通知所述Windows應(yīng)用 程序結(jié)束。
本發(fā)明的有益技術(shù)效果
與現(xiàn)有RDP技術(shù)等相比,本發(fā)明提出的從Linux終端無縫訪問Windows 應(yīng)用程序的方法是一種基于GDI遷移的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng) 用程序的方法,該方法實(shí)現(xiàn)了對Windows應(yīng)用程序的無縫訪問,在適當(dāng)增加 網(wǎng)絡(luò)傳輸數(shù)據(jù)量的情況下,能夠減少Windows服務(wù)器端計(jì)算和存儲(chǔ)資源開銷, 從而提升服務(wù)器容量。本發(fā)明的方法從如下幾個(gè)角度減少了 Windows服務(wù)器 端的開銷
1) 不需要在虛擬顯示驅(qū)動(dòng)中產(chǎn)生實(shí)際的位2) 不需要在網(wǎng)絡(luò)數(shù)據(jù)傳輸時(shí)對位圖進(jìn)行各種操作。
以下結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)描述,但不作為對本發(fā)明的 限定。
圖1為本發(fā)明基于GDI遷移的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程 序的裝置結(jié)構(gòu)圖2為本發(fā)明基于GDI遷移的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程 序的方法流程圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施方式
對本發(fā)明的技術(shù)方案作進(jìn)一步更詳細(xì)的描述。
如圖1所示,為本發(fā)明基于GDI遷移的Linux終端無縫訪問遠(yuǎn)程Windows 應(yīng)用程序的裝置結(jié)構(gòu)圖。該裝置100包括Windows服務(wù)器端10和Linux客 戶端20兩大部分,且Windows服務(wù)器端10、 Linux客戶端20之間通過網(wǎng)絡(luò) 30互聯(lián),并且Linux客戶端20具有圖形顯示能力。該發(fā)明的技術(shù)方案如下
Windows服務(wù)器端IO截獲應(yīng)用程序必要的相關(guān)顯示調(diào)用,并通過網(wǎng)絡(luò)30 轉(zhuǎn)發(fā)給Linux客戶端20。
Linux客戶端20處理從Windows服務(wù)器端10接收到的相關(guān)顯示調(diào)用,并 將相應(yīng)的調(diào)用轉(zhuǎn)換為本地的繪制操作(如X請求),然后調(diào)用本地的顯示設(shè) 備驅(qū)動(dòng)模塊22完成實(shí)際的繪制操作。
Linux客戶端20需要將用戶的鼠標(biāo)/鍵盤事件轉(zhuǎn)發(fā)給Windows服務(wù)器端10 處理,類似于瘦客戶協(xié)議。
為了能夠完成上述要求,需要Windows服務(wù)器端10和Linux客戶端20 都進(jìn)行相應(yīng)的設(shè)置,分別描述如下
Windows服務(wù)器端10包括的主要部件為遠(yuǎn)程代理模塊11 、 Hook Dll模 塊12、 GDI32模塊13、窗口管理器14、虛擬顯示驅(qū)動(dòng)模塊15、輸入設(shè)備驅(qū)動(dòng) 模塊16。傳統(tǒng)的操作系統(tǒng)一般將虛擬內(nèi)存劃分為內(nèi)核空間和用戶空間。圖1 中的內(nèi)核空間內(nèi)存區(qū)域是提供給操作系統(tǒng)內(nèi)核、內(nèi)核擴(kuò)展以及一些設(shè)備驅(qū)動(dòng)運(yùn) 行的空間,圖1中的用戶空間內(nèi)存區(qū)域是提供給所有用戶態(tài)應(yīng)用程序運(yùn)行的空 間。
1)遠(yuǎn)程代理模塊11:主要工作是負(fù)責(zé)接收來自Hook Dll模塊12捕獲的 GDI調(diào)用,并將GDI調(diào)用打包發(fā)送給Linux客戶端20的本地代理模塊21,同
時(shí)從本地代理模塊21接收鼠標(biāo)/鍵盤事件,對該鼠標(biāo)/鍵盤事件完成坐標(biāo)轉(zhuǎn)換后,發(fā)送到輸入設(shè)備驅(qū)動(dòng)模塊16。
由于遠(yuǎn)程代理模塊11需要同時(shí)支持多個(gè)Linux客戶端20,因此需要負(fù)責(zé) 維護(hù)Windows服務(wù)器端10的應(yīng)用程序與Linux客戶端20的映射關(guān)系。另夕卜, Windows服務(wù)器端10的應(yīng)用程序向遠(yuǎn)程代理模塊11進(jìn)行注冊,所以遠(yuǎn)程代理 模塊11也負(fù)責(zé)維護(hù)該應(yīng)用程序的注冊信息,并實(shí)現(xiàn)對單個(gè)應(yīng)用程序的控制。 其中,注冊信息包括Windows服務(wù)器端10的用戶賬號(hào)信息以及應(yīng)用程序權(quán)限倍息。
2) Hook Dll模塊12:負(fù)責(zé)在Windows應(yīng)用程序運(yùn)行時(shí)捕獲GDI32模塊 13生成的顯示調(diào)用(GDI調(diào)用等),并將這些顯示調(diào)用傳給遠(yuǎn)程代理模塊ll, Windows應(yīng)用程序的顯示調(diào)用同時(shí)進(jìn)入GDI32模塊13。特別地,為了讓遠(yuǎn)程 代理模塊11能夠區(qū)分這些GDI調(diào)用應(yīng)當(dāng)發(fā)送給哪個(gè)Linux客戶端20的應(yīng)用
程序,需要在GDI調(diào)用中添加進(jìn)程信息等。這種方法可以控制單獨(dú)的應(yīng)用程 序。
3) GDI32模塊13:主要根據(jù)應(yīng)用程序的圖形請求,生成Windows應(yīng)用程 序的顯示調(diào)用。GDI是Windows圖形驅(qū)動(dòng)程序和應(yīng)用之間的中介支持。應(yīng)用 程序調(diào)用Win32 GDI函數(shù)進(jìn)行圖形輸出請求,這個(gè)請求通過核心模式GDI發(fā) 送。然后核心模式GDI把這些請求發(fā)送到相應(yīng)的圖形驅(qū)動(dòng)程序,如顯示器驅(qū) 動(dòng)程序或打印機(jī)驅(qū)動(dòng)程序。核心模式GDI是一個(gè)不能被替代的系統(tǒng)提供的模 塊。Win32 GDI和圖形引擎都是完全與設(shè)備無關(guān)的,應(yīng)用不需要直接訪問硬件。
4) 窗口管理器14:主要負(fù)責(zé)在圖形用戶界面的視窗系統(tǒng)中,通過提供桌 面環(huán)境來控制窗口的位置與外觀,并處理輸入設(shè)備驅(qū)動(dòng)模塊16轉(zhuǎn)交的鼠標(biāo)/ 鍵盤事件。
5) 虛擬顯示驅(qū)動(dòng)模塊15:當(dāng)應(yīng)用程序運(yùn)行時(shí),新的虛擬顯示驅(qū)動(dòng)申莫塊15 只需要維護(hù)相應(yīng)的數(shù)據(jù)結(jié)構(gòu),實(shí)際上并不完成繪制操作。
6) 輸入設(shè)備驅(qū)動(dòng)模塊16:需要對Windows服務(wù)器端10的輸入設(shè)備驅(qū)動(dòng) 進(jìn)行一定的修改,以將從遠(yuǎn)程代理模塊11接收的鼠標(biāo)/鍵盤事件作為真實(shí)的鼠 標(biāo)/鍵盤事件,并交給窗口管理器14進(jìn)行處理。
Linux客戶端20包括的主要部件為本地代理模塊21、 X Server 23、窗 口管理器24、顯示設(shè)備驅(qū)動(dòng)模塊25、輸入設(shè)備驅(qū)動(dòng)模塊26。
1)本地代理模塊2h主要工作為負(fù)責(zé)將遠(yuǎn)程代理模塊11發(fā)送的顯示調(diào)用轉(zhuǎn)換為本地繪制操作,通過X Server 23調(diào)用本地的顯示設(shè)備驅(qū)動(dòng)模塊25, 由顯示設(shè)備驅(qū)動(dòng)模塊25完成實(shí)際的繪制操作,并將用戶的針對遠(yuǎn)程應(yīng)用的鼠 標(biāo)/鍵盤操作送至遠(yuǎn)程代理模塊11處理。
具體地,本地代理模塊21接收來自遠(yuǎn)程代理模塊U的繪制請求,將其轉(zhuǎn) 換為本地的圖形繪制命令(例如X協(xié)議)。還負(fù)責(zé)將用戶針對遠(yuǎn)程應(yīng)用的鼠 標(biāo)/鍵盤事件發(fā)送回Windows服務(wù)器端10處理。本地代理模塊21在接收到繪 制請求時(shí),首先與遠(yuǎn)程代理模塊ll完成密鑰交換等必要的安全機(jī)制,再進(jìn)行 轉(zhuǎn)換處理。
2) X Server 23,用于調(diào)用顯示設(shè)備驅(qū)動(dòng)模塊25。
3) 窗口管理器24,主要負(fù)責(zé)在圖形用戶界面的視窗系統(tǒng)中,通過提供桌 面環(huán)境來控制窗口的位置與外觀,并處理輸入設(shè)備驅(qū)動(dòng)模塊26轉(zhuǎn)交的鼠標(biāo)/ 鍵盤事件。
4) 顯示設(shè)備驅(qū)動(dòng)模塊25,用于根據(jù)本地繪制操作完成實(shí)際的繪制操作。
5) 輸入設(shè)備驅(qū)動(dòng)模塊26,用于對Linux客戶端20的輸入設(shè)備驅(qū)動(dòng)進(jìn)行 一定的修改,以將從本地代理模塊21接收的鼠標(biāo)/鍵盤事件作為真實(shí)的鼠標(biāo)/ 鍵盤事件,并交給X Server 23進(jìn)行處理。
當(dāng)本地代理模塊21希望創(chuàng)建一個(gè)遠(yuǎn)程應(yīng)用時(shí),需要向遠(yuǎn)程代理模塊11 發(fā)送消息,消息內(nèi)容包括應(yīng)用程序在遠(yuǎn)程代理模塊11中注冊的名字以及用戶 賬號(hào)信息,以便讓W(xué)indows服務(wù)器端10進(jìn)行權(quán)限檢査(可以提供服務(wù)發(fā)現(xiàn)等 附加功能,讓Limix客戶端20能夠發(fā)現(xiàn)Windows服務(wù)器端10提供的應(yīng)用); 遠(yuǎn)程代理模塊ll完成權(quán)限檢査,決定是否可以啟動(dòng)該應(yīng)用程序。
當(dāng)權(quán)限檢查通過后,在Windows服務(wù)器端10運(yùn)行相應(yīng)的應(yīng)用程序,在運(yùn) 行應(yīng)用程序的過程中,需要同時(shí)完成HookDll的注入等工作;HookDll模塊 12將捕獲的GDI調(diào)用發(fā)送給遠(yuǎn)程代理模塊11,再由遠(yuǎn)程代理模塊11將GDI 調(diào)用轉(zhuǎn)發(fā)給相應(yīng)的本地代理模塊21;本地代理模塊21從遠(yuǎn)程代理模塊11接 收到GDI調(diào)用后,將其轉(zhuǎn)換成Linux客戶端20的本地繪制操作(如X請求), Linux客戶端20將繪制應(yīng)用程序的窗口 。
Limix客戶端20將針對遠(yuǎn)程應(yīng)用的鼠標(biāo)/鍵盤等操作,通過本地代理模塊 21轉(zhuǎn)發(fā)給遠(yuǎn)程代理模塊11;遠(yuǎn)程代理模塊11從本地代理模塊21接收到這些 鼠標(biāo)/鍵盤操作后,將會(huì)轉(zhuǎn)發(fā)給輸入設(shè)備驅(qū)動(dòng)模塊16處理。當(dāng)Linux客戶端20希望結(jié)束應(yīng)用程序時(shí),發(fā)送消息給遠(yuǎn)程代理模塊11 , Windows服務(wù)器端10將會(huì)通知應(yīng)用程序結(jié)束。
如圖2所示,為本發(fā)明基于GDI遷移的Linux終端無縫訪問遠(yuǎn)程Windows 應(yīng)用程序的方法流程圖。該流程描述了 Windows服務(wù)器端10和Linux客戶端 20之間交互的全過程-
步驟S201, Windows服務(wù)器端10的應(yīng)用程序向遠(yuǎn)程代理模塊11進(jìn)行注 冊,遠(yuǎn)程代理模塊11維護(hù)各應(yīng)用程序的注冊信息,其中注冊信息包括Windows 服務(wù)器端10的用戶賬號(hào)信息以及應(yīng)用程序的權(quán)限信息;
步驟S202, Linux客戶端20的本地代理模塊21向遠(yuǎn)程代理模塊11發(fā)起 連接(如繪制請求),首先與遠(yuǎn)程代理模塊U完成密鑰交換等必要的安全機(jī) 制;
步驟S203,本地代理模塊21希望創(chuàng)建一個(gè)遠(yuǎn)程應(yīng)用,需要向遠(yuǎn)程代理模 塊ll發(fā)送消息,消息的內(nèi)容包括用戶賬號(hào)信息以及應(yīng)用程序信息(如應(yīng)用程 序在遠(yuǎn)程代理模塊11中注冊的名字),以便讓W(xué)indows服務(wù)器端10對Windows 應(yīng)用程序進(jìn)行權(quán)限檢査(可以提供服務(wù)發(fā)現(xiàn)等附加功能,讓Linux客戶端20 能夠發(fā)現(xiàn)Windows服務(wù)器端10提供的應(yīng)用);
步驟S204,遠(yuǎn)程代理模塊ll完成權(quán)限檢查,決定是否可以啟動(dòng)該應(yīng)用程 序,若權(quán)限檢查失敗,則遠(yuǎn)程代理結(jié)束與本地代理之間的通信;
該步驟中,進(jìn)一步地,當(dāng)Windows服務(wù)器端的用戶帳號(hào)不具備啟動(dòng)相應(yīng) 的應(yīng)用程序的權(quán)限時(shí),則遠(yuǎn)程代理結(jié)束與本地代理之間的通信。
步驟S205,如果權(quán)限檢査通過,在Windows服務(wù)器端10運(yùn)行相應(yīng)的應(yīng) 用程序,在運(yùn)行應(yīng)用程序的過程中,需要同時(shí)完成HookDll的注入等工作;
步驟S206,應(yīng)用程序運(yùn)行,HookDll模塊12生效,將捕獲的GDI調(diào)用發(fā) 送給遠(yuǎn)程代理模塊11 ,再由遠(yuǎn)程代理模塊U將GDI調(diào)用轉(zhuǎn)發(fā)給相應(yīng)的本地代 理模塊21;
步驟S207,本地代理模塊21從遠(yuǎn)程代理模塊11接收到GDI調(diào)用后,將 其轉(zhuǎn)換成X請求,Limix客戶端20將啟動(dòng)應(yīng)用程序的窗口;
步驟S208, Linux客戶端20將針對遠(yuǎn)程應(yīng)用的鼠標(biāo)/鍵盤等操作,通過本 地代理模塊21轉(zhuǎn)發(fā)給遠(yuǎn)程代理模塊11;
步驟S209,遠(yuǎn)程代理模塊11從本地代理模塊21接收到這些鼠標(biāo)/鍵盤操
ii作后,將會(huì)轉(zhuǎn)發(fā)給對應(yīng)的應(yīng)用程序,即輸入設(shè)備驅(qū)動(dòng)模塊16進(jìn)行處理;
步驟S210,當(dāng)Linux客戶端20希望結(jié)束Windows應(yīng)用程序時(shí),發(fā)送消息 給遠(yuǎn)程代理模塊11 ,遠(yuǎn)程代理模塊11根據(jù)消息將會(huì)通知Windows應(yīng)用程序結(jié) 束。
另外,RDP瘦客戶協(xié)議的實(shí)現(xiàn)可以參考ISBN為7-301-01044-3/TP.38的 《Microsoft Windows NT Server4.0,終端服務(wù)器技術(shù)參考》,THINC協(xié)議的實(shí) 現(xiàn)可以參考論文"Implementing Remote Display on Commodity Operating Systems",而關(guān)于Windows操作系統(tǒng)的圖形顯示部分,可以參考ISBN為 0-13-086985-6 的《Windows Graphics Programming Win32 GDI and DirectDraw》《
進(jìn)一歩地,通過RDP瘦客戶協(xié)議和本發(fā)明的比較可知,本發(fā)明與RDP瘦 客戶協(xié)議的目的基本一致,都是為了通過Linux客戶端訪問Windows服務(wù)器 端的應(yīng)用程序。不過RDP瘦客戶協(xié)議技術(shù)方案不能保證真正的無縫訪問,即 使可以做到窗口裁剪,使得用戶看起來是無縫訪問應(yīng)用程序的。而本發(fā)明解決 了這一問題,做到了真正的無縫訪問。
RDP瘦客戶協(xié)議和THINC協(xié)議實(shí)際上都是基于重寫Graphics Device Driver的,通過實(shí)現(xiàn)虛擬圖形驅(qū)動(dòng),將窗口顯示部分變成位圖,而不是實(shí)際顯 示在屏幕上,并通過對位圖的緩存、壓縮、合并等優(yōu)化措施發(fā)送給客戶端顯示。
本發(fā)明基于對應(yīng)用程序的GDI調(diào)用進(jìn)行轉(zhuǎn)發(fā),在Linux客戶端將這些調(diào) 用轉(zhuǎn)換成本地的圖形操作處理。本發(fā)明減少了對位圖進(jìn)行的各種操作,因此實(shí) 際上減少了 Windows服務(wù)器端的計(jì)算和存儲(chǔ)開銷。
本發(fā)明提出的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法在適當(dāng) 增加網(wǎng)絡(luò)傳輸數(shù)據(jù)量的情況下,能夠節(jié)約Windows服務(wù)器端的計(jì)算和存儲(chǔ)資 源,從而提升了服務(wù)器的容量。
當(dāng)然,本發(fā)朋還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情 況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但 這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1、一種Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法,其特征在于,該方法包括步驟一,Windows服務(wù)器端截獲Windows應(yīng)用程序所需的顯示調(diào)用,并發(fā)送給Linux客戶端;步驟二,所述Linux客戶端將從所述Windows服務(wù)器端接收的所述顯示調(diào)用轉(zhuǎn)換為本地繪圖操作,調(diào)用所述本地繪圖操作完成實(shí)際的繪制操作。
2、 根據(jù)權(quán)利要求1所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的 方法,其特征在于,所述步驟一中,進(jìn)一步包括通過遠(yuǎn)程代理對所述Windows服務(wù)器端的用戶帳號(hào)及應(yīng)用程序權(quán)限信息 進(jìn)行維護(hù)的步驟。
3、 根據(jù)權(quán)利要求2所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的 方法,其特征在于,所述步驟一中,進(jìn)一步包括當(dāng)所述Linux客戶端通過本地代理要?jiǎng)?chuàng)建遠(yuǎn)程應(yīng)用時(shí),所述遠(yuǎn)程代理接收 由所述本地代理發(fā)送的用戶帳號(hào)信息及應(yīng)用程序信息,并對所述Windows應(yīng) 用程序進(jìn)行權(quán)限檢査,當(dāng)權(quán)限檢查通過后,在所述服務(wù)器端啟動(dòng)相應(yīng)的應(yīng)用程 序的步驟。
4、 根據(jù)權(quán)利要求3所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的 方法,其特征在于,所述步驟一中,進(jìn)一步包括當(dāng)所述應(yīng)用程序權(quán)限檢查失敗后,所述遠(yuǎn)程代理結(jié)束與所述本地代理之間 通信的步驟;或當(dāng)所述Windows服務(wù)器端的用戶帳號(hào)不具備啟動(dòng)相應(yīng)的應(yīng)用程序的權(quán)限 時(shí),所述遠(yuǎn)程代理結(jié)束與所述本地代理之間通信的步驟。
5、 根據(jù)權(quán)利要求3或4所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程 序的方法,其特征在于,所述步驟一中,進(jìn)一步包括-當(dāng)所述Windows應(yīng)用程序啟動(dòng)后,所述遠(yuǎn)程代理將通過Hook Dll截獲的 所述顯示調(diào)用發(fā)送至所述本地代理的步驟。
6、 根據(jù)權(quán)利要5所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方 法,其特征在于,所述步驟二中,進(jìn)一步包括所述本地代理將所述顯示調(diào)用轉(zhuǎn)換成所述Linux客戶端的本地繪圖操作,在所述Linux客戶端繪制所述Windows應(yīng)用程序的窗口,并將用戶針對所述 遠(yuǎn)程應(yīng)用的鼠標(biāo)/鍵盤操作發(fā)送至所述遠(yuǎn)程代理,由所述遠(yuǎn)程代理將所述鼠標(biāo)/ 鍵盤操作送至對應(yīng)的應(yīng)用程序進(jìn)行處理的步驟。
7、 根據(jù)權(quán)利要求3、 4或5所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng) 用程序的方法,其特征在于,所述步驟二中,進(jìn)一步包括當(dāng)所述Linux客戶端希望結(jié)束所述Windows應(yīng)用程序時(shí),通過所述本地 代理向所述遠(yuǎn)程代理發(fā)送消息,所述遠(yuǎn)程代理根據(jù)所述消息通知所述Windows 應(yīng)用程序結(jié)束的步驟。
8、 一種Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的裝置,其特征在于, 該裝置包括Windows服務(wù)器端,用于截獲Windows應(yīng)用程序所需的顯示調(diào)用; Linux客戶端,用于從所述Windows服務(wù)器端接收所述顯示調(diào)用,將所述 顯示調(diào)用轉(zhuǎn)換為本地繪圖操作,根據(jù)所述本地繪圖操作完成實(shí)際的繪制操作。
9、 根據(jù)權(quán)利要求8所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的 裝置,其特征在于,所述Windows服務(wù)器端包括HookDll模塊,用于捕獲所述顯示調(diào)用;遠(yuǎn)程代理模塊,連接所述HookDll模塊,用于從所述HookDll模塊接收 所述顯示調(diào)用,并將所述顯示調(diào)用發(fā)送給所述Linux客戶端;虛擬顯示驅(qū)動(dòng)模塊,用于維護(hù)與所述本地繪圖操作相應(yīng)的數(shù)據(jù)結(jié)構(gòu); 輸入設(shè)備驅(qū)動(dòng)模塊,連接所述遠(yuǎn)程代理模塊,用于對所述Windows服務(wù) 器端的輸入設(shè)備驅(qū)動(dòng)進(jìn)行修改,以對從所述遠(yuǎn)程代理接收的鼠標(biāo)/鍵盤事件進(jìn) 行處理。
10、 根據(jù)權(quán)利要求8所述的Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序 的裝置,其特征在于,所述Linux客戶端包括-本地代理模塊,用于將所述遠(yuǎn)程代理模塊發(fā)送的所述顯示調(diào)用轉(zhuǎn)換為本地 繪制操作;顯示設(shè)備驅(qū)動(dòng)模塊,用于在所述本地代理模塊的調(diào)用下,根據(jù)所述本地繪 圖操作完成實(shí)際的繪制操作;輸入設(shè)備驅(qū)動(dòng)模塊,用于將用戶的針對所述遠(yuǎn)程應(yīng)用的鼠標(biāo)/鍵盤操作送 至對應(yīng)的應(yīng)用程序處理。
全文摘要
本發(fā)明公開了一種Linux終端無縫訪問遠(yuǎn)程Windows應(yīng)用程序的方法及其裝置,其中該裝置包括Windows服務(wù)器端,用于截獲Windows應(yīng)用程序所需的顯示調(diào)用;Linux客戶端,用于從所述Windows服務(wù)器端接收所述顯示調(diào)用,將所述顯示調(diào)用轉(zhuǎn)換為本地繪圖操作,根據(jù)所述本地繪圖操作完成實(shí)際的繪制操作。本發(fā)明實(shí)現(xiàn)了無縫訪問遠(yuǎn)程Windows應(yīng)用程序。
文檔編號(hào)G06F9/46GK101676875SQ200910163708
公開日2010年3月24日 申請日期2009年8月14日 優(yōu)先權(quán)日2008年8月15日
發(fā)明者楊 張, 琦 楊, 旭 程, 管雪濤 申請人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司