Guacamole通过浏览器以网页远程控制电脑
Guacamole 是一个以 HTML5 为基础的网页应用程序(web application),使用者可以在浏览器中通过这个网页应用程序并配合远程桌面的传输协议(例如 VNC 或 RDP)来操控远程的电脑。
除了网页应用程序之外,Guacamole 也是一个专案名称,这个专案的内容就是发展一套 API 提供给 Guacamole 网页应用程序使用,而这个 API 亦可用于其他类似的应用程序或服务。
网页应用程序(Web Application)
一般谈到 Guacamole 一词,通常是指以 Guacamole API 为基础所发展出来的网页应用程序,而这个网页应用程序事实上是远程操控系统中的一环,Guacamole 配合整个系统即可建立一个支持各种协议的远程桌面 gateway。
由于 Guacamole 只使用到 HTML5 与一些其他的标准,让 Guacamole 在 client 端只需要新的浏览器,即可通过网络操控远程电脑的桌面。
在以前 Guacamole 是一个单纯的 HTML5 VNC client,而在更之前的版本,它还只是一个由 JavaScript 写成的 telnet client,称为 RealMint,但现在的 Guacamole 已经是完全不同的东西了,目前它的架构大幅成长后,已经涵盖各种远程桌面的协议,亦可同时操控多台电脑,非常实用,甚至 Guacamole 的开发者也是使用它来在远程的电脑做开发。
Guacamole API
Guacamole 专案将其所开发出来的 API 用于网页应用程序上,也就是上述的 Guacamole 网页应用程序,虽然这个应用程序是 Guacamole 最大的卖点之一,但是这个专案所发展的 API 也不容小觑,尤其是要将 HTML5 远程操控电脑的功能,整合至现有的应用程序或系统架构时,这样的 API 会是一个非常有用的工具。
Guacamole API 提供了一个以 JavaScript 为基础的通道(并非使用 WebSocket),让你可以很方便且有效率的做文字资料的串流(streaming),另外它也实做了一个支持 Guacamole 传输协议的 client,这个 client 可以接收经过通道传输的 Guacamole 串流资料,然后将远程电脑的画面呈现在浏览器中。
另外,这个 API 也提供跨浏览器的鼠标与键盘事件(events)、屏幕键盘与支持硬件加速 compositing 的 synchronized nestable layers。
一般有 HTML5 远程桌面需求的专案,可以直接使用 Guacamole API 所提供的功能,这样可以省去非常多开发上的时间。
实作与架构
事实上 Guacamole 并不是一个单纯的网页应用程序,它是由好几个部份组合而成的架构,许多功能都是由一些比较低阶的组件所提供的。
Guacamole 通讯协议(protocol)
Guacamole 网页应用程序本身并不支持任何远程桌面的通讯协议,当然也不支持 VNC 或 RDP 等,它本身只有支持自己的 Guacamole 传输协议,这个协议包含远程画面的绘制(remote display rendering)与事件(event)的传递,然而一个包含这两种功能的协议事实上就跟一般的远程桌面协议有同等的功能,只是 Guacamole 协议在设计理念上跟一般的远程桌面协议有些不同,Guacamole 的目标是希望可以相容于各种桌面环境。
Guacamole 中实作了各种远程桌面协议中的功能,并且加入一些特定的远程桌面协议支持(例如 RDP 与 VNC 等),而一般的远程桌面协议与 Guacamole 之间则是通过一个 middle layer 来转换,实作这个转换的程序实际上就是撰写一个远程桌面的 client,只不过将原本显示在本机的画面通过 Guacamole 协议传送到远程。
guacd
guacd 就是上述 middle layer 中负责转换的程序,这个程序是 Guacamole 最主要的核心,它可以动态载入各种不同的远程桌面协议支持(也称为 client plugin),并且使用这些协议依照网页应用程序所传回的指令,连线到远程被控制的电脑。
在技术层面上,guacd 是一个伴随 Guacamole 的 daemon process,它会在背景执行并且倾听来自于网页应用程序的 TCP 连线。这个 guacd 不直接支持任何远程桌面协议,而是只有支持基本的 Guacamole 协议,在需要的时候才去载入指定的远程桌面协议 client plugin。
当 guacd 载入 client plugin 之后,client plugin 会自己独立执行,并且全权控制所有与网页应用程序之间的连线,直到 client plugin 执行结束为止。
guacd 与所有的 client plugins 都会需要一个共同的 libguac 函式库,这个函式库可以让程序开发者更容易使用 Guacamole 传输协议。
网页应用程序(Web Application)
在 Guacamole 架构中跟使用者最接近的就是网页应用程序的部份,就像上面所提过的,这个网页应用程序并不包含任何远程桌面协议的支持,它只是一个前端的使用者介面,实作基本的图形介面与使用者认证而已,真正的远程桌面操控都是靠著 guacd 来处理。
目前在伺服器端的网页应用程序是以 Java 来实作,但是其实也可以使用其他语言,毕竟 Guacamole 本质上是一个 API,所以它也希望可以支持不同的语言。
This article addresses: http://www.iefans.net/guacamole-liulanqi-wangye-yuancheng-kongzhi-diannao/
Here is no comments yet by the time your rss reader get this, Do you want to be the first commentor? Hurry up