foomatic-rip and Foomatic Explained
Nowadays, most Linux distributions rely on the utilities from the
Linuxprinting.org to create their printing-related software
(which, by the way, works on all UNIXes and on Mac OS X and Darwin, too). The utilities from this sire have a
very end-user-friendly interface that allows for an easy update of drivers and PPDs for all supported models,
all spoolers, all operating systems, and all package formats (because there is none). Its history goes back a
Recently, Foomatic has achieved the astonishing milestone of
1,000 listed printer models.
Linuxprinting.org keeps all the important facts about printer drivers, supported models, and which options are
available for the various driver/printer combinations in its
Foomatic database. Currently there are
245 drivers in the database. Many drivers support
various models, and many models may be driven by different drivers its your choice!
At present, there are 690 devices dubbed as working perfectly: 181 are
perfect, and 46 are paperweights. Keeping in mind that most of these are
non-PostScript models (PostScript printers are automatically supported by CUPS to perfection by using their
own manufacturer-provided Windows PPD), and that a multifunctional device never qualifies as working perfectly
if it does not also scan and copy and fax under GNU/Linux then this is a truly astonishing
achievement! Three years ago the number was not more than 500, and Linux or UNIX printing at the time wasn't
anywhere near the quality it is today.
How the Printing HOWTO Started It All
A few years ago
Grant Taylor started it all. The
roots of today's Linuxprinting.org are in the first
Linux Printing HOWTO that he authored. As a
side-project to this document, which served many Linux users and admins to guide their first steps in this
complicated and delicate setup (to a scientist, printing is “applying a structured deposition of
distinct patterns of ink or toner particles on paper substrates”), he started to build in a little
Postgres database with information about the hardware and driver zoo that made up Linux printing of the time.
This database became the core component of today's Foomatic collection of tools and data. In the meantime, it
has moved to an XML representation of the data.
“Why the funny name?” you ask. When it really took off, around spring 2000, CUPS was far less
popular than today, and most systems used LPD, LPRng, or even PDQ to print. CUPS shipped with a few generic
drivers (good for a few hundred different printer models). These didn't support many device-specific options.
CUPS also shipped with its own built-in rasterization filter (
, derived from
Ghostscript). On the other hand, CUPS provided brilliant support for
printer options through standardized and well-defined PPD files. Plus, CUPS was designed to be easily
Taylor already had in his database a respectable compilation of facts about many more printers and the
Ghostscript “drivers” they run with. His idea, to generate PPDs from the database information and
use them to make standard Ghostscript filters work within CUPS, proved to work very well. It also killed
several birds with one stone:
It made all current and future Ghostscript filter
developments available for CUPS.
It made available a lot of additional printer models
to CUPS users (because often the traditional Ghostscript way of
printing was the only one available).
It gave all the advanced CUPS options (Web interface,
GUI driver configurations) to users wanting (or needing) to use
cupsomatic, pdqomatic, lpdomatic, directomatic
CUPS worked through a quickly hacked-up filter script named
ran the printfile through Ghostscript, constructing automatically the rather complicated command line needed.
It just needed to be copied into the CUPS system to make it work. To configure the way cupsomatic controls the
Ghostscript rendering process, it needs a CUPS-PPD. This PPD is generated directly from the contents of the
database. For CUPS and the respective printer/filter combo, another Perl script named CUPS-O-Matic did the PPD
generation. After that was working, Taylor implemented within a few days a similar thing for two other
spoolers. Names chosen for the config-generator scripts were
PDQ-O-Matic (for PDQ)
(for you guessed it LPD); the configuration here didn't use PPDs but other
From late summer of that year,
Till Kamppeter started
to put work into the database. Kamppeter had been newly employed by
Mandrakesoft to convert its printing system over to CUPS, after
they had seen his
XPP (a GUI front-end to the CUPS lp-command). He added a huge
amount of new information and new printers. He also developed the support for other spoolers, like
PPR (via ppromatic),
LPRng (both via an extended lpdomatic) and spooler-less printing (
So, to answer your question, “Foomatic” is the general name for all the overlapping code and data
behind the “*omatic” scripts. Foomatic, up to versions 2.0.x, required (ugly) Perl data
structures attached to Linuxprinting.org PPDs for CUPS. It had a different “*omatic” script for
every spooler, as well as different printer configuration files.
This has all changed in Foomatic versions 2.9 (beta) and released as “stable” 3.0. It has now
achieved the convergence of all *omatic scripts and is called the
This single script is the unification of the previously different spooler-specific *omatic scripts.
foomatic-rip is used by all the different spoolers alike, and because it can read PPDs (both the original
PostScript printer PPDs and the Linuxprinting.org-generated ones), all of a sudden all supported spoolers can
have the power of PPDs at their disposal. Users only need to plug foomatic-rip into their system. For users
there is improved media type and source support paper sizes and trays are easier to configure.
Also, the new generation of Linuxprinting.org PPDs no longer contains Perl data structures. If you are a
distro maintainer and have used the previous version of Foomatic, you may want to give the new one a spin, but
remember to generate a new-version set of PPDs via the new
Individual users just need to generate a single new PPD specific to their model by
the steps outlined in the Foomatic tutorial or in this chapter. This new development is truly amazing.
foomatic-rip is a very clever wrapper around the need to run Ghostscript with a different syntax, options,
device selections, and/or filters for each different printer or spooler. At the same time, it can read the PPD
associated with a print queue and modify the print job according to the user selections. Together with this
comes the 100% compliance of the new Foomatic PPDs with the Adobe spec. Some innovative features of the
Foomatic concept may surprise users. It will support custom paper sizes for many printers and will support
printing on media drawn from different paper trays within the same job (in both cases, even where there is no
support for this from Windows-based vendor printer drivers).
Driver Development Outside
Most driver development itself does not happen within Linuxprinting.org. Drivers are written by independent
maintainers. Linuxprinting.org just pools all the information and stores it in its database. In addition, it
also provides the Foomatic glue to integrate the many drivers into any modern (or legacy) printing system
known to the world.
Speaking of the different driver development groups, most of the work is currently done in three projects:
a free software project by IBM that tries to convert its printer
driver knowledge from good-ol' OS/2 times into a modern, modular,
universal driver architecture for Linux/UNIX (still beta). This
currently supports 437 models.
a free software project by HP to provide the support for its own
range of models (very mature, printing in most cases is perfect and
provides true photo quality). This currently supports 369
Gimp-Print a free software
effort, started by Michael Sweet (also lead developer for CUPS), now
directed by Robert Krawitz, which has achieved an amazing level of
photo print quality (many Epson users swear that its quality is
better than the vendor drivers provided by Epson for the Microsoft
platforms). This currently supports 522 models.
Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)
Linuxprinting.org today is the one-stop shop to download printer drivers. Look for printer information and
tutorials or solve
printing problems in its popular
forum is not just for GNU/Linux users, but admins of
commercial UNIX systems are also going there, and the relatively new
Mac OS X
forum has turned out to be one of the most frequented forums after only a few weeks.
Linuxprinting.org and the Foomatic driver wrappers around Ghostscript are now a standard tool-chain for
printing on all the important distros. Most of them also have CUPS underneath. While in recent years most
printer data had been added by Kamppeter, many additional contributions came from engineers with SuSE, Red
Hat, Conectiva, Debian, and others. Vendor-neutrality is an important goal of the Foomatic project. Mandrake
and Conectiva have merged and are now called Mandriva.