RFB protocol

Last updated

RFB ("remote framebuffer") is an open simple protocol for remote access to graphical user interfaces. Because it works at the framebuffer level it is applicable to all windowing systems and applications, including Microsoft Windows, macOS, the X Window System and Wayland. RFB is the protocol used in Virtual Network Computing (VNC) and its derivatives.

Contents

Description

By default, a viewer/client uses TCP port 5900 to connect to a server (or 5800 for browser access), but can also be set to use any other port. Alternatively, a server can connect to a viewer in "listening mode" (by default on port 5500). One advantage of listening mode is that the server site does not have to configure its firewall/NAT to allow access on the specified ports; the burden is on the viewer, which is useful if the server site has no computer expertise, while the viewer user would be expected to be more knowledgeable.

Although RFB started as a relatively simple protocol, it has been enhanced with additional features (such as file transfers) and more sophisticated compression and security techniques as it has developed. To maintain seamless cross-compatibility between the many different VNC client and server implementations, the clients and servers negotiate a connection using the best RFB version, and the most appropriate compression and security options that they can both support.

History

RFB was originally developed at Olivetti Research Laboratory (ORL) as a remote display technology to be used by a simple thin client with Asynchronous Transfer Mode connectivity called a Videotile. In order to keep the device as simple as possible, RFB was developed and used in preference to any of the existing remote display technologies.

RFB found a second and more enduring use when VNC was developed. VNC was released as open source software and the RFB specification published on the web. Since then RFB has been a free protocol which anybody can use.

When ORL was closed in 2002 some of the key people behind VNC and RFB formed RealVNC, Ltd., in order to continue development of VNC and to maintain the RFB protocol. The current RFB protocol is published on the RealVNC website.

Protocol versions

Published versions of the RFB protocol are as follows:

VersionPublishedDateSpecification
RFB 3.3ORLJanuary 1998 The Remote Framebuffer Protocol 3.3
RFB 3.7RealVNC LtdAugust 2003 The Remote Framebuffer Protocol 3.7
RFB 3.8 (current)RealVNC LtdJune 2007 The Remote Framebuffer Protocol 3.8
IETF RFC (3.8)RealVNC LtdMarch 2011 RFC   6143

Developers are free to add additional encoding and security types but they must book unique identification numbers for these with the maintainers of the protocol so that the numbers do not clash. Clashing type numbers would cause confusion when handshaking a connection and break cross-compatibility between implementations. The list of encoding and security types was maintained by RealVNC Ltd and is separate from the protocol specification so that new types can be added without requiring the specification to be reissued. Since December 2012, the list went to IANA. [1]

A community version of the RFB protocol specification which aims to document all existing extensions is hosted by the TigerVNC project. [2]

Encoding types

Since encodings are part of the negotiation, some of the encodings below are pseudo-encodings used to advertise the ability to handle a certain extension.

RFB Encodings [2]
NumberEncoding
0x00000000Raw
0x00000001CopyRect
0x00000002RRE (Rising Rectangle Run-length)
0x00000004CoRRE (Compact RRE)
0x00000005Hextile (RRE Variant)
0x00000006Zlib
0x00000007Tight
0x00000008ZlibHex (Zlib + Hextile)
0x00000009Ultra
0x00000010ZRLE (Zlib Run-length)
0x00000011ZYWRLE
0x00000014 H.264
0x00000032Open H.264
0xFFFF0001CacheEnable
0xFFFF0006XOREnable
0xFFFF8000ServerState (UltraVNC)
0xFFFF8001EnableKeepAlive (UltraVNC)
0xFFFF8002FTProtocolVersion (File Transfer Protocol Version - UltraVNC)
0xFFFFFEC7ContinuousUpdates
0xFFFFFEC8Fence
0xFFFFFECCExtendedDesktopSize
0xFFFFFECFGeneral Input Interface (GII)
0xFFFFFF000xFFFFFF09CompressLevel (Tight encoding)
0xFFFFFF10XCursor
0xFFFFFF11RichCursor
0xFFFFFF18PointerPos
0xFFFFFF20LastRect
0xFFFFFF21NewFBSize
0xFFFFFF74Tight PNG
0xFFFFFFE00xFFFFFFE9QualityLevel (Tight encoding)

Of the publicly-defined picture-based encodings, the most efficient ones are the Tight encoding types. Two types of encodings are defined by TightVNC:

H.264 has been researched for encoding RFB data, but the preliminary results (using Open H.264 format) were described as lackluster by a TurboVNC developer. It does become more efficient with fewer I-frames (keyframes), but CPU utilization remains a problem. [4]

Limitations

In terms of transferring clipboard data, "there is currently no way to transfer text outside the Latin-1 character set". [5] A common pseudo-encoding extension solves the problem by using UTF-8 in an extended format. [2] :§ 7.7.27

The VNC protocol is pixel based. Although this leads to great flexibility (i.e. any type of desktop can be displayed), it is often less efficient than solutions that have a better understanding of the underlying graphic layout like X11 or desktop such as RDP. Those protocols send graphic primitives or high level commands in a simpler form (e.g. open window), whereas RFB just sends the raw pixel data, albeit compressed.

The VNC protocol expresses mouse button state in a single byte, as binary up/down. This limits the number of mouse buttons to eight (effectively 7 given convention of button 0 meaning "disabled"). Many modern mice enumerate 9 or more buttons, leading to forward/back buttons having no effect over RFB. A "GII" extension solves this problem. [2] :§ 7.7.11

See also

Related Research Articles

<span class="mw-page-title-main">X Window System</span> Windowing system for bitmap displays on UNIX-like systems

The X Window System is a windowing system for bitmap displays, common on Unix-like operating systems.

<span class="mw-page-title-main">Windowing system</span> Software that manages separately different parts of display screens

In computing, a windowing system is a software suite that manages separately different parts of display screens. It is a type of graphical user interface (GUI) which implements the WIMP paradigm for a user interface.

<span class="mw-page-title-main">Virtual Network Computing</span> Graphical desktop-sharing system

Virtual Network Computing (VNC) is a graphical desktop-sharing system that uses the Remote Frame Buffer protocol (RFB) to remotely control another computer. It transmits the keyboard and mouse input from one computer to another, relaying the graphical-screen updates, over a network.

TightVNC is a free and open-source remote desktop software server and client application for Linux and Windows. A server for macOS is available under a commercial source code license only, without SDK or binary version provided. Constantin Kaplinsky developed TightVNC, using and extending the RFB protocol of Virtual Network Computing (VNC) to allow end-users to control another computer's screen remotely.

RealVNC is a company that provides remote access software. Their VNC Connect software consists of a server and client application, which exchange data over the RFB protocol to allow the Viewer to control the Server's screen remotely. The application is used, for example, by IT support engineers to provide helpdesk services to remote users.

Remote Desktop Protocol (RDP) is a proprietary protocol developed by Microsoft Corporation which provides a user with a graphical interface to connect to another computer over a network connection. The user employs RDP client software for this purpose, while the other computer must run RDP server software.

x11vnc is a Virtual Network Computing (VNC) server program. It allows remote access from a remote client to a computer hosting an X Window session and the x11vnc software, continuously polling the X server's frame buffer for changes. This allows the user to control their X11 desktop from a remote computer either on the user's own network, or from over the Internet as if the user were sitting in front of it. x11vnc can also poll non-X11 frame buffer devices, such as webcams or TV tuner cards, iPAQ, Neuros OSD, the Linux console, and the Mac OS X graphics display. x11vnc is part of the LibVNCServer project and is free software available under the GNU General Public License. x11vnc was written by Karl Runge.

NX technology, commonly known as NX or NoMachine, is a remote access and remote control computer software, allowing remote desktop access and maintenance of computers. It is developed by the Luxembourg-based company NoMachine S.à r.l.. NoMachine is proprietary software and is free-of-charge for non-commercial use.

Remote administration refers to any method of controlling a computer from a remote location. Software that allows remote administration is becoming increasingly common and is often used when it is difficult or impractical to be physically near a system in order to use it. A remote location may refer to a computer in the next room or one on the other side of the world. It may also refer to both legal and illegal remote administration.

<span class="mw-page-title-main">Apple Remote Desktop</span> Application by Apple

Apple Remote Desktop (ARD) is a Macintosh application produced by Apple Inc., first released on March 14, 2002, that replaced a similar product called Apple Network Assistant. Aimed at computer administrators responsible for large numbers of computers and teachers who need to assist individuals or perform group demonstrations, Apple Remote Desktop allows users to remotely control or monitor other computers over a network. Mac Pro (2019), Mac mini with a 10Gb Ethernet card, and Mac Studio (2022) have Lights Out Management function and are able to power-on by Apple Remote Desktop.

Xvfb or X virtual framebuffer is a display server implementing the X11 display server protocol. In contrast to other display servers, Xvfb performs all graphical operations in virtual memory without showing any screen output. From the point of view of the client, it acts exactly like any other X display server, serving requests and sending events and errors as appropriate. However, no output is shown. This virtual server does not require the computer it is running on to have any kind of graphics adapter, a screen or any input device. Only a network layer is necessary.

<span class="mw-page-title-main">HTTP compression</span> Capability that can be built into web servers and web clients

HTTP compression is a capability that can be built into web servers and web clients to improve transfer speed and bandwidth utilization.

<span class="mw-page-title-main">UltraVNC</span> Remote desktop software

UltraVNC is an open-source remote-administration/remote-desktop-software utility. The client supports Microsoft Windows and Linux but the server only supports Windows. It uses the VNC protocol to allow a computer to access and control another one remotely over a network connection.

VirtualGL is an open-source software package that redirects the 3D rendering commands from Unix and Linux OpenGL applications to 3D accelerator hardware in a dedicated server and sends the rendered output to a (thin) client located elsewhere on the network. On the server side, VirtualGL consists of a library that handles the redirection and a wrapper program that instructs applications to use this library. Clients can connect to the server either using a remote X11 connection or using an X11 proxy such as a VNC server. In case of an X11 connection some client-side VirtualGL software is also needed to receive the rendered graphics output separately from the X11 stream. In case of a VNC connection no specific client-side software is needed other than the VNC client itself.

Desktop sharing is a common name for technologies and products that allow remote access and remote collaboration on a person's computer desktop through a graphical terminal emulator.

<span class="mw-page-title-main">Remote desktop software</span> Desktop run remotely from local device

In computing, the term remote desktop refers to a software- or operating system feature that allows a personal computer's desktop environment to be run remotely off of one system, while being displayed on a separate client device. Remote desktop applications have varying features. Some allow attaching to an existing user's session and "remote controlling", either displaying the remote control session or blanking the screen. Taking over a desktop remotely is a form of remote administration.

This page is a comparison of notable remote desktop software available for various platforms.

<span class="mw-page-title-main">ThinLinc</span>

ThinLinc is a cross-platform remote desktop server developed by Cendio AB. The server software and the users' main desktops run on Linux. Clients are available for Linux, Windows, macOS, and a number of thin clients. A browser client using HTML5 technologies is also available.

In computing, SPICE is a remote-display system built for virtual environments which allows users to view a computing "desktop" environment – not only on its computer-server machine, but also from anywhere on the Internet – using a wide variety of machine architectures.

<span class="mw-page-title-main">TigerVNC</span>

TigerVNC is an open source Virtual Network Computing (VNC) server and client software, started as a fork of TightVNC in 2009. The client supports Windows, Linux and macOS. The server supports Linux. There is no server for macOS and as of release 1.11.0 the Windows server is no longer maintained.

References

  1. "Remote Framebuffer (RFB)". www.iana.org.
  2. 1 2 3 4 "The RFB Protocol, Community Edition". GitHub. 8 August 2022.
  3. "VNC Tight Encoder - Comparison Results". www.tightvnc.com.
  4. Commander, DR. "A Study on the Usefulness of H.264 Encoding in a VNC Environment". turbovnc.org.
  5. Richardson, Tristan (2010). "Sections 6.4.6, 6.5.4". The RFB Protocol - Version 3.8.