top | item 8166388

Guacamole – HTML5 Clientless Remote Desktop

383 points| tux1968 | 11 years ago |guac-dev.org | reply

78 comments

order
[+] jitl|11 years ago|reply
I run Guacamole on my home network as an RDP client to my Windows and Linux boxes. It's a fantastic piece of software. It beats VMC widely in terms of speed, and RDP narrowly when used across the internet. I run guacd on my home server and use that to access my interior network from any computer. It's stable, consumes low memory, and works nicely over HTTPS with apache reverse-proxying the Java webapp. A+ amaze your friends type of software. I am a huge guacamole fanboy.

Edit: I used a Linux VM on my home windows box over guacamole from a Chromebook as my primary mobile computer for 6 months. Browsing in Firefox on my remote VM was always faster than browsing the web locally on the Chromebook. If only it worked well on tablets...

[+] tekacs|11 years ago|reply
> and RDP narrowly

I don't suppose[1] it supports RDP 8's new ability to play video on a remote desktop by streaming the media across and decoding it locally (works in the Win/Mac official clients).

I was amazed and dumbfounded the first time a YouTube video played in a remote session with perfectly in-sync audio and video and instant response to mouse clicks and now find it hard to go back...

[1]: Can't test this myself until I get back to a desktop computer (this is from a phone).

[+] Thaxll|11 years ago|reply
I highly doubt it's better than an optimized protocol like RDP...
[+] desaintmartin|11 years ago|reply
There already have been a few nice VNC web clients around for a few years, like NoVNC (http://kanaka.github.io/noVNC/, python server-side, used in Openstack and others). Unfortunately, there's no magic: you need your VNC/RDP server, then your "clientless server" (proxy socket<->websocket or alike), then your web server to host the "clientless" client.

It's becoming to be interesting when your VNC/RDP client directly supports websocket, eliminating the need of a proxy and only use a STATIC web server to host client. Wait, it's built-in for qemu since 1.4! http://git.qemu.org/?p=qemu.git;a=commit;h=0057a0d59006d00c2...

[+] jitl|11 years ago|reply
Guacamole and NoVNC are very different conceptually. NoVNC is a client for the VNC protocol that runs in your browser, and a dumb TCP-to-Websockets proxy script that you run on your server if your VNC software doesn't already support Websockets in addition to TCP. Your browser and the server still communicate using the VNC protocol, and you'll get performance no better than TCP VNC (bad performance over the internet, in my opinion).

Guacamole has much better performance. Your browser and the guacamole server communicate using a custom, better-performing protocol (http://guac-dev.org/doc/gug/protocol-reference.html). While guacamole can still connect to your server with VNC, it also supports RDP, which is also faster. Even when using Guacamole as a proxy for VNC if your guacd and VNC servers are on LAN together, because the guacamole protocol works much better over high latency connections than VNC does.

Edit: also, Guacamole doesn't use Websockets, which makes it much easier to proxy with your standard HTTP proxy software like apache, which didn't get a Websockets proxy module until 2.4 (Ubuntu 12.04 is 2.2).

[+] renang|11 years ago|reply
Note that 1.4 introduced websockets support, VNC support was present much long ago. You would need a proxy tho, like the one NoVNC provides.

I am still waiting better support for Clipboard on QEMU. :/

Currently using NoVNC as a client. Works really well. Keyboard needs more love.

[+] jackweirdy|11 years ago|reply
Do you mean websockets or webrtc? This is a use case for the latter :)
[+] makmanalp|11 years ago|reply
Nomachine also has been doing this for a while, and NX is really darn smooth on spotty connections: https://www.nomachine.com/node/2473

I do love that this is open source though. Someone will probably add NX support soon. Sound support also looks pretty impressive.

[+] iandanforth|11 years ago|reply
I've found remote desktop setup immensely frustrating in the past. Every six months or so I'll think "Wouldn't it be cool if it I could have an Ubuntu AMI on EC2 I could boot and remote desktop into?" Then it's hours of googling and config settings editing. Hopefully someone will point me to the easy way I've been missing?
[+] jitl|11 years ago|reply
Unfortunately RDP server on Linux is a bit tricky to set up, and involved some amount of compiling for me. On the other hand, I think `x11vnc` is pretty easy to get started with. I followed this guide, and it worked for me no problem: http://askubuntu.com/questions/229989/how-to-setup-x11vnc-to...

My guacamole server then connects to x11vnc so I still get RDP-like performance across the internet.

Edit: you'll also want to make an Upstart job for x11vnc so that it starts on boot, and restarts if (when) it dies. You can just copy any of the basic upstart jobs in /etc/init.d/*.conf and investigate. You also may want to make x11vnc start after your X server: http://upstart.ubuntu.com/cookbook/#run-a-job-before-another...

There is a lot of fiddly business :/

[+] skizm|11 years ago|reply
Chrome remote desktop works with linux/mac/win now. Not sure if there is some headless way to set it up on EC2 and/or linux but I've got it running on my box at home and it works great.
[+] egeozcan|11 years ago|reply
Having an HTML5 client built-in doesn't mean that it's "clientless" but it's still impressive. MIT license doesn't hurt, too.
[+] jitl|11 years ago|reply
It's "clientless" as in you don't have to install any software on the machine you want to connect from. No need to fiddle with RDP software on your parent's computers, or worry about access control restrictions from a locked-down corporate network. As far as permissions go, if you can browse the internet on a computer, you can remote control your servers with Guacamole.
[+] fulafel|11 years ago|reply
I see a lot of these front pages with "major bummer, this video can't be played with your setup". Feels like the era of Flash all over again.
[+] Fastidious|11 years ago|reply
I don't understand, It seems HTML5 video to me. What kind of setup do you have?
[+] _random_|11 years ago|reply
Not every browser supports the latest version of the HTML5 plug-in.
[+] joeperks|11 years ago|reply
I have used Guacamole as a solution to supporting remote desktop when the client location's firewall(s) allow nothing except port 80 and 443. Worked perfectly allowing users to connect to multiple desktops with no installation what so ever. Simply the perfect tool for what we needed and setup is a breeze once you familiarize yourself with the documentation.

Definitely keeping this in my mental toolbox!

[+] leishulang|11 years ago|reply
Looks promising! Could be use to control bittorrent server from work. Maybe call it pluginless instead? Clientless kinda makes me imagine it's pure js/html5 app but actually it uses a server as client.
[+] nemo1618|11 years ago|reply
you can already control rtorrent via ssh, though admittedly it has a steeper learning curve.
[+] maho|11 years ago|reply
Can I use this for a setup where multiple users look at the same "screen"? I combed through the documentation and am attempted to say no...
[+] jitl|11 years ago|reply
That sort of setup need to be handled by your VNC or RDP server itself. Guacamole will play nice with whatever your target server is doing in that regard.
[+] ibisum|11 years ago|reply
I wonder if this can be used to set up a multi-headed workstation environment, where each user has their own desktop (Linux) on the same large, megalithic server? I have a machine with 128gigs of RAM and 1TB of SSD .. this seems like the perfect situation where I can give a desktop to 3 or 4 users on the same machine. Anyone know how well that works with Guacamole yet?
[+] tekacs|11 years ago|reply
Mmph, have done this with XenServer (can just self-built OSS) and just standard RDP clients for the short while I had access to a machine about that powerful. That worked beautifully and gave me (yes, just me :P) a bunch of very practical isolated environments on which I concurrently ran various heavy workloads (and one as my 'standard desktop' on which I watched YouTube videos whilst waiting for things :P).

I only use Linux/OSX for local machines, but RDP was substantially more responsive than any VNC server I could get my hands on (including RealVNC Enterprise).

Layering Guacamole shouldn't cause any real trouble beyond that - the dashboard needs to run on a separate Unix machine and so can be pointed at all those desktops just fine once you set up the network interfaces.

[+] rev_bird|11 years ago|reply
It doesn't seem like a particularly elegant solution, but with that much memory, you could almost certainly carve out 4 VMs, each running a separate guac instance, right? Getting to them might be trickier, though...
[+] codezero|11 years ago|reply
The Github repo for the client says it's 50% Java, can someone clarify, is this an HTML5 client, or are there other things happening?
[+] jitl|11 years ago|reply
Guacamole is a Java program. It's basically a proxy between RDP/VLC and HTML5. Guacd (the java bits) connect to an RDP or VNC server on your behalf, and then you interact with the remote machine through guacd. Here's a simple text diagram

  [Windows RDP server] <--RDP protocol--> [linux Guacamole server] <--HTTP or Websockets--> [HTML5 client in your browser]
[+] sequence7|11 years ago|reply
From the github readme:

  > guacamole-client is used to build the subprojects that  make up Guacamole, and
  > to provide a common central repository. Each project contained here is
  > completely independent of guacamole-client and can be built separately, though
  > the others may have to be built first. If all projects are built using
  > guacamole-client, Maven will take care of the proper build order.
My reading of this is that the client repo also contains the server, which is written in java
[+] ivansavz|11 years ago|reply
Could this be used on a Mac?

I would like to have remote/shared access to Xcode + iOS dev stack... Or is there some other way to get that?

[+] philbarr|11 years ago|reply
I use TeamViewer for that, AND Chrome Remote Desktop. I've found that I need both so that if TeamViewer doesn't work for some reason I've still got Chrome available to go in and fix it...

Hardly the best setup but at least it's free. Will be checking this out to see if it fits my reqs.

[+] annnnd|11 years ago|reply
Just wondering: what features of HTML does Guacamole use to make this HTML5-only? Is it video tag? Canvas?
[+] blutoot|11 years ago|reply
I'm thinking of the implication of something awesome like this. Hopefully in the long-run it will boost the likes of light LTE-enabled Chromebooks, at least for tech professionals. That of course requires high-speed LTE infrastructure and ISP backbones.
[+] cbhl|11 years ago|reply
Eh, Chrome Remote Desktop and Fusionlabs' Chrome RDP both already allow Chromebooks to be used for remote desktops (the latter speaking actual RDP), although both are closed-source.
[+] jimmcslim|11 years ago|reply
I see that there are a number of folks around with Docker containers for Guacamole, but it seems there might be nice for there to be an 'official' container for this project.
[+] Yardlink|11 years ago|reply
This could enable some very low development cost cloudwashing of legacy desktop software!
[+] chromaton|11 years ago|reply
This was my thinking as well. Or to allow formerly plugin-requiring apps to run on the server. Any ideas for how to lock this down on the server side so that it can only run ONE application?
[+] xorcist|11 years ago|reply
I use something called Spark View for this. How does Guacamole compare?
[+] vnz|11 years ago|reply
Can this be used with custom credential providers through RDP?
[+] unicornporn|11 years ago|reply
I'd like to see some OS X binaries or a homebrew keg!