Shyru's World

Sunday, September 24, 2006

aKademy 2006: Multi-Head RandR

This talk was held by our all time X-hero Keith Packard.
He titled it "Hotpluggy Sweetness". Basically, they want Monitors and input devices to be fully pluggable.

First he showed the history of x and screen and how this all involved:

Core-X does support multiple screens.
When the x-server starts it detects the monitors (through DDC) and then starts all up. - After that it does not change. -Ever.

Screen info is passed at X startup. (static arrays allocated in Xlib)
Adding screens is really hard. Many resources are per-screen (Windows, Pixmaps, etc)
(Long ago screens had different capabilities (color depth etc,) but today we do not have that anymore, so much of the assumptions made earlier, dont make sense anymore)

Merge monitors into one "screen". Allows applications to move from one monitor to the other.
But: Screen configuration fixed at startup. That is suitable for fixed multi-head environments, but not for todays requirements with notebooks etc.
Also: The Initial implementation was very inefficient (all applications are replicated on all graphic cards, sucks many memory).

Changing Modes
Change monitor on the fly, also exposes gamma correction
But: screen-size still fixed at startup because of static configuration files, set of possible modes fixed at startup

Changing Screen Size
RandR: Resize and Rotate extension.
Allows run-time changes to screen size (fixed set of sizes and monitor modes as present in the configuration files). A mode is expressed as size and refresh only. This was the first extension to break existing applications because of the changing the screen size.

Now on for the real: Hotpluggy Sweetness
  • Add/remove monitors dynamically
  • Extend desktop across new monitor
  • Expose full system capabilites to applications
  • Blend Xinerama, Xfree86-VidModeExtension and RandR
  • World Domination :-)

This new thing is based on three "things:

Screen - Core X screen (Accept static screen count, there need be only one)

Crtc - CRT Controller (Scan-out portion of X screen, Contains one mode [All todays graphic cards support more than one monitor, but only one mode!] )

Outputs (Drive monitors, Connected to CRTC)

Then he went on showed the commandline tool randr12 which allowed to view the current state and also change the above three things on the fly. It worked really well and looked sweet.

When beeing asked when this could be in X.Org, he said probably X.Org 7.3

Personal comment: This is really great stuff and i cant wait for X.Org 7.3 to appear!


Post a Comment

<< Home