CUPS ships with good support for HP LaserJet-type printers. You can install the generic driver as follows :
root# lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E -m laserjet.ppd
The -m switch will retrieve the laserjet.ppd from the standard repository for not-yet-installed-PPDs, which CUPS typically stores in /usr/share/cups/model . Alternately, you may use -P / path /to/your.ppd .
The generic laserjet.ppd , however, does not support every special option for every LaserJet-compatible model. It constitutes a sort of " least common denominator " of all the models. If for some reason you must pay for the commercially available ESP Print Pro drivers, your first move should be to consult the database on http://www.linuxprinting.org/printer_list.cgi. Linuxprinting.org has excellent recommendations about which driver is best used for each printer. Its database is kept current by the tireless work of Till Kamppeter from MandrakeSoft, who is also the principal author of the foomatic-rip utility.
18.13.1 foomatic-rip and Foomatic Explained
Nowadays, most Linux distributions rely on the utilities of Linuxprinting.org to create their printing- related software (which, by the way, works on all UNIXes and on Mac OS X or Darwin, too). It is not known as well as it should be, that it also has 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 few years .
Recently, Foomatic has achieved the astonishing milestone of 1000 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!
126.96.36.199 690 " Perfect " Printers
At present, there are 690 devices dubbed as working perfectly, 181 mostly, 96 partially, 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.
188.8.131.52 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.
184.108.40.206 Foomatic's Strange Name
" 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 builtin rasterization filter ( pstoraster , derived from Ghostscript). On the other hand, CUPS provided brilliant support for controlling all printer options through standardized and well-defined PPD files (PostScript Printers Description files). Plus, CUPS was designed to be easily extensible.
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:
220.127.116.11 cupsomatic, pdqomatic, lpdomatic, directomatic
CUPS worked through a quickly-hacked up filter script named cupsomatic.  cupsomatic 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) and LPD-O-Matic  (for ” you guessed it ” LPD); the configuration here didn't use PPDs but other spooler-specific files.
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 FLTK  -based XPP  (a GUI frontend 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), GNUIpr  and LPRng  (both via an extended lpdomatic) and spoolerless printing (directomatic  ).
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.
18.104.22.168 The Grand Unification Achieved
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 foomatic-rip.  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 foomatic-db-engine!  Individual users just need to generate a single new PPD specific to their model by following 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).
22.214.171.124 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. These are:
126.96.36.199 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 forums.  This forum it's 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 toolchain 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 (who works at Mandrake), many additional contributions came from engineers with SuSE, RedHat, Connectiva, Debian, and others. Vendor-neutrality is an important goal of the Foomatic project.
188.8.131.52 Foomatic Database-Generated PPDs
The Foomatic database is an amazing piece of ingenuity in itself. Not only does it keep the printer and driver information, but it is organized in a way that it can generate PPD files on the fly from its internal XML-based datasets. While these PPDs are modelled to the Adobe specification of PostScript Printer Descriptions (PPDs), the Linuxprinting.org/Foomatic-PPDs do not normally drive PostScript printers. They are used to describe all the bells and whistles you could ring or blow on an Epson Stylus inkjet, or a HP Photosmart, or what-have-you. The main trick is one little additional line, not envisaged by the PPD specification, starting with the *cupsFilter keyword. It tells the CUPS daemon how to proceed with the PostScript print file (old-style Foomatic-PPDs named the cupsomatic filter script, while the new-style PPDs are now call foomatic-rip). This filter script calls Ghostscript on the host system (the recommended variant is ESP Ghostscript) to do the rendering work. foomaticrip knows which filter or internal device setting it should ask from Ghostscript to convert the PostScript printjob into a raster format ready for the target device. This usage of PPDs to describe the options of non-PS printers was the invention of the CUPS developers. The rest is easy. GUI tools (like KDE's marvelous kprinter,  or the GNOME gtklp,  xpp and the CUPS Web interface) read the PPD as well and use this information to present the available settings to the user as an intuitive menu selection.
18.13.2 foomatic-rip and Foomatic-PPD Download and Installation
Here are the steps to install a foomatic-rip driven LaserJet 4 Plus-compatible printer in CUPS (note that recent distributions of SuSE, UnitedLinux and Mandrake may ship with a complete package of Foomatic-PPDs plus the foomatic-rip utility. Going directly to Linuxprinting.org ensures that you get the latest driver/PPD files):
Once you print to a print queue set up with the Foomatic-PPD, CUPS will insert the appropriate commands and comments into the resulting PostScript jobfile. foomatic-rip is able to read and act upon these and uses some specially encoded Foomatic comments embedded in the jobfile. These in turn are used to construct (transparently for you, the user) the complicated Ghostscript command line telling the printer driver exactly how the resulting raster data should look and which printer commands to embed into the data stream. You need: