This document outlines the challenges facing high-quality printing in Linux and other free software environments. There are a number of initiatives currently underway to improve printing, but there is a concern that these efforts may be working at cross purposes. As a contribution toward better understanding of the issues, this document presents a unifying framework for the problems that need to be solved to deliver truly high-quality free printing.
At least some of the material in this document will be presented at the VA Linux-sponsored printing summit in Sunnyvale, California. This version is a draft. Corrections and clarifications are welcome.
Introduction
Printing is a complicated, multifaceted problem, made even more so by the stunning diversity of printing devices, usage scenarios, and other factors. A user of a Linux-based "thin client" network computer printing out web pages on a local sub-$100 inkjet device faces an almost entirely disjoint set of issues than a corporate printing center, and again different than a graphic arts production environment where the final product is color separation films. Yet, all of these comprise "printing".
To better understand these issues, I have divided the printing problem into seven subareas. Most printing scenarios involve only a subset of these areas. They are:
- Browsing available printers.
- Determining the printer name, type, and options such as duplexing.
- An imaging API (or page description language) used by applications to produce the page images.
- Rasterization of the page image.
- Formatting of the page image into the printer control language (escape codes).
- Transmitting the escape codes to the printer.
- Managing the job queue.
Many Linux users simply purchase PostScript printers, because PostScript is a relatively standard page description language and is well supported by Unix applications. In the simplest case, (1) the printer is trivially assumed to be connected to /dev/lp0 (or, equivalently, is handled by lpr -Plp), (2) the printer name and options are ignored, (3) the page description language is simply PostScript, (4) rasterization is not performed on the host, (5) the printer control language is also PostScript, (6) transmitting of the page to the printer is handled by lpr, and (7) lpr (and friends lpq and lprm) also manage the job queue.
The most common inkjet printer usage retains PostScript as the PDL, but adds Ghostscript as the rasterization step, and the appropriate Ghostscript driver to format the rasterized page for the printer's escape codes. Generally, lpr still manages the queue.
However, printing images with Gimp-print to a local inkjet changes the situation somewhat. (describe)
In networked printer cases, printer browsing and queue management take much greater roles than in the simple local cases. These days, the lpr suite is often used, but is considered to be fairly crude. Most people concerned with Linux printing are eager to lpr replaced.
Issues currently handled poorly
People do manage to print with Linux today. A number of solutions exist for each of the steps presented above. However, there are a number of issues that Linux handles poorly. These include identifying the printers available for browsing (including auto-identifying the printer), obtaining feedback from the printer (for example, ink levels), and image quality issues, including both dithering and color management.
The other major problem with Linux printing is the incredibly messy state of configuration. It is quite straightforward to