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:
- black and white
- grayscale
- 8-bit color
- 16-bit color
- full color
Resources
Category | Link | Notes |
---|---|---|
Clients | arduinoVNC | A VNC client library for Arduino |
zohead/fbvnc | a patched VNC client for embedded systems |
|
Libraries | MicroPython RFB | An interesting library for embedded systems |
asyncvnc | An asyncio Python client library |
|
Other | pyvnc | A ctypes client that uses libvnc directly. |
Enhanced Full-Screen Clients | ||
Palm VNC | with server-side scaling extensions |
|
fbvnc | framebuffer-based client |
|
vnc2dl | a client that renders on a DisplayLink device |
|
DirectVNC | framebuffer-based client |
|
VNCj | a nice way to serve Java |
|
FlashVNC | a Flash viewer |
|
perlVNC | fear. |
|
MochaVNC | for Palm and Pocket PC, supports post-3.3 procotol versions and has a built-in SSH tunneler. |
|
Servers | J2ME VNC | for MIDP/J2ME |
MetaVNC | an intriguing way to share single windows |
|
Ultra VNC Single-Click Server | a nice, customizable Windows server that helpdesk staff could e-mail to someone in need of help back when that was acceptable behavior. |
|
Alkit VNC | allows single-window sharing |
|
RealVNC | the original (and still the reference) implementation. Also has the most efficient client |
|
Vine Server (formerly called OSXvnc) | native macOS server, supporting multiple simultaneous remote sessions |
|
VirtualGL | Finely tuned OpenGL encapsulation (with server-side hardware acceleration). |
|
ESP32 VNC Server | A VNC server for the ESP32 microcontroller |
|
esp-vnc | Another little VNC server |
|
Tools | Gitso | A reverse VNC connection tool for support purposes. |
VNC Snapshot | can take screenshots of a section of the display and save them in JPEG format |
|
Web Clients | Ajax VNC | Clientless VNC solution implemented with canvas and a Java server |
noVNC | A decent, secure websockets/canvas client |
|
macOS | Chicken of the VNC | No international key support, works OK with the built-in macOS server |
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. |
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 &