guacamole 源码_guacamole插件开发
Guacamole手冊:Guacamole手冊
Guacamole是什么?
Apache Guacamole是一個無客戶端的遠程桌面網關。
它支持VNC,RDP和SSH等標準協議。
我們稱之為無客戶端,因為不需要插件或客戶端軟件。
感謝HTML5,一旦Guacamole安裝在服務器上,您訪問桌面所需的只是一個Web瀏覽器。
為什么要用Guacamole?
隨時隨地訪問PC
保持桌面在云端
免費、開源
建立在文檔齊全的API之上
商業支持
Guacamole架構
Guacamole架構下,發起一次遠程桌面請求的流程是:
用戶使用Web瀏覽器,訪問Guacamole客戶端應用,使用Guacamole協議請求一個遠程桌面
Guacamole客戶端應用將Guacamole協議轉發給guacd服務端
guacd服務端解釋Guacamole協議,轉換成遠程桌面支持的協議后,請求到真實的遠程桌面
Guacamole協議
Guacamole協議,是一種用于遠程顯示渲染和事件傳輸的協議。Guacamole協議不同于遠程桌面協議(VNC或RDP等),它建立在遠程桌面協議之上,旨在提供跨平臺的遠程桌面功能,不依賴于特定的桌面環境。由一個中間件,將Guacamole協議翻譯成具體的遠程桌面協議。當新增一個遠程桌面協議時,只需要在中間件上加入新的翻譯轉換策略,而不需要修改客戶端應用。
guacd
guacd是Guacamole的核心,它動態加載對遠程桌面協議(稱為“客戶端插件”)的支持,并根據從Web應用程序收到的指令將它們連接到遠程桌面嗎,也就是上文提到的翻譯中間件。
guacd是一個守護進程,它與Guacamole一起安裝并在后臺運行,偵聽來自Web應用程序的TCP連接。 guacd也不了解任何特定的遠程桌面協議,而是實現了足夠的Guacamole協議來確定需要加載哪些協議支持以及必須將哪些參數傳遞給它。 加載客戶端插件后,它將獨立于guacd運行,并完全控制自身與Web應用程序之間的通信,直到客戶端插件終止。
guacd和所有客戶端插件依賴于一個公共庫libguac,它使通過Guacamole協議的通信更容易,更抽象。
Gucamole客戶端應用
用戶實際使用的Guacamole部分是Web應用程序。Web應用程序不實現任何遠程桌面協議。 它依賴于guacd,只需要實現一個漂亮的Web界面和身份驗證層。
安裝guacd
官方提供兩種安裝方式,一種是下載源碼,手動編譯安裝;一種是docker鏡像。
官方文檔上由詳細說明:
編譯安裝
docker鏡像
guacamole插件開發
Guacamole的插件可以:
提供備用身份驗證方法和連接/用戶數據源。
提供將在Guacamole執行身份驗證和隧道連接等任務時通知的事件偵聽器。
通過額外的CSS文件和靜態資源個性化Guacamole。
通過提供將自動加載的JavaScript來擴展Guacamole的JavaScript代碼。
添加其他顯示語言,或更改現有語言的翻譯字符串。
guacamole插件加載方式
Guacamole客戶端應用是與插件是分離部署的,客戶端應用在啟動階段,動態加載插件。因此需要理解插件的加載方式,才能開發出符合自身需求的插件。
因為應用與插件是分離部署的,所以Guacamole約定了一個配置路徑,用于存放資源文件,其中就包括插件。客戶端應用在啟動時,到配置路徑下查找是否有插件,如果有,則加載到應用中。
guacamole配置路徑
guacamole配置路徑稱為GUACAMOLE_HOME,默認情況下位于/etc/guacamole。所有配置文件,插件等都存放在此目錄中。
GUACAMOLE_HOME的結構是嚴格定義的,由以下可選文件組成:
guacamole.properties
Guacamole的主配置文件。此文件中的屬性指示Guacamole將如何連接到guacd,并可能配置已安裝的身份驗證擴展的行為。
logback.xml
Guacamole使用的日志框架是Logback。默認情況下,Guacamole只將日志輸出到控制臺。可以通過提供該文件自定義日志輸出行為。
extensions/
插件存放目錄,Guacamole會在啟動時自動加載此目錄中的所有.jar文件。
lib/
插件依賴jar包存放目錄。如果插件依賴第三方jar,例如數據庫驅動程序,就可以放在這個目錄下。
插件格式
插件是一個.jar文件,jar中包含類、資源和guacamole擴展清單。其中,擴展清單是插件的描述文件,需要放在jar文件的根目錄下。Guacamole客戶端應用啟動時,讀取擴展清單,來進行動態加載插件。
擴展清單
擴展清單是一個json文件,文件名約定為guac-mainfest.json。如果你和我一樣,基于maven開發,那么根據maven對資源文件的約定,擴展清單需要放在resouces文件夾下。擴展清單是一個配置文件,配置項如下:
屬性
是否必填
描述
guacamoleVersion
是
插件依賴的guacamole版本號,如果插件不依賴于特定版本,則可以使用*,將繞過版本兼容性檢查。
name
是
易于閱讀、理解的名字
namespace
是
插件的唯一標識。如果插件中包含靜態資源,那么這些資源將以該命名空間作為上下文根。
authProviders
否
一組限定類名,這些類是AuthenticationProvider的子類,插件中提供的用于身份驗證的類。
listeners
否
一組限定類名,這些類是Listener的子類,插件中提供的用于監聽事件的類。
js
否
一組JavaScript文件路徑,路徑必須是相對路徑。
css
否
一組CSS文件路徑,路徑必須是相對路徑。
html
否
一組HTML文件路徑,路徑必須是相對路徑。
translations
是
一組翻譯文件路徑,路徑必須是相對路徑。此處聲明的翻譯文件將自動添加到可用語言中,如果翻譯文件提供Guacamole中已存在的語言,則其字符串將覆蓋現有翻譯的字符串
resources
否
一個對象,其中每個屬性名稱是Web資源文件的名稱,每個值都是該資源的mimetype,所有路徑都必須是相對路徑。此處聲明的Web資源將在app/ext/NAMESPACE/PATH中提供給應用程序,其中NAMESPACE是namespace屬性的值,PATH是聲明的Web資源文件名。
最簡單的擴展清單1
2
3
4
5{
"guacamoleVersion" : "0.9.14",
"name" : "My Extension",
"namespace" : "my-extension"
}
擴展清單1
2
3
4
5
6
7
8
9
10
11
12{
"guacamoleVersion" : "0.9.14",
"name" : "My Extension",
"namespace" : "my-extension",
"css" : [ "theme.css" ],
"html" : [ "loginDisclaimer.html" ],
"resources" : {
"images/logo.png" : "image/png",
"images/cancel.png" : "image/png",
"images/delete.png" : "image/png"
}
}
總結
以上是生活随笔為你收集整理的guacamole 源码_guacamole插件开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【简●解】[SDOI2008] Sue的
- 下一篇: 【python 淘宝爬虫】淘宝信誉分抓取