I am replying to the list so others can join in...
oops, meant to do that...fixing it this time.
At 03:43 PM 6/4/2003 , Russ Lewis wrote: (snip)
Essentially, what I'm thinking of is something like the "multiwindow" option that both Cygwin and Exceed have; each X window is a different window in the host OS. But I want vnc multi-view and persistence as well.
I think the only limit to this will be that you will lose the ability to dynamically resize windows, due to the RFB protocol. Others can correct me if the RFB protocol does allow for desktop size changes. I know current implementations of RealVNC do not allow this, at least on the server side.
Resizing of windows is possible, I think. I see two possible implementations:
1) Common desktop
All windows share the same desktop, of a certain fixed space. But when you open a viewer session, each window is shown as a different window in the host OS, and (obviously) no desktop background is shown. When windows are moved or resized, this is reported to the server and reflected on every viewer; likewise, the ordering of windows is fixed. Thus, all viewers show all of the windows in the same relative orientation.
2) Multiple desktops
Each window has its own virtual desktop, which is of an arbirarily large size (say 5000x5000). Resizing & relocation of windows is reported to the server; however, the server only reports resizes (not relocates) to the various clients. Different clients can have different windows on top. One can approximate this by having many different vnc servers running at once, one for each application, but then the windows are not resizable and any popup windows show up in the same desktop as the original.
I prefer option (2), if I had a choice.
Basically, I'd like each step to be a multi-window server. So when I log in to view localhost:1, I want to have many many windows show up in my taskbar. For example, my current window might show up on my taskbar as: "vnc(localhost:1) vnc(personalComputer:1) Compose: Re: Window-per-window VNC"
This would certainly require a rewrite of VNC, and most likely some "extensions" to the RFB protocol.
Certainly.
Otherwise if your server platform is not running Xvnc, I do not believe this is practical with VNC. VNC would not be able to grab the image of an application that is "behind" other Application windows; at best it could send a portion of the screen. Another limitation of the RFB protocol (as I understand it) is that it can not change the size of the desktop dynamically, meaning even if you could share a single application you would not be able to resize that window as you can other application windows.
How do multi-window X servers do this? Don't they have many of the same problems as this idea?
Multi-window X-Servers allow the viewing and manipulation of individual windows by default. This includes the ability to position and resize windows from both the server side and the client side. As I understand it, the RFB protocol was designed to carry an entire display (a virtual Frame Buffer) over a network. I believe one of the assumptions it makes is that the dimensions of the session are static throughout the session. While it is possible to write applications that use the RFB protocol exclusively for I/O, the session is still treated as a statically defined frame buffer.
You may be able to get away with dedicating a display for each application, running without a Window Manager. If the application was opened (via a geometry switch) to fill the entire VNC display, this could achieve similar results to what you need. Again, it would not be resizable (I believe) and it would not necessarily be named as you describe (though you could configure the name when you define the display).
That is all I can think of for now. Others may have more clever suggestions.
I think that this concept is doable by implementing multiple servers & multiple clients in each application. Think of option (2) I proposed above. Each window can be viewed as its own vncserver image inside the larger session.
As you noted, RFB thinks of a complete vnc session as a virtual Frame Buffer. What if you had a different virtual Frame Buffer for each window? You define the size of the Frame Buffer to be 5000x5000 when the window is created theoretically, you can send RFB operations anywhere inside that frame buffer. You add a new RFB drawing primitive, called "active window," which defines the rectangle, somewhere on that virtual desktop, that holds the window. The clients determine the size of the window they show based on that primitive. They can (if they want) also choose to relocate the window based on that primitive. When the server is resizing or relocating the window, it sends a new "active window" primitive which moves the windows elsewhere in the virtual desktop. Clients must immediately resize the window if appropriate, and may or may not move the window as well. VNC then does totally standard drawing within the "active window" space; anything that the server does outside of that space can be ignored by the client.
Now, a VNC session would be made up of multiple of these virtual Frame Buffers. When a new client logs in, the server tells it how many virtual Frame Buffers are active and what their "active windows" are; the client creates the appropriate viewer windows. When a window is created or destroyed on the server, the server notifies all clients and they do the same.
The RFB protocol will have to change, but not hugely; simply, each operation will have to add a "destination Frame Buffer" value, to tell you which window is being updated. Likewise, "create window" and "remove window" operations would have to be added.
Anyhow, I haven't looked at the VNC source code, but it seems like this sort of thing would hopefully be doable without really hacking it up too much.
A cool thing to note about this is that the current functionality (all windows in a single Frame Buffer) is just a subset of the new design; you simply have an option added to the vncserver command that tells it to only use one Frame Buffer, and put all windows into it. The clients don't have to know the difference.
Thoughts, anyone? _______________________________________________ VNC-List mailing list [EMAIL PROTECTED] To remove yourself from the list visit: http://www.realvnc.com/mailman/listinfo/vnc-list
