ICC Profiles in X Specification 0.4

From ColourWiki


Revision History
Revision 0.1 (http://www.burtonini.com/computing/x-icc-profiles-spec-0.1.html) 2005-06-24 Ross Burton Initial release. Thanks to Craig Ringer, Jim Gettys, Kai-Uwe Behrmann, and Matthew Allum for feedback.
Revision 0.2 (http://www.burtonini.com/computing/x-icc-profiles-spec-0.2.html) 2006-05-03 Kai-Uwe Behrmann Specify how to handle Xinerama setups.
Revision 0.3 (http://www.freedesktop.org/wiki/OpenIcc/ICC_Profiles_in_X_Specification_0.3) 2008-04-24 Kai-Uwe Behrmann Clearify terminology suggested Hal V. Engel, Jon A. Cruz, sRGB default by
Craig Ringer and corrections by Kai-Uwe Behrmann; case corrections by Graeme Gill
Revision 0.4 2010-03-26 Kai-Uwe Behrmann xrand, late colour binding, clarify multi monitor atom counting, _ICC_PROFILE_IN_X_VERSION is XA_STRING, describe meaning of _ICC_PROFILE

Table of contents


This is a specification for associating ICC colour profiles with X monitors. With this specification applications and services can obtain the appropriate display profile for the monitor they are interested in, and apply colour correction to any images, which are shown to the user.


The _ICC_PROFILE base name contains the literal ICC colour profile. A atom with name _ICC_PROFILE_IN_X_VERSION tells about awareness of the setting application or service.


The atom name for the first monitor in a root window is _ICC_PROFILE.

For root windows spanning more than one monitor, as typical in Xinerama and XRandR multihead configurations, a atom for each monitor is added holding the appropriate ICC profile. The first monitor uses the _ICC_PROFILE atom name. All monitors in a root window starting from number one use _ICC_PROFILE as atom name extended with an underscore plus the monitor number, e.g. _ICC_PROFILE_1 . Monitor counting starts with zero. Thus a _ICC_PROFILE_0 atom should not appear. The counting follows the Xinerama API.

The atoms are of type XA_CARDINAL with 8-bit elements. The value of the atom should be a literal ICC profile, that applications can read and parse directly.

This property does not have to be set on every monitor. When this property is not set for a monitor, this monitor is uncharacterised, and colour correction for this monitor should be done using the sRGB colour space.

As profiles can be large, applications should read the profile for a particular screen once, and cache it. As a screen's profile may change during the lifetime of the process, applications should ask to receive property change notifications from the root window, even if they don't currently have a profile set. Applications which can change screens using mechanisms such as display migration should be aware that the new screen is likely to have different profiles assigned to monitors.

The meaning of the _ICC_PROFILE(_xxx) atom(s) is that of a target colour space according to this version of the specification.


The _ICC_PROFILE_IN_X_VERSION atom specifies the version of this specification applied. To simplify parsing the minor revision number is multiplied by 1 plus the major number by 100. So for example revision 0.4 would result in:

0*100 + 4*1 => 4

The atom should be stored as ascii text of type XA_STRING with 8-bit elements.


1. International Color Consortium (http://www.color.org)

2. central specification host (http://www.freedesktop.org/wiki/Specifications/icc_profiles_in_x_spec) @ freedesktop.org

3. Ross Burtons old page (http://www.burtonini.com/computing/x-icc-profiles-spec-0.2.html)

2005 © Ross Burton; 2006-2010 © Kai-Uwe Behrmann