Until a couple of years ago, the choice for Linux users was simple: everyone ran the same old LPD, lifted mostly verbatim out of BSD's Net-2 code.
Today there are a number of systems to chose from. RedHat comes with LPRng, the original BSD UNIX Line Printer Daemon (LPD) revisited. LPD is also the name given to the network printing protocol. This network protocol is spoken not only by the LPD daemon itself, but by essentially every networked print-server, networked printer, and every other print spooler out there; LPD is the least common denominator of standards-based network printing.
LPRng is a far better implementation of the basic LPD design than the regular one; if you must use LPD, consider using LPRng instead. There is far less voodoo involved in making it do what you want, and what voodoo there is is well documented.
LPRng is far easier to administer for large installations (read: more than one printer, any serial printers, or any peculiar non-lpd network printers) and has a less haphazard code base than does stock lpd. It can even honestly claim to be secure - there are no SUID binaries, and it supports authentication via PGP or Kerberos.
RedHat has a GUI printer administration tool called printtool, which can add remote printers and printers on local devices. It lets you choose a ghostscript-supported printer type and UNIX device file to print to, then installs a print queue in /etc/printcap. This file is best not edited by hand:
# DO NOT EDIT! MANUAL CHANGES WILL BE LOST! # This file is autogenerated by printconf-backend during lpd init. # # Hand edited changes can be put in /etc/printcap.local, and will be included. lp:\ :ml=0:\ :mx=0:\ :sd=/var/spool/lpd/lp:\ :af=/var/spool/lpd/lp/lp.acct:\ :sh:\ :lp=|/usr/share/printconf/util/jetdirectprint:\ :lpd_bounce=true:\ :if=/usr/share/printconf/util/mf_wrapper: |
The printtool doesn't require you to learn LPD commands. Newer installations no longer include printtool but use printconf instead, which has both a text and a graphical user interface. Both interfaces look the same, the differences have mainly to do with how information is stored. More information, including adding printers for MS Windows clients, can be found in /usr/share/doc/printconf-<version>/.
Most Linux distributions have their own version of a graphical print tool.
An interesting new project is the Common UNIX Print System, an implementation of the Internet Printing Protocol (IPP), an HTTP-like RFC standard replacement protocol for the venerable (and clunky) LPD protocol. CUPS is distributed under the GNU Public License.
More information can be found at the CUPS homepage.
The Linux kernel will let you speak with any printer that you can plug into a serial, parallel, or USB port, plus any printer on the network, but this alone is insufficient; you must also be able to generate data that the printer will understand.
Linux supports almost any HP- and/or IBM-compatible printer. Generally, all printers that can be used on Windows NT or UNIX are fit for Linux as well.
Printers that only come with a Win9x driver could be problematic if they have no other support. Check with the hardware compatibility HOWTO when in doubt.
Your best choice would be a printer with native PostScript support in the firmware, since nearly all UNIX or Linux software producing printable output, produces it in PostScript, the publishing industry's printer control language of choice. PostScript printers are usually a bit more expensive, but it is a device-independent, open programming language.