= Introduction = This document will explain the device and profile ID schemes used by GNOME Color Manager and colord in the hope that other CMS solutions will hopefully interoperate with this specification. Also, by codifying the device and profile identifiers it is expected that applications can directly query colord. This would allow, for instance, a scanning application that has a libsane SANE_Device object to easily get the device ID for the colord device that corresponds to that physical device. It also means that the CMS does not have to understand concepts like the EDID vendor or the printer name, and can match and apply policy to devices just by comparing simple strings. This also allows applications to create new types of devices and profiles in the CMS without the CMS being aware of all the nuances of what the application is trying to do. For an example, gnome-settings-daemon creates xrandr devices for colord and also auto-creates profiles based on the device EDID. When this happens, colord saves the device->profile mapping and on next session start re-maps the devices which causes the session policy the be applied in the gnome-settings-daemon color plugin. In this way, the CMS knows nothing about XRandR and everything works transparently and correctly. NOTE: This is a working document, and may change based on feedback. Notations used in this document: * {%variable} A variable substitution is performed. * [-{%variable}] if the variable is non-NULL then the clause is used, else ignored. = Device ID Format = A device ID is designed to be able to represent a physical device on the local machine. A device ID is not supposed to be unique across multiple workstations with identical hardware. The device ID is also color management specific. For instance, a CRT or LCD screen may vary a great deal from unit to unit, and so the serial number is used in the device ID. A webcam however, does not typically vary unit-to-unit by much at all, and so the device serial number is not used in video4linux device IDs. A device ID is a valid UTF-8 string. This means it can contain slashes and spaces and does not have to be escaped. == XRANDR Display Device == A XRandR device consists of a single physical display device. A colord device should not be created for a display interface that does not have a physical device attached to it. A XRandR device typically has the device EDID data available, and this is the preferred way of identifying the device. Using the EDID ensures the device ID remains constant if the physical display connection is moved from VGA to DVI1 for instance. Format: xrandr[-{%edid_vendor}][-{%edid_model][-{%edid_serial}] Example: xrandr-Hewlett Packard-HP LP2480zx-3CM82200KV Example: xrandr-3CM82200KV For some displays, the EDID may be corrupt or not available, or none of the vendor, model or serial text data may be present. In this case, the fallback scheme is used using the XRandR device name. Format: xrandr-{%xrandr_name} Example: xrandr-LVDS1 Projects already using this format: * GNOME Color Manager == CUPS printer == A CUPS printer is a single physical printing device with queue in CUPS. A colord device should not be created for an printer that does not have a suitable driver yet installed. The device ID is constructed using Format: cups-{%printer_name} Example: cups-Photosmart-B109a-m Projects already using this format: * GNOME Color Manager * CUPS * ghostscript * foomatic == SANE scanner == A SANE scanner consists of a single physical scanning device. Format: sane-{%sane_model} Example: sane_Photosmart_B109a-m Projects already using this format: * GNOME Color Manager == Video4Linux devices == A video4linux device is typically a single physical web camera. Format: sysfs[-{%sysfs_vendor}][-{%sysfs_model] Example: sysfs-Chicony_Electronics_Co.__Ltd.-Integrated_Camera For some hardware, the vendor and the model may not be available. In this case, the fallback scheme is used using the device file. Format: sysfs-{%sysfs_device_file} Example: sysfs-/dev/video0 Projects already using this format: * GNOME Color Manager = Profile ID format = The profile ID is a single string that identifies a specific profile on a machine. A profile ID is a valid UTF-8 string. This means it can contain slashes and spaces and does not have to be escaped. A profile ID is the same for binary identical profiles, even if duplicated on the filesystem with the exception of user profiles. In line with other ICC recommendations, the embedded profile ID (bytes 84 to 99) is used, after converting it to a hexadecimal encoding. Format: icc-{%embedded-profile-id} Example: icc-3c219b18958837493b586581f8c2a2a4 The ICC do not mandate the embedded profile-id and only recommend it, and as such few profiles in the wild use a real value. If the embedded profile ID is not set, the complete MD5 file checksum should be used instead, e.g. Format: icc-{%file-checksum} Example: icc-bd847723f676e2b846daaf6759330624 If a physical profile does not exist (for instance, for embedded printer profiles) then a fallback is used, which is typically the printer name and qualifier for the profile. Format: {%printer_name}[-{%qualifier}] Example: Photosmart-B109a-m-Gray.. Other fallbacks can be defined privately by applications if required. Projects already using this format: * GNOME Color Manager * CUPS