novnc / noVNC

VNC client web application
https://novnc.com
Other
11.48k stars 2.28k forks source link

WebSockets support in QEMU #13

Closed primalmotion closed 11 years ago

primalmotion commented 14 years ago

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 :)

kanaka commented 14 years ago

The tightPNG encoding has been implemented in the tight-png branch of this repository: git://git.iksaif.net/qemu.git (you'll have to configure and build it).

The built-in WebSockets support in QEMU is still pending. I have implemented WebSockets support in my fork of libvncserver (http://github.com/kanaka/libvncserver).

kanaka commented 14 years ago

This is not really a bug or feature in noVNC. I'll twitter at @noVNC when there is WebSockets support in QEMU.

mmuman commented 13 years ago

Has WebSocket been implemented for QEMU yet and not upstreamed or just not done at all ? Would be nice to be able to replace the Java applet in: http://dev.haiku-os.org/browser/haiku/trunk/3rdparty/mmu_man/onlinedemo/haiku.php

It looks not too bad here (when you don't move too much around) with wsproxy in Safari: http://revolf.free.fr/beos/shots/shot_qemu_haiku_onlinedemo_novnc_001.png

kanaka commented 13 years ago

Unfortunately, not yet. I would love to get around to this. There is the start of an implementation here http://repo.or.cz/w/qemu/aliguori-queue.git/shortlog/refs/heads/vncws that Anthony Liguori started while we were at LinuxCon.

I also have a patch with some minor fixes to the handshaking here: https://gist.github.com/665575

The WebSockets handshake works, but the new buffering model that aliguori introduced as part of the WebSockets work doesn't work with the existing VNC data buffers.

andrein commented 12 years ago

Any updates on this issue?

kanaka commented 12 years ago

I would love to work on this but haven't had time (my real job keeps me quite busy). The first part of the project would be to add direct binary data type support to websockify/websock.js because Anthony Liguori indicated to me that he probably doesn't want to base64 encoding (and thus the older protocol either) in QEMU.

I welcome help :-). Note that I want to continue supporting the older protocol and base64 encoding too in websockify/websock.js (E.g. iOS only supports the Hixie-76 protocol, and web-socket-js probably won't support binary even though it supports the rest of HyBi).

kanaka commented 12 years ago

I just pushed a change to noVNC/websockify which detects if the browser has typed array support (and more importantly if the WebSocket object has binaryType/typedarray support) and sends/receives the binary data directly without base64 encode/decode. This will make the implementation in QEMU and servers much easier.

Note that noVNC indicates support for binary by sending two sub-protocols in preference order: binary, base64. The server should respond with the first one that it supports and respond with that in the handshake response. This indicates to noVNC that the server supports binary and that typed arrays should be sent received over the WebSocket API and that no base64 encode/decode should be done

thardeck commented 11 years ago

I have started to work on an implementation of the new Websockets protocol for QEMU.

thardeck commented 11 years ago

I have sent my patch to the QEMU mailing list: https://lists.nongnu.org/archive/html/qemu-devel/2013-01/msg03712.html

thardeck commented 11 years ago

The websocket patch was accepted upstream so this bug could be closed.

kanaka commented 11 years ago

Here is the commit: http://git.qemu.org/?p=qemu.git;a=commit;h=7536ee4bc3da7e9b7fdadba5ba6ade63eaace430

@thardeck, thanks for the hard work on this. I'm glad it finally came to fruition.

thardeck commented 11 years ago

I have created a patch to add the missing TLS encryption for my implementation. It isn't upstream [yet] but if someone likes to test it: https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg04603.html

thardeck commented 11 years ago

The TLS encryption support was also accepted upstream http://git.qemu.org/?p=qemu.git;a=commit;h=0057a0d59006d00c294de0b012d9a290eb1a5c80 so the feature set should be now complete for most use cases.

ewiger commented 9 years ago

I would be happy to integrate this into my picostack project. How does the command line option for KVM looks like? Or do I simply have to compile from source with "--enable-vnc-ws" option??

ok this is what I found. I have ot try it out.

This patch adds basic Websocket Protocol version 13 - RFC 6455 - support to QEMU VNC. Binary encoding support on the client side is mandatory.

Because of the GnuTLS requirement the Websockets implementation is optional (--enable-vnc-ws).

To activate Websocket support the VNC option "websocket"is used, for example "-vnc :0,websocket". The listen port for Websocket connections is (5700 + display) so if QEMU VNC is started with :0 the Websocket port would be 5700. As an alternative the Websocket port could be manually specified by using ",websocket=" instead.

Parts of the implementation base on Anthony Liguori's QEMU Websocket patch from 2010 and on Joel Martin's LibVNC Websocket implementation.