libxrandr-utils - Centralized Multi-head Configuration Logic

Registered by Bryce Harrington

Generalize monitor layout logic from's xrandr tool into a high level monitor configuration library for use by GUI tools.

Currently, there are a number of different systems for handling monitor configuration. Each system has its own algorithms, and are maintained by completely different groups of people. All of these systems use the same underlying X library, called libXrandr. However, this is a very, very low level library. As such, it requires a higher level wrapper code to perform configuration changes. Currently each tool maintains their own algorithms for configuring monitors. This blueprint proposes to centralize that logic into an library, that can be more closely tested and supported on the X side.

Blueprint information

Not started
Sebastien Bacher
Bryce Harrington
Bryce Harrington
Series goal:
Proposed for raring
Milestone target:

Related branches



seb128, 2012-07-11: setting the port of gnome-control-center to libxrandr-utils postponed after discussion with Bryce, it seems better to get the library in shape this cycle and start integrating early next cycle

raof, 2011-11-16: The xrandr protocol work is unlikely to land in Precise; protocol work takes lots of time ☺. Marking it as postponed, but I'll be working on it on and off.


Work Items

Work items:
[apw] Send prototype edid-write kernel to bryce: DONE
[bryce] Coordinate and set up libxrandr-utils project and git tree with DONE
[bryce] Add enums and other constants from xrandr.c into libxrandrutils, with unit tests: DONE
[bryce] Create copy of xrandr.c to refactor from, and create an a/b test: DONE
[bryce] Refactor name_t structure and related routines into the library. Write tests. Migrate xrandr.c to use it. Verify tests: DONE
[bryce] Refactor output_prop_t structures and related routines into the library. Write tests. Migrate xrandr.c to use it. Verify tests: DONE
[bryce] Migrate the transform_t structure and routines into the library. init_transform, set_transform, copy_transform, et al. Write tests. Migrate the xrandr.c copy to use the library's transform_t code: DONE
[bryce] Migrate mode related bits. Write and verify tests: INPROGRESS
[bryce] Migrate crtc_t and related bits. Write and verify tests: POSTPONED
[bryce] Migrate output_t and related bits. Write and verify tests: POSTPONED
[bryce] Create new structure ala gnome-rr's ScreenInfo: POSTPONED
[bryce] Create a demo program to show libxrandr-utils functionalities: POSTPONED
[raof] Code-review of libxrandr-utils: POSTPONED
[raof] Incorporate functionality into libxrandr-utils from gnome-desktop's gnome-rr.c code: POSTPONED
[raof] Prepare a branch of gnome-desktop using libxrandr-utils: POSTPONED
Implement a way to associate input devices with outputs so when monitor's rotated, input is too: BLOCKED
Implement defining outputs by display type (monitor, projector, phone, tv, ...): TODO
[bryce] Implement functionality for changing the primary display: POSTPONED
Implement a list of registered configurations that clients can select between: BLOCKED
[raof] xrandr protocol needs a way to restore system to state before the client made changes: POSTPONED
[raof] Add custom randr modes support to gnome-settings-daemon xrandr plugin: POSTPONED
[raof] Merge windows driver import code from displayconfig-gtk into gnome-display-preferences: POSTPONED
[ubuntu-x-swat] Add libxrandr-utils support to the nvidia config tool: BLOCKED
[bryce] Investigate how to identify EDID-less monitors to apply quirks: POSTPONED

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.