tagline: From openSUSE
 PostScript: The current common printing format
Linux uses a common data format for printing: The PostScript format. This means that application programs usually produce PostScript output when printing.
Some printers accept PostScript natively, i.e. PostScript printers can print application's printing output directly. Other printers need Ghostscript plus a printer driver which convert PostScript into the "language" that the particular printer accepts.
- Linux printing details: http://www.linuxfoundation.org/collaborate/workgroups/openprinting
- PostScript and wikipedia:PostScript
- Ghostscript and wikipedia:Ghostscript
 PDF: The future common printing format
There is a general move away from PostScript to PDF as the standard print job format. This change is advocated by the OpenPrinting workgroup of the Linux Foundation and the CUPS author.
See http://www.linuxfoundation.org/collaborate/workgroups/openprinting which reads:
PDF as standard print job format is completely implemented on Debian and Ubuntu and will soon get upstream standard
From Ubuntu Oneiric (11.10, released mid-October) on all important desktop applications (GTK/GNOME, Qt/KDE, LibreOffice/OpenOffice.org, Firefox, Thunderbird, ...) send print jobs in PDF and not in PostScript any more by default. In addition, a complete CUPS filter chain to process print jobs in PDF is available and used by Debian and Ubuntu.
CUPS author Mike Sweet/Apple have decided to not include the Linux-specific CUPS filters in the upstream CUPS source any more and we have agreed to maintain them at OpenPrinting. Here we will do some clean-up and discontinue the PostScript-centric workflow in favor of the PDF workflow, meaning that the upstream standard for CUPS under Linux (using CUPS plus our filter package) will be the PDF-based job processing, letting every non-PDF input be converted to PDF first, page management options being applied by a pdftopdf filter and Ghostscript being called with PDF as input.
Having this workflow we ask all driver developers kindly to not create any PPDs/drivers for non-Postscript printers which require exclusively PostScript. PPD files should at least accept PDF or CUPS Raster now. See also our driver design/packaging page http://www.linuxfoundation.org/collaborate/workgroups/openprinting/writingandpackagingprinterdrivers
More info on our page about the PDF printing workflow http://www.linuxfoundation.org/collaborate/workgroups/openprinting/pdf_as_standard_print_job_format
 PPD files: Printer-specific options
PostScript Printer Description (PPD) files list printer-specific values and options and the possible choices for each option like:
- Page size: A4, Letter, Legal
- Paper input slot: Default, Envelope, ManualFeed
- Printing resolution: 300x300dpi, 600x600dpi
Application programs use PPD files to show the printer-specific options in their printing dialogs and to get printer-specific values that are of interest when applications produce PostScript or PDF output for printing like:
- Monochrome or color printer
- Printable area values for each page size
For PostScript printers the manufacturers provide a PPD file for each particular printer model.
For other printers (i.e. non-PostScript printers) the printer driver software package usually contains PPD files for the printer models which are supported by the particular printer driver. For non-PostScript printers, the PPD file contains the information which printer driver program must be used and the printer-specific options that are available for the particular driver.
- SDB:CUPS in a Nutshell: PPD Files
 CUPS: The server between user and printer
The Common Unix Printing System (CUPS) is the base printing system developed by Apple Inc. for Mac OS X and other UNIX-like operating systems, in particular Linux.
A printer device is not used directly by user application programs but via a print queue.
When various application programs submit print jobs simultaneously, these jobs are put in a queue and sent one after the other to the printer device. Even when a single user with one application program submits a single print job, the print queue holds the job so that the application program can continue and the user does not need to wait until the printer device had finished to actually print it.
CUPS is the software which must run on a computer so that application programs can send their printing output to CUPS which queues the print jobs and processes them ony by one.
For each print queue there is a PPD file which CUPS provides to application programs so that the printer-specific options are available in the printing dialogs.
In particular for non-PostScript printers CUPS runs the printer driver and sends its result to the printer device. To do this, CUPS must know which printer driver belongs to the printer device and how the printer device is connected to the computer so that CUPS can send printing data to the printer device.
Therefore "set up a printer" means to "set up a print queue" and tell CUPS for the particular queue:
- How the printer device is connected to the computer
- Which printer driver belongs to the printer device (via the PPD file)
Strictly speaking from the computer's internal point of view it usually doesn't know about the actual printer devices but only about print queues. What CUPS and application programs call "printers" are usually not the actual printer devices but only their associated print queues. This sketchy usage of the word "printer" for the computer's internal representation can lead to confusion when it is not clear for the user what it actually means when CUPS or application programs show that everything is o.k. with the "printer". Usually this means that the state of the print queue is o.k. (e.g. "ready") but the state of actual printer device could be different at the same time (e.g. "out of paper").
 Printer drivers: Make the printer print
The printer driver produces the final printer-specific data which actually lets the printer print.
It depends on the driver that the right data is produced for the specific printer model. If a wrong driver is used, wrong data is sent to the printer which results bad looking printout, chaotic printout, or no printout at all.
Even if a printer is listed as "supported", there could be minor differences between application's PostScript printing output and the actual printout on the paper when the driver is not specifically optimized for the particular printer model (see SDB:Purchasing a Printer and Compatibility).
PostScript printers do not need a printer driver because they do not need driver software which converts PostScript into another "language" that the printer actually "understands". For example such a printer language is PCL (Printer Command Language developed by Hewlett-Packard).
PostScript printers need only a PPD file which matches the particular model to make the printer-specific options available to application programs.
Other printers (i.e. non-PostScript printers) need printer driver software plus a PPD file which matches exactly to the particular driver.
Usually there is neither such a thing as "the one and only driver" nor is there such a thing as "the best driver" for a particular printer model. The better the printer hardware is, the more different drivers are available, where each driver is best only for a particular use case.
For example a PostScript+PCL color laser printer could be operated as
- PostScript printer using a PostScript PPD
- color PCL printer using a PPD for a color PCL driver
- monochrome PCL printer using a PPD for a monochrome PCL driver
Printing via a PCL driver is usually faster but with less quality than printing in PostScript mode and using a monochrome PCL driver is probably the best way to enforce fast monochrome-only printing.
More information regarding PostScript+PCL printers:
 openSUSE printer driver software packages
Up to openSUSE 11.3 the cups-drivers package was a huge all-in-one package which contained several actually independent printer drivers and several sets of PPD files.
Since openSUSE 11.4 the following printer driver and PPD files packages are split from the cups-drivers package and the cups-drivers package itself is dropped:
- gutenprint: the Gutenprint driver and its matching PPDs
- splix: the SpliX driver and its matching PPDs
- m2300w: the m2300w driver and its matching PPDs
- OpenPrintingPPDs-ghostscript: PPDs for Ghostscript built-in drivers
- OpenPrintingPPDs-hpijs: PPDs for the HPIJS driver for non-HP printers
- OpenPrintingPPDs-postscript: PPDs for PostScript printers
See the "Driver" section in YaST Printer how to install printer driver software packages with the YaST printer setup module.
Additionally there is HP's Linux Imaging and Printing (HPLIP) driver solution for HP printers and scanners in HP all-in-one devices. It includes the Ghostscript printer driver HPIJS with matching PPDs and the native CUPS printer driver HPCUPS with matching PPDs plus the SANE scanner driver hpaio. openSUSE provides HPLIP in the packages hplip and hplip-hpijs and since openSUSE 12.1 additionally in the package hplip-sane, see SDB:How to set-up a HP printer.
Furthermore since openSUSE 12.1 there is the Epson Inkjet Printer Driver (ESC/P-R) for Linux. openSUSE provides it in the package epson-inkjet-printer-escpr.
Finally more PPD files from printer manufacturers for PostScript printers are provided in the package manufacturer-PPDs.
- SDB:CUPS in a Nutshell: The Filter (includes the Driver)
- OpenPrinting.org Driver List: http://www.openprinting.org/drivers
- Gutenprint driver: http://gutenprint.sourceforge.net/
- HPLIP home page: http://hplipopensource.com/
 Linux standard printer driver development
The LSB (Linux Standard Base) DDK (Driver development kit) can be used to provide distribution-independent printer driver packages for Linux.
Printer manufacturers and printer driver developers can package their printer driver software and make it available as distribution-independent software package.
This way users can install those drivers if their distribution does not or cannot ship them or ships it only in an outdated version.
 See also
- Portal:Printing for an overview