Virtual Network Computing (VNC)

Probably the most useful Open Source tool of all (ok, maybe is more useful), 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 , has the advantage of being very simple and require only very light clients (the binary is contained within just 230KB, and implementations can be downloaded on-the-fly from any browser).

includes a server (check the Sharing preference pane, it’s part of Remote Desktop).

Mac Screen Sharing

uses a variant of the 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 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, decided to get stingy again, so this workaround became necessary–which is kind of ridiculous.

When 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

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 AWT applications

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

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 &

This page is referenced in: