Giter Club home page Giter Club logo

novnc's Introduction

noVNC: HTML VNC Client Library and Application

Test Status Lint Status

Description

noVNC is both a HTML VNC client JavaScript library and an application built on top of that library. noVNC runs well in any modern browser including mobile browsers (iOS and Android).

Many companies, projects and products have integrated noVNC including OpenStack, OpenNebula, LibVNCServer, and ThinLinc. See the Projects and Companies wiki page for a more complete list with additional info and links.

Table of Contents

News/help/contact

The project website is found at novnc.com. Notable commits, announcements and news are posted to @noVNC.

If you are a noVNC developer/integrator/user (or want to be) please join the noVNC discussion group.

Bugs and feature requests can be submitted via github issues. If you have questions about using noVNC then please first use the discussion group. We also have a wiki with lots of helpful information.

If you are looking for a place to start contributing to noVNC, a good place to start would be the issues that are marked as "patchwelcome". Please check our contribution guide though.

If you want to show appreciation for noVNC you could donate to a great non- profits such as: Compassion International, SIL, Habitat for Humanity, Electronic Frontier Foundation, Against Malaria Foundation, Nothing But Nets, etc. Please tweet @noVNC if you do.

Features

  • Supports all modern browsers including mobile (iOS, Android)
  • Supported authentication methods: none, classical VNC, RealVNC's RSA-AES, Tight, VeNCrypt Plain, XVP, Apple's Diffie-Hellman, UltraVNC's MSLogonII
  • Supported VNC encodings: raw, copyrect, rre, hextile, tight, tightPNG, ZRLE, JPEG
  • Supports scaling, clipping and resizing the desktop
  • Local cursor rendering
  • Clipboard copy/paste with full Unicode support
  • Translations
  • Touch gestures for emulating common mouse actions
  • Licensed mainly under the MPL 2.0, see the license document for details

Screenshots

Running in Firefox before and after connecting:

ย 

See more screenshots here.

Browser Requirements

noVNC uses many modern web technologies so a formal requirement list is not available. However these are the minimum versions we are currently aware of:

  • Chrome 64, Firefox 79, Safari 13.4, Opera 51, Edge 79

Server Requirements

noVNC follows the standard VNC protocol, but unlike other VNC clients it does require WebSockets support. Many servers include support (e.g. x11vnc/libvncserver, QEMU, and MobileVNC), but for the others you need to use a WebSockets to TCP socket proxy. noVNC has a sister project websockify that provides a simple such proxy.

Quick Start

  • Use the novnc_proxy script to automatically download and start websockify, which includes a mini-webserver and the WebSockets proxy. The --vnc option is used to specify the location of a running VNC server:

    ./utils/novnc_proxy --vnc localhost:5901

  • If you don't need to expose the web server to public internet, you can bind to localhost:

    ./utils/novnc_proxy --vnc localhost:5901 --listen localhost:6081

  • Point your browser to the cut-and-paste URL that is output by the novnc_proxy script. Hit the Connect button, enter a password if the VNC server has one configured, and enjoy!

Installation from Snap Package

Running the command below will install the latest release of noVNC from Snap:

sudo snap install novnc

Running noVNC from Snap Directly

You can run the Snap-package installed novnc directly with, for example:

novnc --listen 6081 --vnc localhost:5901 # /snap/bin/novnc if /snap/bin is not in your PATH

If you want to use certificate files, due to standard Snap confinement restrictions you need to have them in the /home/<user>/snap/novnc/current/ directory. If your username is jsmith an example command would be:

novnc --listen 8443 --cert ~jsmith/snap/novnc/current/self.crt --key ~jsmith/snap/novnc/current/self.key --vnc ubuntu.example.com:5901

Running noVNC from Snap as a Service (Daemon)

The Snap package also has the capability to run a 'novnc' service which can be configured to listen on multiple ports connecting to multiple VNC servers (effectively a service runing multiple instances of novnc). Instructions (with example values):

List current services (out-of-box this will be blank):

sudo snap get novnc services
Key             Value
services.n6080  {...}
services.n6081  {...}

Create a new service that listens on port 6082 and connects to the VNC server running on port 5902 on localhost:

sudo snap set novnc services.n6082.listen=6082 services.n6082.vnc=localhost:5902

(Any services you define with 'snap set' will be automatically started) Note that the name of the service, 'n6082' in this example, can be anything as long as it doesn't start with a number or contain spaces/special characters.

View the configuration of the service just created:

sudo snap get novnc services.n6082
Key                    Value
services.n6082.listen  6082
services.n6082.vnc     localhost:5902

Disable a service (note that because of a limitation in Snap it's currently not possible to unset config variables, setting them to blank values is the way to disable a service):

sudo snap set novnc services.n6082.listen='' services.n6082.vnc=''

(Any services you set to blank with 'snap set' like this will be automatically stopped)

Verify that the service is disabled (blank values):

sudo snap get novnc services.n6082
Key                    Value
services.n6082.listen  
services.n6082.vnc

Integration and Deployment

Please see our other documents for how to integrate noVNC in your own software, or deploying the noVNC application in production environments:

  • Embedding - For the noVNC application
  • Library - For the noVNC JavaScript library

Authors/Contributors

See AUTHORS for a (full-ish) list of authors. If you're not on that list and you think you should be, feel free to send a PR to fix that.

  • Core team:

  • Previous core contributors:

  • Notable contributions:

    • UI and Icons : Pierre Ossman, Chris Gordon
    • Original Logo : Michael Sersen
    • tight encoding : Michael Tinglof (Mercuri.ca)
    • RealVNC RSA AES authentication : USTC Vlab Team
  • Included libraries:

    • base64 : Martijn Pieters (Digital Creations 2), Samuel Sieb (sieb.net)
    • DES : Dave Zimmerman (Widget Workshop), Jef Poskanzer (ACME Labs)
    • Pako : Vitaly Puzrin (https://github.com/nodeca/pako)

Do you want to be on this list? Check out our contribution guide and start hacking!

novnc's People

Contributors

afbjorklund avatar cendioniko avatar cendioossman avatar danielhb avatar directxman12 avatar jp-bennett avatar juanjodiaz avatar julien-f avatar kanaka avatar kassah avatar kosmasgiannis avatar koying avatar lhchavez avatar mas90 avatar moobyfr avatar nnn1590 avatar ossman avatar patrakov avatar pdlan avatar peterdavehello avatar quicklyfrozen avatar samhed avatar sleepsonthefloor avatar snorkeyg avatar soheilhy avatar tims-bsquare avatar tkedwards avatar vjohansen avatar wardf avatar wrouesnel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

novnc's Issues

"Invalid server initialization" when connecting to tightvncserver

I am trying to connect to the latest version of tightvncserver (2.0.2 Jul 8 2010) running on a Windows 2000 box. I have started noVNC via the launch.py script you provided. This is the output from the server:

6: got client connection from {myip}
6: forking handler process
6: using plain (not SSL) socket
6: using protocol version 76
6: connecting to: {tightvncserverip}:5903
6: handler exit: Client closed

In tightvncserver, I get the following messages:

[2052] 2010-12-17 07:58:25 @ No console user process id specified (system error: The requested resource is in use (error code 170))
[2052] 2010-12-17 07:58:25 @ The DesktopServerApplication dispatcher has failed with error: Anonymous pipe read() function failed (The pipe has been ended. (109))
[2236] 2010-12-17 07:58:25 @ No console user process id specified (system error: The system cannot find the file specified (error code 2))

I don't know if it makes a difference, but I'm also viewing the tightvncserver machine via RDP at the same time I'm trying to connect to it via noVNC.

Looking at the tightvncserver code, it seems it's dying because m_userProcessToken is equal to zero in the WTS::queryConsoleUserToken function. That's as far as I got with it.

Any ideas? Thanks for the great concept and implementation!

RDP support

Is this library compatible with VirtualBox's RDP Server? I'm not sure how'd I'd go about checking it, so that's why I'm asking here.

Regards
Kieran

noVNC connect to VNC display fails (python missing .partition() )

Im trying to get VNC display through noVNC proxy but no luck so far. Client browser is Chrome 5.0.375.125 on MacOSX. noVNC web interface loads ok but VNC connect fails. Here are the launch script log and browser javascript console log. Any ideas whats wrong? I can connect to this vnc display with other clients.

./utils/launch.sh --vnc funcman.active.ee:5900
Starting webserver on port 6080
Started webserver (pid: 29974)
Starting WebSockets proxy on port 6081
waiting for connection on port 6081
Started WebSockets proxy (pid: 29977)

Navigate to to this URL:

http://funcman.active.ee:6080/vnc.html?host=funcman.active.ee&port=6081

Press Ctrl-C to exit

192.168.1.69 - - [04/Aug/2010 20:40:25] "GET /vnc.html?host=funcman.active.ee&port=6081&logging=debug HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:25] "GET /include/plain.css HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:25] "GET /include/black.css HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:25] "GET /include/vnc.js HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:25] "GET /include/default_controls.js HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:25] "GET /include/util.js HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:26] "GET /include/base64.js HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:26] "GET /include/des.js HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:26] "GET /include/canvas.js HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:27] "GET /include/rfb.js HTTP/1.1" 200 -
192.168.1.69 - - [04/Aug/2010 20:40:29] code 404, message File not found
192.168.1.69 - - [04/Aug/2010 20:40:29] "GET /favicon.ico HTTP/1.1" 404 -
Got client connection from 192.168.1.69
using plain (not SSL) socket
Ignoring exception:
Traceback (most recent call last):
File "/opt/test/noVNC/utils/websocket.py", line 208, in start_server
csock = do_handshake(startsock)
File "/opt/test/noVNC/utils/websocket.py", line 132, in do_handshake
h = parse_handshake(handshake)
File "/opt/test/noVNC/utils/websocket.py", line 76, in parse_handshake
var, delim, val = line.partition(": ")
AttributeError: 'str' object has no attribute 'partition'

waiting for connection on port 6081

Javascript console:

Canvas.init
:6080/include/util.js:128Canvas supports imageData
:6080/include/util.js:128Using Canvas createImageData
:6080/include/util.js:128Prefering javascript operations
:6080/include/util.js:128Data URI scheme cursor supported
:6080/include/util.js:127<< Canvas.init
:6080/include/util.js:128Using native WebSockets
:6080/include/util.js:129New state 'loaded', was 'disconnected'. Msg: noVNC ready (using native WebSockets)
:6080/include/util.js:129New state 'connect', was 'loaded'.
:6080/include/util.js:128connecting to ws://funcman.active.ee:6081/
:6080/include/util.js:127>> WebSocket.onclose
:6080/include/util.js:129New state 'disconnected', was 'connect'. Msg: VNC disconnected
:6080/include/util.js:127<< WebSocket.onclose

Fail to connect with Opera 10.60 (Xtightvnc 1.3.9, Python 2.6.5)

Hi all.
This project looks cool, but it don't work for me. I am using Xtightvnc 1.3.9, Python 2.6.5, Opera 10.60.

Xtightvnc log:
19/06/10 15:22:27 rfbProcessClientProtocolVersion: client gone
19/06/10 15:22:27 Client 192.168.0.200 gone
19/06/10 15:22:27 Statistics:
19/06/10 15:22:27 framebuffer updates 0, rectangles 0, bytes 0

19/06/10 15:22:52 Got connection from client 192.168.0.200
19/06/10 15:22:52 (other clients 127.0.0.1)

wsproxy.py:

waiting for connection on port 8787

Got client connection from 127.0.0.1
using plain (not SSL) socket
b64encode=True
seq_num=True
Connecting to: localhost:5900

Traffic Legend:
} - Client receive
}. - Client receive partial
{ - Target receive

>  - Target send
>. - Target send partial
<  - Client send
<. - Client send partial

{<

When I add --record parameter, it make file with this content:
'>0:UkZCIDAwMy4wMDgK',

In browser is text "Starting VNC handshake" and nothing change anymore...

proxying websockets?

Hi,
I am looking for a way to add basic http authentication to noVNC. First I thought I would use a reverse proxy (a la nginx), but then realized it is impossible, because nginx speaks HTTP/1.0, which does not support websockets.

I see I can amend websocket.py (somewhere around SplitHTTPHandler), but I doubt it's the best solution, since websockify is not intending to be a full-fledged web server :)
Any suggestions how I can proxy websockets?
Thanks.

Unrecognized RFB version using TigerVNC

Playing around with noVNC i'm not able to connect to TigerVNC, giving the following error :

"reading version failed: not an RFB client?"

Using Xvnc TigerVNC 1.0.1 - built Mar 25 2010 18:01:18

Ruby proxy

Hey,

Interesting project. I've been looking for a web based VNC viewer to integrate into vboxweb_rb (http://github.com/KieranP/vboxweb_rb).

Any change of getting a ruby proxy for Ruby on Rails (or other framework) based websites?

Regards
Kieran

Having trouble connecting

Hello,
I'm having trouble connecting with your VNC client.
I am using tightvncserver. I have noVNC and it's dependencies installed. I am using dyndns to map the hostname lajik.dyndns.org:5956 to my machine. I am running Ubuntu 10.10 and attempting to log in with the latest Trunk of Minefield. I hope this would be all the info, please let me know if you need additional information. Thanks!

Here is the Console output...


sudo /home/msersen/Dropbox/Apps/kanaka-noVNC-bf5ee68/utils/launch.sh  --vnc LDPW:4 --web 5955 --proxy 5956
[sudo] password for msersen: 
Starting webserver on port 5955
Started webserver (pid: 10409)
Starting WebSockets proxy on port 5956
Waiting for connections on :5956
Started WebSockets proxy (pid: 10412)


Navigate to to this URL:

    http://LDPW:5955/vnc.html?host=LDPW&port=5956

Press Ctrl-C to exit


lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /vnc.html?logging=debug HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/plain.css HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/vnc.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/ui.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/black.css HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/util.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/webutil.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/base64.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/des.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/canvas.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/rfb.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/web-socket-js/swfobject.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/web-socket-js/FABridge.js HTTP/1.1" 200 -
lajik.dyndns.org - - [04/Jan/2011 12:33:00] "GET /include/web-socket-js/web_socket.js HTTP/1.1" 200 -
  1: got client connection from 192.168.1.16
  1: forking handler process
  1: Sending flash policy response
  1: No connection after handshake
  2: got client connection from 192.168.1.16
  2: forking handler process
  2: using plain (not SSL) socket
  2: using protocol version 76
  2: connecting to: LDPW:4
  2: handler exception: [Errno 111] Connection refused
  3: got client connection from 192.168.1.16
  3: forking handler process
  3: handler exception: [Errno 336265218] _ssl.c:339: error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib
  4: got client connection from 192.168.1.16
  4: forking handler process
  4: handler exception: [Errno 336265218] _ssl.c:339: error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib
  5: got client connection from 192.168.1.16
  5: forking handler process
  5: handler exception: [Errno 336265218] _ssl.c:339: error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib
**********************************************************************************
and here is the FireBug debug output...
**************************************************************************************
">> RFB.init_ws"
"connecting to wss://LDPW:5956/"
"<< RFB.init_ws"
">> WebSocket.onclose"
"New state 'failed', was 'connect'. Msg: Server disconnected"
"Clearing connect timer"
"<< WebSocket.onclose"
"New state 'failed', was 'failed'."
"New state 'connect', was 'failed'."
">> RFB.init_ws"
"connecting to wss://LDPW:5956/"
"<< RFB.init_ws"
">> WebSocket.onclose"
"New state 'failed', was 'connect'. Msg: Server disconnected"
"Clearing connect timer"
"<< WebSocket.onclose"
"New state 'failed', was 'failed'."

Middle button issues in Opera

In Opera 11 the middle button is not suppressed and results in the default browser action (loading a new tab at the contents of the paste buffer).

Of lesser concern, in Opera 10.60 the middle mouse button gets stuck. Probably the button up event is not being caught (or not firing).

Non-US keyboard layouts

A nice feature for me and all others with non-US keyboards is to add a keyboard layout option list and/or trying to auto detect locale settings from the browser.

Shared mode option

Add config option to enable/disabled shared mode.

Right now the option is just hard-coded to enabled.

vnc_auto.html not working?!

Hi,

I can make vnc.html work fine, I can even do vnc.html?host=localhost&port=8181, and all I need to do is click connect and it works. However, if I do vnc_auto.html?host=localhost&port=8181, I see a few packets go between the client and the proxy, but the client then times out.

For what it's worth, i'm using my own proxy here, but it works fine with vnc.html.

Is there any obvious way I can try to debug this problem? I can't understand why vnc.html work, but vnc_auto.html doesn't!

Tight PNG ?

Hello,

At first congratulate Kanaka for his work on novnc !

I'd like to run novnc with the encoder "tightpng", however, i can't find VNC server on windows with this encoder...

Do you know a VNC server (windows) with A "tightPNG encoder" ?

Thanks.

Certain data receive patterns cause rendering to fall behind

Certain patterns of data sent from a VNC server can cause noVNC to fall-behind (and if it falls too far behind the browser can hang).

The problem happens when noVNC receives a combination of partial framebufferUpdates and multiple framebufferUpdates in rapid succession.

The bug is that noVNC is never processing more than one framebufferUpdate message per onmessage event. If noVNC receives an incomplete framebufferUpdate and then receives the rest of the framebufferUpdate plus another complete framebufferUpdate, then it will fall permanently behind.

Problem with Safari

On Safari (4.0.5) on Snow Leopard

The connection succeeds for a few seconds. Performing any kind of interaction within the VNC session causes the following output on the client console.

This problem occurs in both encrypted (wss://) and non-encrypted (ws://) connections.

">> connect"
"RFB.host: 10.5.5.1"
">> init_ws"
"connecting to wss://10.5.5.1:10000/?b64encode&seq_num"
"[WebSocket] scheme: wss"
"<< init_ws"
"New state 'ProtocolVersion'."
"<< connect"
"[WebSocket] starting SSL/TLS"
">> WebSocket.onopen"
"New state 'ProtocolVersion'. Msg: Starting VNC handshake"
"<< WebSocket.onopen"
">> init_msg"
"RQ (12) 82,70,66,32,48,48,51,46,48,48,56,10"
"Server ProtocolVersion: RFB 003.008"
"New state 'Security'. Msg: Sent ProtocolVersion: RFB 003.008"
"<< init_msg"
">> init_msg"
"RQ (2) 1,1"
"New state 'Authentication'. Msg: Authenticating using scheme: 1"
"Security auth scheme: 1"
"New state 'SecurityResult'."
"<< init_msg"
">> init_msg"
"RQ (4) 0,0,0,0"
"New state 'ServerInitialisation'. Msg: Authentication OK"
"<< init_msg"
">> init_msg"
"RQ (67) 2,208,1,144,32,24,0,1,0,255,0,255,0,255,16,8,0,0,0,0,0,0,0,43,81,69,77,85,32,40,50,54,99,99,55,56,54,99,45,53,101,99,48,45,49,49,100,102,45,57,56,50,50,45,53,52,48,48,48,49,48,53,52,101,97,57,41"
"Screen size: 720x400"
"bpp: 32"
"depth: 24"
"big_endian: 0"
"true_color: 1"
">> init_canvas"
"<< init_canvas"
">> setPixelFormat"
"<< setPixelFormat"
">> setEncodings"
"<< setEncodings"
"New state 'normal'. Msg: Connected to: QEMU (26cc786c-5ec0-11df-9822-540001054ea9)"
"<< init_msg"
"sequence number mismatch RQ_seq_num:4, seq_num:6"
"Searching reorder list item 0, seq_num 8"
"Searching reorder list item 1, seq_num 13"
"Searching reorder list item 2, seq_num 14"
"Searching reorder list item 3, seq_num 23"
"Searching reorder list item 4, seq_num 24"
"Searching reorder list item 5, seq_num 16"
"Searching reorder list item 6, seq_num 17"
"Searching reorder list item 7, seq_num 18"
"Searching reorder list item 8, seq_num 6"
"New state 'failed'. Msg: Disconnected: illegal server message type undefined"
"RQ.slice(0,30):"
"sequence number mismatch RQ_seq_num:4, seq_num:7"
"Searching reorder list item 0, seq_num 8"
"Searching reorder list item 1, seq_num 13"
"Searching reorder list item 2, seq_num 14"
"Searching reorder list item 3, seq_num 23"
"Searching reorder list item 4, seq_num 24"
"Searching reorder list item 5, seq_num 16"
"Searching reorder list item 6, seq_num 17"
"Searching reorder list item 7, seq_num 18"
"Searching reorder list item 8, seq_num 6"
"Searching reorder list item 9, seq_num 7"
"Giving up!"
">> disconnect"
"New state 'closed'."
">> WebSocket.onclose"
"New state 'disconnected'. Msg: VNC disconnected"
"<< WebSocket.onclose"
"New state 'disconnected'. Msg: Disconnected"
"<< disconnect"

Consider encodings using zlib (zlib, tight, ZRLE)

Standard tight encoding and ZRLE will require zlib decompression in Javascript. This will probably be pretty slow (based on some initial testing), but having them as (non-default) options might be worthwhile in some cases.

ssl module missing for web.py and wsproxy.py on python2.5 and older

I'm trying to launch it on an old ubuntu:

$ cat /etc/issue
Ubuntu 8.10 \n \l

$ python --version
Python 2.5.2

$ ./utils/launch.sh --vnc localhost:5901
Traceback (most recent call last):
File "/home/eric/noVNC/utils/web.py", line 13, in
import ssl
ImportError: No module named ssl
Failed to start webserver

Maybe you could use python-openssl when ssl support is not available?

Disconnected: unsupported security types:

  • virtual machine running XP with TightVNC server (Ubuntu 64-bit + virtualbox).
  • when i click the connect button i get: "Disconnected: unsupported security types:"

Chrome log:
New state 'failed', was 'Security'. Msg: Disconnected: unsupported security types: :6080/include/util.js:130

Anyone?

Add WebSockets support to stunnel

stunnel does pretty much the same thing as wsproxy, but only for TLS/SSL. It would be very interesting to add WebSockets support.

Doesn't seem to like jquery

if I try to use jquery on the same page I get an error in the js console:

:4567/include/util.js:72Canvas exception: no getContext method
:4567/include/util.js:72New state 'fatal', was 'disconnected'. Msg: No working Canvas
:4567/include/ui.js:355Uncaught TypeError: Object # has no method 'setAttribute'
UI.updateState:4567/include/ui.js:355
RFB.updateState:4567/include/rfb.js:520
constructor:4567/include/rfb.js:246
RFB:4567/include/rfb.js:1623
UI.load:4567/include/ui.js:137
(anonymous function):4567/js/application.js:11
c.extend.ready:4567/js/jquery.js:26
L

Recent Webkit canvas rendering is buggy (i.e. chrome-59647)

I've noticed that using browser embeding some last release of webkit make noVNC to be incredibly slow, display is not refreshed, cursor have some trace, everything seems to be updated at state it was a t-1 etc..

I've tried with Chromium (last build) and Webkit (Safari Nightlies) and the result is the same.

It is mostly a bug in Webkit, but maybe not. I prefer to report it just in case

RFB 3.3 connection failure

NoVNC stops with message "Authenticating using scheme: 1" when try to connect to a vnc server with RFB 3.3 protocol without password.

Other information:

Browser: Chrome 7, Firefox 4 beta
VNC server: vncserver (without password)
NoVNC: encrypt on
Logs (debug mode):
New state 'disconnect', was 'normal'. Msg: Disconnecting
:6080/include/util.js:71New state 'disconnected', was 'disconnect'. Msg: VNC disconnected
:6080/include/util.js:71New state 'connect', was 'disconnected'.
:6080/include/util.js:71New state 'ProtocolVersion', was 'connect'. Msg: Starting VNC handshake
:6080/include/util.js:71New state 'Security', was 'ProtocolVersion'. Msg: Sent ProtocolVersion: 003.003
:6080/include/util.js:71New state 'Authentication', was 'Security'. Msg: Authenticating using scheme: 1
:6080/include/util.js:71New state 'SecurityResult', was 'Authentication'.

Return codes without -f

It looks as if error codes are not returned correctly when not using -f.

Console log:

[root@brawndo include]# ps -ef | grep ws
root 2302 15791 0 20:41 pts/1 00:00:00 grep ws
[root@brawndo include]# /var/www/html//noVNC/utils/wsproxy.py 4951 localhost:59510
[root@brawndo include]# echo $?
0
[root@brawndo include]# ps -ef | grep ws
root 2307 1 0 20:42 ? 00:00:00 /usr/local/bin/python /var/www/html//noVNC/utils/wsproxy.py 4951 localhost:59510
root 2309 15791 0 20:42 pts/1 00:00:00 grep ws
[root@brawndo include]# /var/www/html//noVNC/utils/wsproxy.py 4951 localhost:59510
[root@brawndo include]# echo $?
0
[root@brawndo include]# ps -ef | grep ws
root 2307 1 0 20:42 ? 00:00:00 /usr/local/bin/python /var/www/html//noVNC/utils/wsproxy.py 4951 localhost:59510
root 2317 15791 0 20:42 pts/1 00:00:00 grep ws
[root@brawndo include]# /var/www/html//noVNC/utils/wsproxy.py -f 4951 localhost:59510
Traceback (most recent call last):
File "/var/www/html//noVNC/utils/wsproxy.py", line 160, in
start_server()
File "/var/www/html/noVNC/utils/websocket.py", line 194, in start_server
lsock.bind((settings['listen_host'], settings['listen_port']))
File "/usr/local/lib/python2.7/socket.py", line 222, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
[root@brawndo include]# echo $?
1

Improves on UI

On plain.css:

   body {
     margin: 0px;
     padding: 0px;
   }
   #VNC_controls {
       overflow: hidden;
       white-space: nowrap;
   }
   #VNC_controls li {
       float: left;
       margin-right: 5px;
   }

On ui.js:

//    html += '<div id="VNC_controls">';
//    html += '  <ul>';
//    html += '    <li>Host: <input id="VNC_host"></li>';
//    html += '    <li>Port: <input id="VNC_port"></li>';
//    html += '    <li>Password: <input id="VNC_password"';
//    html += '        type="password"></li>';
//    html += '    <li><input id="VNC_connect_button" type="button"';
//    html += '        value="Loading" disabled></li>';
//    html += '  </ul>';
//    html += '</div>';
    html += '<div id="VNC_screen">';
    html += '  <div id="VNC_status_bar" class="VNC_status_bar" style="margin-top: 0px;">';
    html += '    <table border=0 width=100%><tr>';
    html += '      <td><div id="VNC_status">Loading</div></td>';
    html += '      <td width=1%>';
    html += '<div id="VNC_controls">';
    html += '  <ul>';
    html += '    <li><input id="VNC_host" placeholder="host"></li>';
    html += '    <li>:<input id="VNC_port" placeholder="port"></li>';
    html += '    <li><input id="VNC_password" type="password" placeholder="password"></li>';
//    html += '    <li><input id="VNC_connect_button" type="button" class="VNC_status_button"';
//    html += '        value="Loading" disabled></li>';
    html += '  </ul>';
    html += '</div>';
    html += '      </td>';
    html += '      <td width=1%><div class="VNC_buttons_right">';
    html += '         <input id="VNC_connect_button" type="button" class="VNC_status_button" value="Loading" disabled>';
    html += '      </td>';

Lack of support for OSX, Ubuntu Lucid built in remote-desktop versions

I know that OSX is a bastardisation of the spec, but i'm unsure about Ubuntu.

Ubuntu reports as "Invalid server version RFB 003.007", which as far as I know should be valid?
I haven't fully grok'd the code yet, so I'm unsure as to whats happening in the cases.

I've started my own implementation of a Canvas VNC client previously using a Ruby backend... there I tried to handle these cases by negotiating a fall back to an earlier version of the protocol, which was my interpretation of the spec.

Great project though - nice to see other people have picked up the same idea but gone further with it.

Running on a Mac

Hello,

I apologize if this is not the right place to submit this, but I've been trying to get noVNC working on my Mac mini for a couple days and would appreciate some help. I've followed the info the readme.md, and have tried it with the native Mac screen sharing (which is the Mac's VNC built-in server), and tried with VineServer; I keep getting 'connect timeout' errors. I added the logging=debug to the URL, but am not able to interpret the results in a useful way. Connect timeout seems straight forward enough, I just don't know why the connection is not happening.

What information am I missing, or should I provide to help troubleshoot this issue?

Thank you.

SteveO

websockify has a zombie problem

There doesn't appear to be anything in the python version of websockify that reaps zombie processes. Certainly it leaves a load in the process list when I run it up on Ubuntu.

It looks like the SIGCHLD signal has to be ignored completely:

signal.signal(signal.SIGCHLD, signal.SIG_IGN)

or there needs to be a reap loop in the do_SIGCHLD procedure using something like:

os.waitpid(-1, os.WNOHANG)

to replicate what the ignore does automatically.

HTH

NeilW

Scaling ability (was: small patch to handle CSS3 Zoom property of vnc div)

Hi,

By adding the following snippet to RFB.mouseButton and RFB.mouseMove, this allows to get correct mouse coordinate when the main #vnc div is scaled by CSS3 Zoom property :

mouseButton: function(x, y, down, bmask) {
    if (down) {
        RFB.mouse_buttonMask |= bmask;
    } else {
        RFB.mouse_buttonMask ^= bmask;
    }
    if ($(RFB.canvasID).style.zoom) {
        z = parseFloat($(RFB.canvasID).style.zoom) / 100;
        x = x * (1/z);
        y = y * (1/z);
    }
    RFB.mouse_arr = RFB.mouse_arr.concat( RFB.pointerEvent(x, y) );
    RFB.flushClient();
}

... 

mouseMove: function(x, y) {
    //Util.Debug('>> mouseMove ' + x + "," + y);
    if ($(RFB.canvasID).style.zoom)
    {
        z = parseFloat($(RFB.canvasID).style.zoom) / 100;
        x = x * (1/z);
        y = y * (1/z);
    }
    
    RFB.mouse_arr = RFB.mouse_arr.concat( RFB.pointerEvent(x, y) );
}

fail to connect to qemu using tightPNG (illegal basic compression)

fail to connect to qemu
Hi, I tried to connect to the vnc server of qemu like:
./qemu -boot d -cdrom ~/windowsXP.iso -m 100M -vnc :5
run noVNC like:
./utils/launch.sh --vnc 127.0.0.1:5905
browse the web:
http://ubuntu:6080/vnc.html?host=ubuntu&port=6081
But got the following error message:
"Illegal basic compression received, ctl: 80"

In fact, the problem isn't quite stable when using firefox, sometimes it will be stuck at
"Authentication OK"
OR
"Sent ProtocolVersion: 003.008"
When using Chrome, the result is always "Illegal basic compression received, ctl: 80"

Environment:
Ubuntu 10.10
firefox 3.6.13
chrome 8.0.552.224
qemu 0.13.0

p.s. Connecting to qemu works fine when using Vinagre

Thank you!

SSL connection doesn't work with native WebSocket of Safari

It fails to connect using handshake :
Handshake ['\x80|\x01\x03\x01\x00c\x00\x00\x00\x10\x00\x00/\x00\x00\x05\x00\x00\x04\x00\x005\x00\x00\n\x00\x00\t\x00\x00\x03\x00\x00\x08\x00\x00\x06\x00\x002\x00\x003\x00\x008\x00\x009\x00\x00\x16\x00\x00\x15\x00\x00\x14\x00\x00\x13\x00\x00\x12\x00\x00\x11\x00\x004\x00\x00:\x00\x00\x18\x00\x00\x1b\x00\x00\x1a\x00\x00\x17\x00\x00\x19\x00\x00\x01\x01\x00\x80\x02\x00\x80\x03\x00\x80\x04\x00\x80\x06\x00@\x07\x00\xc0\x0f!p\xd8\xf0\xb1u1\xe0|\x01\xca\x9c\xb7sK']

I've also try to check if handshake starts with \x80, but connection fails.

It works great on Chrome. Any idea ?

Missing data_multi.js file?

In trying to run the vnc_perf.html file, it complains of not being able to find data_multi.js. I've looked around and I can't find any such file. I can't find anything else that would provide things like VNC_frame_data_multi[]. Did this file not make it into the commit for vnc_perf.html?

can't handle servers that support multiple security mechanisms

the built-in ubuntu VNC server supports types 18,1 or 18,2 for security and your vnc.js code only looks at the first type (which in this case is 18, even though it will support 1 or 2 (depending on if a password is required). A quick fix in vnc.js fixes this but I'm too lazy to get git running, so here's the fix in the issue:

after you have the line:
types = RQ.shiftBytes(num_types);

add the line:
types = types.filter(function(x){if ((x==1) || (x==2)) { return true
; } else { return false;}});

Add support for VMWare extensions to RFB/VNC

VMWare implements some extensions to the protocol that would be interesting to support in noVNC. I'm unlikely to personally get around to this (and don't have access to a ESX server) but somebody might be interested in doing this.

Some relevant links:

http://mail.gnome.org/archives/gtk-vnc-list/2008-January/msg00005.html
http://wiki.multimedia.cx/index.php?title=VMware_Video
http://bluebear.org/projects/kodiak/repository/revisions/master/entry/src/com/bluebear/rfb/vnc.h

High CPU usage while refreshing lot of datas

When noVNC displays lot of informations, CPU reach 100%
for example tar -xzvf a_big_tar.tgz on a remote computer displays a lot a lines and navigator (currently Webkit) reach 100% CPU

I'm sure there are some performances improvments by dropping some refresh cycle or something.

"use strict" + Cappuccino + last version of Gecko = fail

"use strict" seems to force variables to be declared before use.
Cappuccino introduce a file-scoped system (if var toto is declared as is in file it is file-scoped, if it is just toto is global-scoped)

As these two mode are incompatibles, would you mind t remove "use strict" ?

Protocol mismatch base64 != sample

Using the version from the public git repo and a current chromium-browser, i can't get a successfull connection.

The javascript debug output is:

RFB.constructor
util.js:69>> Display.constructor
util.js:69User Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/11.04 Chromium/11.0.696.57 Chrome/11.0.696.57 Safari/534.24
util.js:69Browser: webkit 534.24
util.js:70Canvas supports imageData
util.js:70Using Canvas createImageData
util.js:70Prefering javascript operations
util.js:70Data URI scheme cursor supported
util.js:69<< Display.constructor
util.js:70Using native WebSockets
util.js:71New state 'loaded', was 'disconnected'. Msg: noVNC ready: native WebSockets, createImageData rendering
util.js:69<< RFB.constructor
util.js:71New state 'connect', was 'loaded'.
util.js:69>> RFB.connect
util.js:70connecting to ws://planetx:6080/
util.js:69<< RFB.connect
:6080Error during WebSocket handshake: protocol mismatch: base64 != sample
util.js:69>> WebSock.onclose
util.js:72New state 'failed', was 'connect'. Msg: Server disconnected
util.js:69Clearing connect timer
util.js:69<< WebSock.onclose
util.js:71New state 'failed', was 'failed'.

Output of the /utils/launch.sh is:

16: 127.0.0.1: Plain non-SSL (ws://) WebSocket connection (version 76)
16: connecting to: localhost:5900
16: 127.0.0.1: Client closed

This should be the relevant TCP/HTTP connection (captured with wireshark & "follow TCP stream"):

GET / HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: planetx:6080
Origin: http://planetx:6080
Sec-WebSocket-Protocol: base64
Sec-WebSocket-Key1: {3?9R(F345 0MH00[12DC
Sec-WebSocket-Key2: 3 V1F9MZ60E795wb5
2
Cookie: logging=debug; stylesheet=default; host=planetx; port=6080; password=; encrypt=false; true_color=true; cursor=false; shared=true; connectTimeout=2

.7...Xj,HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://planetx:6080
Sec-WebSocket-Location: ws://planetx:6080/
Sec-WebSocket-Protocol: sample

Hf4..mR...L.W&i.

WebSockets support in QEMU

I've red on an interview that you are working with QEMU team to make it support your client. Do you have any information about the progress of this ?

At this time I have to build a proxy for each virtual machine so each VM needs to port, it's VNC port and its VNC proxy port. I'd like to remove this :)

Single port binding

In the situation of having multiple vnc servers listening each to a different port (5900, 5901, ..., 5910) I'm wondering if it "woul"d be possible to tell noVNC to connect to a single port (wsproxy) like 80 or 443 (SSL) and redirect all communication to the right port ?
Something like a parameter ('connect', 'host:port').

That would be awesome !

Keyboard events bubble to browser in Opera 10.60

Opera has some oddities around keyboard event handling. One is that events aren't being stopped from bubbling up to the browser. I.e. hitting backspace causes the browser to go back, hitting '-' zooms out, etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.