Virtual Network Computing (VNC)

Probably the most useful Open Source tool of all (ok, maybe SSH is more useful), VNC was originally created by the AT&T Research facility in Cambridge and is a remote display protocol that, despite being rather inefficient (something modern forks try to improve upon, but certainly still less than RDP), has the advantage of being very simple and require only very light clients (the Windows binary is contained within just 230KB, and Java implementations can be downloaded on-the-fly from any browser).

Mac OS X includes a VNC server (check the Sharing preference pane, it’s part of Apple Remote Desktop).

Mac Screen Sharing

Apple uses a variant of the VNC protocol for its own screen sharing solution, and this article has some useful tweaks to the Leopard built-in client that I’m reproducing here for safekeeping:

Displaying a Bonjour browser:

defaults write com.apple.ScreenSharing ShowBonjourBrowser_Debug 1

Displaying additional controls: (pre-10.5.5)

defaults write com.apple.ScreenSharing \
'NSToolbar Configuration ControlToolbar' -dict-add 'TB Item Identifiers' \
'(Scale,Control,Share,Curtain,Capture,FullScreen,GetClipboard,SendClipboard,Quality)'

In 10.5.5, Apple decided to get stingy again, so this workaround became necessary. Which is kind of ridiculous.

When Snow Leopard rolled around, they broke even more of the UI, but it’s still possible to set display quality via a preference (via):

defaults write com.apple.ScreenSharing controlObserveQuality n

…gives you:

  1. black and white
  2. grayscale
  3. 8-bit color
  4. 16-bit color
  5. full color

Resources:

Not all of these are related to VNC, but VNC has been used for things like multi-machine (i.e., having two different machines side by side and move the mouse/keyboard across machines) for a long time now and is better understood by most people, so I’ve lumped everything here:

Category Date Link Notes
Servers May’12 VirtualGL Finely tuned OpenGL encapsulation (with server-side hardware acceleration).
Older Schnitz Remote Remote for reverse connections.
Alkit VNC allows single-window sharing.
RealVNC the original (and still the reference) implementation. Also has the most efficient client (old homepage)
Vine Server native Mac OS X server, supporting multiple simultaneous remote sessions
Ultra VNC Single-Click Server a nice, customizable Windows server that helpdesk staff can e-mail to someone in need of help.
J2ME VNC for MIDP / J2ME
MetaVNC an intriguing way to share single windows
Reinventing the wheel Apr’11 noVNC A decent, secure websockets/canvas client.
Apr’10 Ajax VNC A “Clientless” VNC solution implemented with canvas and, regrettably, a Java server.
Clients (Mac) Dec’08 JollysFastVNC The best client out there in terms of speed and international keyboard support.
VNCDimension partial support for non-US keyboards (but no dead keys) and very fast graphical updates.
Chicken of the VNC No international key support, works OK with the built-in Mac OS X server.
VNCThing read my blog entry for more (and a link to the source code).
Workspot modified VNC Tried it once.
Clients (Other) Jun’12 pyvnc A ctypes client that uses libvnc directly.
May’09 vnc2dl a client that renders on a DisplayLink device.
Older FlashVNC a Flash viewer
MochaVNC for Palm and Pocket PC, supports post-3.3 procotol versions and has a built-in SSH tunneler.
PVNC for the PlayStation Portable (has some ARM code, if I remember correctly)
DirectVNC framebuffer-based clients.
fbvnc
Palm VNC with server-side scaling extensions
Enhanced Full-Screen Clients
SSHVNC a combined client
Tools Aug’11 Gitso A reverse VNC connection tool for support purposes.
Older VNC Snapshot can take screenshots of a section of the display and save them in JPEG format
VNCj a nice way to serve Java AWT applications
Vnc2swf a Flash recording tool, which now has an editing tool available.
LibVNCServer also has a client library
perlVNC fear.
PyVNC – a Python VNC client
VNC Reflector
Multi-Machine (a2b) Older SynergyKM Synergy packaged as a preference pane, as it should. Verified working in 2008 under Leopard.
Synergy a platform-agnostic package focused on precisely this application – QuickSynergy is a very nice repackaging.
osx2x does it all, Mac to X or VNC
osx2vnc
x2vnc X to VNC
win2vnc Windows to VNC, not multi-monitor friendly, (another version which is multi-monitor friendly)
x2x the original concept, for completeness

Tricks:

My current (minimalist) Xvnc startup file for Linux, so that I remember that unsetting SESSION_MANAGER is the right way to avoid complaints from gnome-session:

$ cat .vnc/xstartup
#!/bin/sh
unset SESSION_MANAGER
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
gnome-session &

See Also

PythonRaspberry PiMy Deep, Dark SecretGo (lang)
How to install Ubuntu on your Android phoneDesktop Streaming to the Raspberry Pi using VLC and H.264ElementaryJava
ExpanDrive 3RDPAn ARM On Four CylindersThe X Window System
The Switcher's Application GuideHow to Switch to the MacA Big Slice of Raspberry PiVirtual Network Computing (VNC)
The Week That Wasn'tThreeScoring 2011's predictionsI swapped my MacBook for an iPad+Linode
Myriad's Alien Dalvik streamed to an iPadSnow LeopardJedi Mind Tricks2011 is upon us
So, what of the netbooks?Today In The Geek PlaneThin ThoughtsBonjour
JPEGLeopardOn The CuspCitrix To Bring Millions of Windows Apps To iPhone
On Apple, Netbooks, and My Line of WorkVMware/FusionTale of a NetbookSSH tunneling setup scripts
Foxes on fire, and other entertainmentDisplayLinkSSHDisplayLink's new VGC 4.3 supports Vista Aero 3D
Hear The Leopard Spots RoarRadar Bugs I'd Like To SeeRandom Desktop ShotVNC and Monitor Antics
JollysFastVNCMy Five Wishes for Leopardxrdp is now in DebianWebVNC - VNC on your iPhone
PalmFlashThe Minimalist Remote Access KitSchnitz Remote
Things I Can't Get Around To Do, Part OneMore Heads Than OneScreenRecyclerTrips Down Memory Lane
NXBacklogMac OS XXubuntu - The Mouse With Glitz
MacOn Mark's un-Switching, and LemmingsYou Know You're Becoming a Luddite When...Thin Pushback
Network ComputingQuentin Stafford-FraserThe Razor-Thin Mobile ComputerApple
The Tele Teaching ToolVMware ServerPoor Man's Screen SharingPlaceless GTD
Idle ModeFinally, a Reason to Look at VistaWindowsThe Hours of Service Pack 2
A Few Notes on the PlayStation PortableRacing Towards The New YearPlayStation PortableMiscellaneous Oddities
QuickSynergyNokia 770 WishesMinor UpdatesPlug Me In
Dances With VMwareChilling OutNetMeetingCould We Have Real Collaboration, Please?
Take TwoRandom Thoughts On Nomadic LifeRandom Thresholds Of FeasibilityMiscellaneous Remote Geekery
Five Random Annoying Things That I've Had To Put Up With This WeekRemotely PossibleHeat, TV and Data RetentionSomewhat Hazy
Cooling OffMice and CakeStrange DayBy Special Request
Last Round Of Relaxation3G On Your MacCoding Challenge: Build the best VNC client for the MacTen Open Source Projects Worth Keeping Track Of
Mini MadnessWorkshop DayInterstitial ProgressFive Bits Of News
Little GripesToday Has Got To Be A Wierd DayThe Top Five Mac OS X Applications I Can't Live WithoutThings You Should Try
14The Usability WarsLink Mode (Again):MIDP
Too Many Machines?Dual Burn-InContext SwitchingPocket PC/VNCViewer
Don't Try This At HomePraise the MacJ2MEWork In Progress