[cups-devel] ICC profile support for PostScript printers?

Alexey Galakhov agalakhov at gmail.com
Tue Aug 9 08:44:54 PDT 2016


Hi Michael,

On Mon, 2016-08-08 at 10:34 -0400, Michael Sweet wrote:
> colord provides the common API for setting and getting ICC profiles
> associated with a printer.  As on macOS (which uses ColorSync), cupsd
> registered profiles in the PPD file which allows the filters to
> access them for the job.
> 
> So this isn't side-stepping things, this is working with the OS to
> provide the same profiles to all consumers.

I'll explain what I mean as "side-stepping".

The information about color profiles is stored in colord/ColorSync. As
the user submits a print job to CUPS, cupsd sends the job data to the
filter chain. This data does not include the color profile. Instead
each filter asks colord on its own.

It is not well-defined what profile qualifiers the filter should use.
And, if the job is put on hold, there is a possibility that the color
profile will be changed during this time, resulting in printing with
the wrong color profile.

Consider the following user story:
- Bob wants to calibrate the printer. He turns the color management
off, creates a print job with color samples, then turns the color
management on again.
- Meanwhile, Alice prints a 100 pages document on the same printer, so
Bob's job stays queued.
- As Bob's job goes through the printing filter, the filter queries
colord settings and sees that the color management is on. Thus Bob's
job is printed with the wrong color profile.

There is a simple solution to avoid that. Instead of letting the filter
asking colord/ColorSync for a profile, the CUPS daemon should do that
themself. The color profile name from colord/ColorSync is then just
passed as an additional job parameter to the filter chain. That
guarantees the color profile choice at the time of job creation and not
at the time of job completion.

The current state is:

 [cupsd] ---job---> [filter] ----> [printer]
                       ^
 [colord] ---profile---|

What I propose is:

 [cupsd] ---job+profile---> [filter] ---> [printer]
    ^
    |
 [colord]

Is anything wrong with such an approach? Any reason not to do so?

Regards,
Alexey




More information about the cups mailing list