The core of the CUPS filtering system is based on Ghostscript, part of the GNU project. It consults PPD files, which are an industry standard for representing printer capabilities (two-sided printing, four-to-a-page, etc.).
For PostScript printers, the PPD file contains the printer-specific options (and nothing else) together with the corresponding PostScript code snippets that must be sent to the PostScript interpreter in order to activate a certain option.
For non-PostScript printers, the PPD file contains additional information about which printer driver program to use and the options available for the particular driver. If several drivers can be used for a given printer, several PPD files are found on the system.
Depending on the printer-specific options set for a certain
print job (e.g.,
the filter system reads the suitable PostScript code snippets (the
so-called “PostScript invocation values”) from the PPD file and
inserts them in the PostScript data stream.
The original data has a MIME type determined by configuration
options in /etc/cups/mime.types. If the type is not
application/postscript, the data
is converted to PostScript according to the /etc/cups/mime.convs configuration file.
converted to PostScript with the
These filter files are usually found in the directory /usr/lib/cups/filter and, like CUPS backends, can be compiled code or shell scripts.