Guacamole初步实践
杭州数梦工场科技有限公司冷星子0202
Guacamole 文档密级:
目录
1.
Guacamole简介 ................................................................................................................ 3 1.1. 1.2. 1.3.
网页应用程序(Web Application) ......................................................................... 3 Guacamole API ....................................................................................................... 3 实作与架构 .............................................................................................................. 3 1.3.1. Guacamole 通讯协议(protocol) ................................................................ 4 1.3.2. guacd ............................................................................................................. 5 1.3.3. 网页应用程序(Web Application) ................................................................ 5
2. Guacamole安装 ................................................................................................................ 5
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.
获取Guacamole...................................................................................................... 5 安装tomcat ............................................................................................................. 5 安装依赖包 .............................................................................................................. 6 安装Guacamole Serve ........................................................................................... 6 安装Guacamole Client ........................................................................................... 8 配置Guacamole...................................................................................................... 9 配置远程桌面服务器.............................................................................................. 10
杭州数梦工场科技有限公司
www.dtdream.com
第2页, 共11页
Guacamole 文档密级:
1. Guacamole简介
Guacamole 是一个以 HTML5 为基础的网页应用程序(web application),使用者可以在浏览器中通过这个网页应用程序并配合远程桌面的传输协议(例如 VNC 或 RDP)来操控远程的电脑。
除了网页应用程序之外,Guacamole 也是一个专案名称,这个专案的内容就是发展一套 API 提供给 Guacamole 网页应用程序使用,而这个 API 亦可用于其他类似的应用程序或服务。
1.1. 网页应用程序(Web Application)
一般谈到 Guacamole 一词,通常是指以 Guacamole API 为基础所发展出来的网页应用程序,而这个网页应用程序事实上是远程操控系统中的一环,Guacamole 配合整个系统即可建立一个支持各种协议的远程桌面 gateway。
由于 Guacamole 只使用到 HTML5 与一些其他的标准,让 Guacamole 在 client 端只需要新的浏览器,即可通过网络操控远程电脑的桌面。
在以前 Guacamole 是一个单纯的 HTML5 VNC client,而在更之前的版本,它还只是一个由 JavaScript 写成的 telnet client,称为 RealMint,但现在的 Guacamole 已经是完全不同的东西了,目前它的架构大幅成长后,已经涵盖各种远程桌面的协议,亦可同时操控多台电脑,非常实用,甚至 Guacamole 的开发者也是使用它来在远程的电脑做开发。
1.2. 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 所提供的功能,这样可以省去非常多开发上的时间。
1.3. 实作与架构
杭州数梦工场科技有限公司
www.dtdream.com
第3页, 共11页
Guacamole 文档密级:
事实上 Guacamole 并不是一个单纯的网页应用程序,它是由好几个部份组合而成的架构,许多功能都是由一些比较低阶的组件所提供的。
1.3.1. Guacamole 通讯协议(protocol)
Guacamole 网页应用程序本身并不支持任何远程桌面的通讯协议,当然也不支持 VNC 或 RDP 等,它本身只有支持自己的 Guacamole 传输协议,这个协议包含远程画面的绘制(remote display rendering)与事件(event)的传递,然而一个包含这两种功能的协议事实上就跟一般的远程桌面协议有同等的功能,只是 Guacamole 协议在设计理念上跟一般的远程桌面协议有些不同,Guacamole 的目标是希望可以相容于各种桌面环境。
Guacamole 中实作了各种远程桌面协议中的功能,并且加入一些特定的远程桌面协议支持(例如 RDP 与 VNC 等),而一般的远程桌面协议与 Guacamole 之间则是通过一个 middle layer 来转换,实作这个转换的程序实际上就是撰写一个远程桌面的 client,只不过将原本显示在本机的画面通过 Guacamole 协议传送到远程。
杭州数梦工场科技有限公司
www.dtdream.com
第4页, 共11页
Guacamole 文档密级:
1.3.2. 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 传输协议。
1.3.3. 网页应用程序(Web Application)
在 Guacamole 架构中跟使用者最接近的就是网页应用程序的部份,就像上面所提过的,这个网页应用程序并不包含任何远程桌面协议的支持,它只是一个前端的使用者介面,实作基本的图形介面与使用者认证而已,真正的远程桌面操控都是靠著 guacd 来处理。
目前在伺服器端的网页应用程序是以 Java 来实作,但是其实也可以使用其他语言,毕竟 Guacamole 本质上是一个 API,所以它也希望可以支持不同的语言。
2. Guacamole安装
2.1. 获取Guacamole
http://guac-dev.org/releases
目前官网最新版本为0.9.7,下载guacamole-server-0.9.7.tar.gz和guacamole-0.9.7.war两个包。
2.2. 安装tomcat
本地liunx版本如下:
root@Guacamole:/home/yl# hostnamectl Static hostname: Guacamole Icon name: computer-vm Chassis: vm
Boot ID: f0aae3c432554ed499d14883f282eddb Virtualization: vmware
Operating System: Ubuntu 14.04.2 LTS Kernel: Linux 3.16.0-37-generic Architecture: x86_64
杭州数梦工场科技有限公司
www.dtdream.com
第5页, 共11页
Guacamole 文档密级:
Guacamole需要Tomcat 7.0.37及以上版本,本地环境中安装的版本为Tomcat 7.0.52,目前仅通过apt-get安装的tomcat可以和Guacamole war包成功配合使用。
2.3. 安装依赖包
$apt-get install libcairo2-dev libpng12-dev libossp-uuid-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev
依赖包的说明参考:http://guac-dev.org/doc/gug/installing-guacamole.html
2.4. 安装Guacamole Serve
$ tar -xzf guacamole-server-0.9.7.tar.gz $ cd guacamole-server-0.9.7/
$ ./configure --with-init-dir=/etc/init.d
checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes ...
------------------------------------------------ guacamole-server version 0.9.7
------------------------------------------------
Library status:
freerdp ............. yes pango ............... yes libssh2 ............. yes libssl .............. yes libtelnet ........... yes libVNCServer ........ yes libvorbis ........... yes libpulse ............ yes
Protocol support:
RDP ....... yes SSH ....... yes Telnet .... yes VNC ....... yes
Init scripts: /etc/init.d
Type \"make\" to compile guacamole-server.
杭州数梦工场科技有限公司
www.dtdream.com
第6页, 共11页
Guacamole 文档密级:
$ make
Making all in src/libguac make[1]: Entering directory `/home/zhz/guacamole/guacamole-server/src/libguac' ...
make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server/src/protocols/vnc'
make[1]: Entering directory `/home/zhz/guacamole/guacamole-server' make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server' # make install
Making install in src/libguac make[1]: Entering directory `/home/zhz/guacamole/guacamole-server/src/libguac' make[2]: Entering directory `/home/zhz/guacamole/guacamole-server/src/libguac' ...
---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib
If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages.
---------------------------------------------------------------------- make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/home/zhz/guacamole/guacamole-server/src/protocols/vnc' make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server/src/protocols/vnc'
make[1]: Entering directory `/home/zhz/guacamole/guacamole-server' make[2]: Entering directory `/home/zhz/guacamole/guacamole-server' make[2]: Nothing to be done for `install-exec-am'.
杭州数梦工场科技有限公司
www.dtdream.com
第7页, 共11页
Guacamole 文档密级: make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/home/zhz/guacamole/guacamole-server' make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server' # ldconfig Guacamole Server安装完毕了。
2.5. 安装Guacamole Client
guacamole-0.9.7.war为Guacamole Client,guacamole.properties和user-mapping.xml为Guacamole Client的两个重要配置文件。
Client配置如下:
该环境中tomcat为手工安装的,安装路径为/opt/tomcat8。
# mkdir /etc/guacamole
# mkdir /usr/share/tomcat7/.guacamole
将guacamole.properties和user-mapping.xml拷贝到/etc/guacamole目录下,
guacamole-0.9.7.war重命名为guacamole.war后拷贝到/var/lib/guacamole/目录下,目前不存在需要手工创建。
# ln -s /var/lib/guacamole/guacamole.war /var/lib/tomcat7/webapps
# ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat7/.guacamole/
配置完毕后重启tomcat服务并启动guacd服务
# /etc/init.d/tomcat7 restart Stopping Tomcat... OK Starting Tomcat... OK
# /etc/init.d/guacd start Starting guacd: SUCCESS
guacd[6229]: INFO: Guacamole proxy daemon (guacd) version 0.9.7 started
配置完毕后重启tomcat服务并启动guacd服务,然后浏览器中访问:http://ip:8080/guacamole/。
杭州数梦工场科技有限公司
www.dtdream.com
第8页, 共11页
Guacamole 文档密级:
至此Guacamole安装完毕。
2.6. 配置Guacamole
Guacamole的本地配置比较简单,只修改user-mapping.xml文件即可。
root#远程桌面登录用户名 123456#远程桌面登录密码 入 172.16.58.21 杭州数梦工场科技有限公司 www.dtdream.com 第9页, 共11页 Guacamole 文档密级: 22 root 123456 172.16.58.21 3389 root 123456 172.16.58.21 5901 root 123456
2.7. 配置远程桌面服务器
远程桌面服务器配置参考如下文档:
http://jingyan.baidu.com/article/8ebacdf0cdc64949f75cd555.html 安装完毕后修改如下文件:
$ vim ~/.vnc/xstartup #修改此文件,写入以下内容 #!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS startxfce4 &
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic &
更改后启动VNC Server,VNC使用的端口号为5900+X,X为下面冒号后面的1。
# vncserver
New 'VNC:1 (root)' desktop is VNC:1
Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/VNC:1.log
VNC Server启动后通过浏览器登陆Guacamole。
杭州数梦工场科技有限公司
www.dtdream.com
第10页, 共11页
Guacamole 文档密级:
Guacamole还可以配合Docker和数据库使用,更多功能参考官网http://guac-dev.org/
杭州数梦工场科技有限公司
www.dtdream.com
第11页, 共11页
因篇幅问题不能全部显示,请点此查看更多更全内容