noVNC: HTML5 VNC Client
noVNC is a VNC client implemented using HTML5 technologies, specifically Canvas and WebSockets (supports 'wss://' encryption). noVNC is licensed under the LGPLv3.
Special thanks to Sentry Data Systems for sponsoring ongoing development of this project (and for employing me).
Notable commits, announcements and news are posted to @noVNC
Running in Chrome before and after connecting:
See more screenshots here.
Projects/Companies using noVNC
HTML5 Canvas: Except for Internet Explorer, most browsers have had Canvas support for quite some time. Internet Explorer 9 will have Canvas support (finally).
HTML5 WebSockets: For browsers that do not have builtin WebSockets support, the project includes web-socket-js, a WebSockets emulator using Adobe Flash.
I maintain a more detailed list of browser compatibility here.
Unless you are using a VNC server with support for WebSockets connections (only my fork of libvncserver currently), you need to use a WebSockets to TCP socket proxy. There is a python proxy included ('websockify'). One advantage of using the proxy is that it has builtin support for SSL/TLS encryption (i.e. "wss://").
There a few reasons why a proxy is required:
WebSockets is not a pure socket protocol. There is an initial HTTP like handshake to allow easy hand-off by web servers and allow some origin policy exchange. Also, each WebSockets frame begins with 0 ('\x00') and ends with 255 ('\xff').
Use the launch script to start a mini-webserver and the WebSockets proxy (websockify). The
--vncoption is used to specify the location of a running VNC server:
./utils/launch.sh --vnc localhost:5901
Point your browser to the cut-and-paste URL that is output by the launch script. Enter a password if the VNC server has one configured. Hit the Connect button and enjoy!