A CUPS driverless queue prints 4×6 photos in grayscale whatever the options — a direct IPP Print-Job prints them in color

I printed a sheet of ID photos on 4×6 glossy paper through a CUPS queue that
had been printing documents happily for months. The sheet came out in
grayscale. So did the second one, and the third, with every color option I
could find explicitly set to color. The printer never reported an error.

TL;DR — on a Canon GX6000 with an auto-generated driverless CUPS queue,
photo jobs on 4×6 paper come out grayscale no matter which color options you
pass. Sending the JPEG straight to the printer with an IPP Print-Job and
document-format = image/jpeg — the same path AirPrint uses — prints in
color. ipptool is all you need.

The setup

A Canon GX6000 network inkjet, driven from Linux by the queue CUPS builds on
its own for network printers: no vendor driver, just IPP. The queue identifies
itself as Canon Printer, driverless, 2.1.1. The job was a 2400×3600 px sRGB
image at 600 dpi (a sheet of six ID photos), printed on 10×15 cm glossy paper
(4x6 in CUPS vocabulary) loaded in the rear tray:

lp -d GX6000 -o media=4x6 -o MediaType=Com.canonMtglossy \
   -o print-scaling=none -o cupsPrintQuality=High photos.png

What I expected

That -o ColorModel=RGB (the PPD option) or -o print-color-mode=color (the
standard IPP attribute) would control color, the way they do for ordinary
document printing on the same queue.

What actually happens

Three prints on photo paper, three different option sets, all grayscale:

  • ColorModel=RGB + Canon media type + quality High → grayscale
  • print-color-mode=color added on top → grayscale
  • standard media-type=photographic, default quality → grayscale

Nothing in the system admits anything is wrong. The printer reports
color-supported = true, printer-state-reasons = none, color inks at 70%,
and its raster formats include color:

pwg-raster-document-type-supported = black_1,sgray_8,srgb_8
print-color-mode-default = color

The control test that isolated the fault: the same queue printed a color test
chart correctly on Letter plain paper. Queue, engine and inks all do color —
only the photo-paper path loses it.

Two print paths compared: through the CUPS filter chain the 4x6 photo job reaches the printer as grayscale raster; a direct IPP Print-Job carrying the JPEG lets the printer firmware render it in color.

The fix

Bypass CUPS entirely and hand the printer the JPEG itself. Printers that
support AirPrint accept image/jpeg in a plain IPP Print-Job and render it
in firmware. Save this as print-direct.test:

{
  OPERATION Print-Job
  GROUP operation-attributes-tag
  ATTR charset attributes-charset utf-8
  ATTR language attributes-natural-language en
  ATTR uri printer-uri $uri
  ATTR mimeMediaType document-format image/jpeg
  GROUP job-attributes-tag
  ATTR keyword media na_index-4x6_4x6in
  ATTR keyword media-type photographic
  ATTR keyword print-color-mode color
  ATTR keyword print-scaling none
  FILE $filename
  STATUS successful-ok
  DISPLAY job-id
}

Then send it (replace the address with your printer’s):

ipptool -tv -f photos.jpg ipp://192.0.2.10/ipp/print print-direct.test
# → status-code = successful-ok, job-state = processing

The sheet came out in full color on the first try — same paper, same inks,
same declared options as the grayscale prints.

Two details matter. The file must be JPEG (convert PNG with
PIL: im.convert('RGB').save(out, 'JPEG', quality=97, dpi=(600,600))). And
with print-scaling none the image is placed at its native size, so generate
it at exactly the paper dimensions with the dpi recorded in the header —
2400×3600 px at 600 dpi is precisely 10.16×15.24 cm.

Why it works

Through CUPS, the computer rasterizes the job before sending it: the filter
chain converts the image to PWG or Apple raster, choosing a colorspace from
the printer’s advertised list (black_1, sgray_8, srgb_8). Somewhere on
the 4×6 photo path that choice lands on 8-bit grayscale, and the color options
are ignored. I did not isolate which component makes the wrong pick — the
bypass removes the whole chain, so I stopped there.

With a direct Print-Job carrying image/jpeg, no raster is produced at all.
The printer firmware decodes the JPEG and does its own color management. That
is the code path phone printing exercises daily, which is presumably why it is
the one that works.

What I did not test

Only this printer (Canon GX6000), only Ubuntu 26.04’s CUPS, only 4×6 glossy
against Letter plain. I did not try other photo sizes, a queue rebuilt with
lpadmin -m everywhere, or whether a newer cups-filters fixes the raster
path. If your printer lacks AirPrint-style JPEG support,
document-format-supported will tell you — look for image/jpeg.

Facts

context: Canon GX6000 network inkjet, auto-generated CUPS driverless queue on Linux
problem: photo jobs on 4x6 paper print in grayscale regardless of ColorModel/print-color-mode options
solution: bypass CUPS; send the JPEG directly with an IPP Print-Job (document-format image/jpeg) via ipptool
verified_on: 2026-08-27
applies_to: [Canon GX6000, CUPS driverless queues, Ubuntu 26.04]
does_not_apply_to: [printers without image/jpeg in document-format-supported, vendor-driver queues]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut