Things are changing in the Linux printing world, fortunately for the better. Not that printing on any platform is a picnic, but us poor lusers down here in the Linux ghetto have been shamefully ignored for a long time. But finally printer vendors are recognizing that our money spends just the same as users on Brand X, and are offering up actual Linux drivers. (See Queue Up Linux Printing.)
Today we'll take a look at new developments in the Linux printing world, and untangle the complicated Linux printing subsystem. This consists of:
- the CUPS (Common Unix Printing System) printing subsystem
- the Gimp-Print/Gutenprint printer drivers
- the Foomatic printer drivers
- actual vendor-supplied printer drivers
- the commercial edition of CUPS, ESP Print Pro
- TurboPrint, a collection of excellent drivers for late-model color inkjet printers. TurboPrint does not stand alone, but is an add-on to CUPS
The first three may be all you'll ever need. They are free, and included in all Linux distributions. The last two items are commercial products that provide better-quality drivers and printer management utilities.
Printers speak several different languages, like PCL, HPGL, ESC-P, PostScript, and various Windows-only fad languages that come and go. Real PostScript printers always have a PPD file, have the most functionality, and Linux speaks PostScript natively, so get a real PostScript printer if you can.
Non-PostScript printers in CUPS require filters in addition to PPD files. These are already bundled with the CUPS drivers.
Gutenprint: More Better Gimp-Print
The Gimp-Print driver project has changed its name to Gutenprint. It started out as a printer plugin for the Gimp, then evolved into a collection of excellent general-purpose Linux printer drivers. So the name was changed. "Guten" honors Johannes Gutenberg, plus it means "good" in German. Gutenprint is in Debian Unstable, and will find its way into other distributions as well.
You are welcome to install it yourself, if you are bold and dauntless—it's not easy to install from sources. Both a Mac OS X package and a source tarball are available.
Newer, Better HP Drivers
In the olden days we had the HP-sponsored HPOJ (Hewlett-Packard OfficeJet) printer drivers for Linux. This has been superseded by HPLIP/HPIJS (Hewlett-Packard Linux Printing Project). HPLIP supports parallel, USB and networked printers. It doesn't always co-exist peacefully with HPOJ, so it's best to remove HPOJ, which should be a separate package.
HPIJS is a basic inkjet printer driver that runs on any printing subsystem: CUPS, LPR, LPD, whatever. HPLIP is a complete imaging and printing system for CUPS that includes HPIJS. To get complete functionality, especially with multi-function devices, look for the ones that use HPIJS. See the FAQ for more information on when to use HPLIP or HPIJS.
Oldtimers love to crab about CUPS (Common Unix Printing System). (Newtimers too.) It has its faults, especially the administration and user interface, which has not been updated or improved in years. You still have to edit configuration files, which IMO are not particularly well-organized, to enable and configure network printing. Not that anyone should fear editing text configuration files, it just cries for a more consistent administration interface.
KDE users have the very good KDEPrint utility, which administers both attached and networked printers from a single graphical interface. It automatically creates raw CUPS queues for shared Windows printers on Samba networks, lets users control their own print queues, and fine-tune printer settings.
CUPS has many strengths, and for you old geekbeards who think the old line-printer protocols are the bee's knees, you can have them. Chuck that old dot-matrix printer and join the 21st century, already. CUPS all by itself can serve Windows, Mac OS X (version 10.2 and up), Linux, and other Unix clients. Or combine it with Samba for easy Linux/Windows printer sharing. Take some old PC, slap a bunch of USB ports into it, install Linux and CUPS, and you have a dirt-cheap network printer server with all the stability, configurability, and security you desire.
You can really go nuts and send print jobs over the Internet with CUPS. Yes, really – the native CUPS protocol, IPP (Internet Printing Protocol) is built on top of poor old overworked HTTP, which is getting overloaded with everything in the world. All you do is insert the correct URI when you setup the printer on the local CUPS server, that points to the remote CUPS server:
The "printername" is the name entered in CUPS for the printer. There is no "/printers" folder; that refers to /etc/cups/printers.conf, which contains the configurations for all installed printers. (Do not edit this file, it's for CUPS' use only.)
Is it really worth trying to send print jobs over the Internet? Yes. If you have someone at the remote end who can handle the inevitable troubles (printer supplies, power failures, driver issues, etc.) it can replace faxing. Print quality is better, and you won't waste hard copies made just for the fax machine.
Finding PPD Files
All CUPS printers must have a PPD (Postscript Printer Description) file, even non-PostScript printers. See /etc/cups/ppd/ to see the PPDs of your locally attached printers, or /usr/share/ppd to see all available PPDs. If there is no vendor's PPD file available, some heroic Linux coder somewheres must cobble one up.
Sometimes you can extract the PPD file from a Windows PC and use it in CUPS. Chances are it's cunningly disguised inside a binary file, but it doesn't hurt to look. Or it may not exist at all on non-PostScript printers.
Adobe keeps an archive of PPD files for all printer manufacturers. These are .exe files, but you can unzip these on Linux with the unzip utility. Chances are anything on this page is already in CUPS, but it doesn't hurt to look.
You can run any stray PPDs that you find through the CUPS PPD checker. PPDs are plain text files, so you can easily fix any typos or syntax errors.
The Short Story
To sum up, the easy way to have good printing on Linux without hassles is to do these things:
- Purchase printers from vendors who blatantly support Linux
- Or, make sure your printer is well-supported in Linux by checking on Linuxprinting.org
- If you must use a printer that does not have good free drivers, try ESP Print Pro or TurboPrint
One of these days we shall discuss the good and bad of using networked workgroup printers, and standalone hardware printer servers. Hint: beware low-cost printer servers that serve only Windows. It's not always obvious which clients they support, or that Windows is required to administer the printer server. Don't be shy about using handy 800 numbers to call and find out.
- Printing with CUPS, Part 2
- Printing with CUPS, Part 1
- ANNOUNCE: Gutenprint 5.0.0-beta3
- Kurt Pfeifle's excellent CUPS troubleshooting guide
- My very own Linux Cookbook has two excellent chapters on printing: one with CUPS, and one with Samba. Both can do cross-platform network printing. Chapter 14: Printing with CUPS is free online