Collaborative VNC (v.0.5.1)
What is Collaborative VNC?
Collaborative VNC lets you share a computer desktop between multiple
people, who can each be all the way across the Internet from each other.
Everyone can see everyone else's mouse pointers, and you can take turns
controlling the desktop, so that everyone is not clicking on everyone
else's toes all the time.
It should be noted that Collaborative VNC is really only a prototype
at this stage. Be aware that this code is not production quality.
I'm looking forward to rewriting it at a patch to some more portable vnc
implementation. But for now, if you find problems with it, please let me know!
Where is Collaborative VNC?
My current patch to VNC is here.
It should be applied to TightVNC
for unix/linux version 1.2.9 with the command `patch -p1 < ../vnc-collaborate5.1.diff` from within the un-tgz'ed vnc_unixsrc directory, and with the diff in the same directory that the vnc_unixsrc is in.
What does Collaborative VNC do?
Multiple Mouse Pointers (Sort of)
With Collaborative VNC, when multiple people connect to one desktop, you
can see everyone else's mouse pointer. As of version 0.5, each user's mouse
pointer (besides your own) is labelled with that user's name. Everyone
can move their own pointer independently from the others, although only
one mouse at a time can actually interact with the desktop. Every member
(every instance of vncviewer) connected to any given desktop (Xvnc
session) gets a different colored mouse pointer. The first 8 members each
get unique colors, and then it begins recycling.
(If you think you can
come up with a larger, better set of colors that are easily
distinguishable, please tell me!)
Floor Passing: Controlling Who's in Control
With Collaborative VNC, you have control over who "has the floor" (is
controlling the desktop). You can set it up in many ways, ranging from a
setup where everyone can take control whenever they want, to a setup where
whoever has control keeps it until they decide to give it up.
- At most, one member at a time "has the floor" (is in control) on
any given Xvnc session. Only the member who has the floor can control
this session. The first member to join an empty session is given the floor.
- A member who does not have the floor can try to take the floor by
clicking the mouse in the session. If the member who has the floor has
been inactive for a few seconds (this duration is configurable), the new
member is given the floor.
- Members can also request the floor by pressing the F9 key, or
pressing the F8 key to get the vncviewer menu, and then choosing their own
name from the member list.
- The member who has the floor can pass control directly to another
member at any time by pressing the F8 key to get the vncviewer menu,
and then choosing the name of the person they want to have control.
- The member who has the floor can also manually release it at any time
by pressing the F9 key, or pressing the F8 key to get the vncviewer menu,
and then choosing their own name in the member list. Once released,
anyone can take control just by clicking.
- You can also designate one member the 'master'. The master has
the ability to take control, or give control, to or from anyone at any
The Member List in the Menu
When you pop up the VNC menu by pressing the F8 key, the bottom part of
this menu contains a list of the names of all the members of this desktop.
Clicking on a name gives that person control.
- When you have the floor, you can give control to anyone.
- When you do not have control, you can only try to give control to
yourself. The other name-menu-items are disabled in this case.
- If you are the master, you can give control to anyone, whether or not
you have the floor.
- Xvnc -collaborate command-line flag. (Can also be passed
When you run a vnc server in -collaborate mode, all of the following functional changes apply.
- Xvnc -mergekeyboards flag. (Can also be passed to
With this flag enabled, every member connected to an Xvnc session
can send keystrokes all of the time. Without this flag, only the member who is currently in control of the session can send keystrokes.
- Xvnc -master flag. (Can also be passed to vncserver)
With this flag set, the first member to join the session becomes the
master. The master is always able to take control of the session, in case
someone else with a high -autoreleasedelay is not good at sharing. This
is especially useful when combined with -noautorelease.
- vncviewer -name NAME option.
This tells the viewer to
tell the server what your name is, so that all of the other members can
see the name of who has the floor. This defaults to the username of the
user running vncviewer. If there is already a member with this name
connected, Collaborative VNC appends a dash and a unique number to the end
of your name.
- vncviewer -autoreleasedelay SECONDS option.
When you have
the floor, and another member is trying to take control, your vncviewer
will automatically release the floor if you have not pressed a key,
released a key, or had any mouse buttons down for this number of seconds.
2 is the default.
- vncviewer -noautorelease option.
release the floor. (See previous point.)
- vncviewer -nopopups flag.
When a member takes control of
the session, vncviewer will normally show you the name of the newly
in-control member for 2 seconds in the top-left corner of the session.
This flag tells the viewer not to do this.
- vncserver -exec 'command' option.
This lets you start up the Xvnc session and immediately start
your command (mozilla, for example). Then when the command finishes, the Xvnc session is automatically closed down for you.
- All components of this patched version of Vnc will cooperate with
unpatched versions of TightVNC that use rfb protocol 3.3 or earlier
(only tested with 1.2.8 and 1.2.9 on linux and windows)
Why would I want to use it?
It makes shared vnc sessions work much more smoothly. And being able to see everyone else's mouse pointers can add a much needed
method of spatial communication. It can also be nice for demos where you want one person in control, and everyone else to be able to
point as they ask questions. (Use vncviewer -autoreleasedelay -1 to
disable automatically giving up control.)
I also think it could be useful as a way to work remotely with others. Try opening up one Xvnc session per application you're sharing.
Maximize each the shared application to make it fill its Xvnc desktop. Now each person can be in control of a different app, and you
can easily pass control of the apps around. So two people could take turns editing, and watching/pointing in an emacs window, while
someone else looks up info in a mozilla window. Then someone could take control of the mozilla window, copy some text from it, take
control of the emacs window and copy it into there...
These are lots of things I still want to do with this project. And I'm
doing them! With various speeds and intensities. This list is much
shorter than it was in January... But I'd like to grow this list with new
ideas so I can keep choosing the coolest and most fun tasks to work on.
- add a command-line switch to turn off labelling of mouse pointers
- add color to the member menu items
- add the ability for the master to designate other members as masters
(think operators in IRC)
- let members choose their own colors
- make keystrokes request the floor, similar to how mouse clicks do now
- continue tweaking the look and feel of the menu
- more code cleanup
- patch the java viewer to work with Collaborative VNC
- patch the windows viewer to work with Collaborative VNC
Feel free to email me with questions, comments, feature requests, etc. at
levittben at yahoo com. (Please excuse the low-tech and inaccurate