|This article needs additional citations for verification. (February 2011)|
|Original author(s)||X.Org Foundation|
|Stable release||1.4.0 / July 12, 2012|
The X Resize, Rotate and Reflect Extension (RandR) is an X Window System extension, which allows clients to dynamically change X screens, so as to resize, rotate and reflect the root window of a screen. The initial X11 design did not anticipate the need for dynamic resizing and it was necessary to restart the X display server to bring about the changes. However, XFree86 has, since its first release, supported changing the screen resolution on the fly without changing the desktop size. RandR extension framework brought the ability to change display characteristics without restarting the X session. The extension framework allows laptops and handheld computers to change their screen size to drive external monitors at different resolutions than their built in screens.
The X window system has nuanced usage of a number of terms when compared to common usage, particularly "display" and "screen", a subset of which is given here for convenience:
- A graphics device such as a computer graphics card or a computer motherboard's integrated graphics chipset.
- A physical device such as a CRT or a flat screen computer display.
- An area into which graphics may be rendered, either through software alone into RAM as with VNC, or within a graphics device, some of which support rendering into more than one screen simultaneously, either viewable simultaneously or interchangeably. Interchangeable screens are often set up to be notionally left and right from one another, flipping from one to the next as the mouse pointer reaches the edge of the monitor.
- virtual screen
- Two different meanings are associated with this term:
- A technique allowing panning a monitor around a screen running at a larger resolution than the monitor is currently displaying.
- An effect simulated by a window manager by maintaining window position information in a larger coordinate system than the screen and allowing panning by simply moving the windows in response to the user.
- A collection of screens, often involving multiple monitors, generally configured to allow the mouse to move the pointer to any position within them. Linux-based workstations usually support having multiple displays, which are switched by special keyboard combinations such as control-alt-function-key, simultaneously flipping all the monitors from showing the screens of one display to the screens in another.
The term "display" should not be confused with the more specialized jargon "Zaphod display". The latter is a rare configuration allowing multiple users of a single computer to each have an independent set of display, mouse, and keyboard, as though they were using separate computers, but at a lower per-seat cost.
Limitations and criticisms of RandR
RandR 1.2 only permits one virtual screen per display device. It is not possible to assign each monitor on a device to a different screen (sometimes called "Zaphod" mode), or to combine monitors from multiple devices into a single screen. One practical limiting effect of this is that it is not possible to run a different WM on each monitor, since window managers are limited to one per screen. Some of these specific issues are resolved in RandR 1.3.
Some of the features in version 1.3:
- Querying state without output probing
- Multi-monitor panning (still limited to one separate screen per GPU)
- Display transformations (translation, scaling, rotation, projection)
- Support for standard outputs
Some of the features in 1.4:
- Output border adjustment properties
- Provider objects, which allow configuration of render and output offload for multi-GPU configurations
- The X Resize, Rotate and Reflect Extension Version 1.3.1
- The X Resize and Rotate Extension (Jim Gettys and Keith Packard, Usenix Technical Conference 2001)
- Debian XStrikeForce (documentation and information on Xrandr 1.2)
- Freedesktop.org GIT Repository Browser - XRandR Protocol Headers - "Add unicode art pictures for panning"
- RandR 1.3 Explained, Demonstrated
- Overview of the GPU object implementation state