4151 lines
253 KiB
Plaintext
4151 lines
253 KiB
Plaintext
The Printing HOWTO
|
||
|
||
Grant Taylor
|
||
|
||
|
||
<gtaylor+pht@picante.com>
|
||
|
||
Dirk Allaert
|
||
|
||
|
||
<dirk.allaert@reachout.be>
|
||
|
||
v1.8, 2003-06-22
|
||
|
||
|
||
This is the Printing HOWTO, a collection of information on how to generate,
|
||
preview, print and fax anything under GNU/Linux. Almost everything applies
|
||
equally well to free software users using other Unix-like operating systems.
|
||
|
||
-----------------------------------------------------------------------------
|
||
Table of Contents
|
||
1. Introduction
|
||
1.1. Terminology
|
||
1.2. History
|
||
1.3. Copyright
|
||
|
||
|
||
2. Quick Start
|
||
2.1. Where to Get Help
|
||
|
||
|
||
3. How to print
|
||
3.1. With BSD LPD and the lpr command
|
||
3.2. With System V LPD and the lp command
|
||
3.3. With CUPS
|
||
3.4. GUI Printing Tools
|
||
|
||
|
||
4. Kernel printer devices
|
||
4.1. The lp device (kernels <=2.1.32)
|
||
4.2. The parport device (kernels >= 2.1.33)
|
||
4.3. Serial devices
|
||
4.4. USB Devices
|
||
|
||
|
||
5. Supported Printers
|
||
5.1. Postscript
|
||
5.2. Non-Postscript
|
||
5.3. What printers work?
|
||
5.4. How to buy a printer
|
||
|
||
|
||
6. Spooling software
|
||
6.1. CUPS
|
||
6.2. LPD
|
||
6.3. LPRng
|
||
6.4. PPR
|
||
6.5. Others
|
||
|
||
|
||
7. How it all works
|
||
7.1. CUPS
|
||
7.2. LPD
|
||
|
||
|
||
8. How to set things up
|
||
8.1. Configuring CUPS
|
||
8.2. Configuring LPD
|
||
8.3. Large Installations
|
||
8.4. Accounting
|
||
|
||
|
||
9. Vendor Solutions
|
||
9.1. Red Hat
|
||
9.2. Debian
|
||
9.3. SuSE
|
||
9.4. Caldera
|
||
9.5. Corel
|
||
9.6. Mandrake
|
||
9.7. Slackware
|
||
9.8. Other Distributions
|
||
|
||
|
||
10. Ghostscript.
|
||
10.1. Invoking Ghostscript
|
||
10.2. Ghostscript output tuning
|
||
|
||
|
||
11. Networks
|
||
11.1. Printing to a Unix/lpd host
|
||
11.2. Printing to a Windows or Samba printer
|
||
11.3. Printing to a NetWare Printer
|
||
11.4. Printing to an EtherTalk (Apple) printer
|
||
11.5. Printing to a networked printer
|
||
11.6. Running an if for remote printers with old LPDs
|
||
11.7. From Windows.
|
||
11.8. From an Apple.
|
||
11.9. From Netware.
|
||
11.10. Networked Printer Administration
|
||
|
||
|
||
12. Windows-only printers
|
||
12.1. The Ghostscript Windows redirector
|
||
12.2. HP Winprinters
|
||
12.3. Lexmark Winprinters
|
||
|
||
|
||
13. How to print to a fax machine.
|
||
13.1. Using a faxmodem
|
||
13.2. Using the Remote Printing Service
|
||
13.3. Commercial Faxing Services
|
||
|
||
|
||
14. How to generate something worth printing.
|
||
14.1. Markup languages
|
||
14.2. WYSIWYG Word Processors
|
||
|
||
|
||
15. Printing Photographs
|
||
15.1. Ghostscript and Photos
|
||
15.2. Paper
|
||
15.3. Printer Settings
|
||
15.4. Print Durability
|
||
15.5. Shareware and Commercial Software
|
||
|
||
|
||
16. On-screen previewing of printable things.
|
||
16.1. PostScript
|
||
16.2. TeX dvi
|
||
16.3. Adobe PDF
|
||
|
||
|
||
17. Serial printers under lpd
|
||
17.1. Setting up in printcap
|
||
17.2. Older serial printers that drop characters
|
||
|
||
|
||
18. What's missing?
|
||
18.1. Plumbing
|
||
18.2. Fonts
|
||
18.3. Drivers
|
||
|
||
|
||
19. Credits
|
||
A. GNU Free Documentation License
|
||
A.1. PREAMBLE
|
||
A.2. APPLICABILITY AND DEFINITIONS
|
||
A.3. VERBATIM COPYING
|
||
A.4. COPYING IN QUANTITY
|
||
A.5. MODIFICATIONS
|
||
A.6. COMBINING DOCUMENTS
|
||
A.7. COLLECTIONS OF DOCUMENTS
|
||
A.8. AGGREGATION WITH INDEPENDENT WORKS
|
||
A.9. TRANSLATION
|
||
A.10. TERMINATION
|
||
A.11. FUTURE REVISIONS OF THIS LICENSE
|
||
A.12. ADDENDUM: How to use this License for your documents
|
||
|
||
|
||
|
||
1. Introduction
|
||
|
||
The Printing HOWTO should contain everything you need to know to help you set
|
||
up printing services on your GNU/Linux box(en). As life would have it, it's a
|
||
bit more complicated than in the point-and-click world of Microsoft and
|
||
Apple, but it's also a bit more flexible and certainly easier to administer
|
||
for large LANs.
|
||
|
||
This document is structured so that most people will only need to read the
|
||
first half or so. Most of the more obscure and situation-dependent
|
||
information in here is in the last half, and can be easily located in the
|
||
Table of Contents, whereas some information through section 10 or 11 is
|
||
probably needed by most people.
|
||
|
||
If you find this document or the [http://www.linuxprinting.org/]
|
||
linuxprinting.org website useful, consider buying something (ink, for
|
||
example) through the referral links on the site; such purchases support this
|
||
effort.
|
||
|
||
The linuxprinting.org website is a good place to find the latest version; it
|
||
is also, of course, distributed from [http://www.tldp.org] tldp.org and your
|
||
friendly local LDP mirror.
|
||
-----------------------------------------------------------------------------
|
||
|
||
1.1. Terminology
|
||
|
||
I try to use consistent terminology throughout this document, so that users
|
||
of all free Unix-like systems, and even users of non-Unix-like free software,
|
||
can benefit. Unfortunately, there are many handy ambiguous names and many
|
||
awkward unambiguous names, so just to be clear, here's a quick glossary of
|
||
what each name means:
|
||
|
||
Unix
|
||
Unix is an operating system constructed at Bell Labs by various
|
||
researchers. A variety of operating systems, mostly commercial, are based
|
||
on this code and are also included in the name Unix.
|
||
|
||
Un*x
|
||
Un*x is an awkward word used to refer to every Unix-like operating
|
||
system. A Unixlike operating system provides something similar to a POSIX
|
||
programming interface as its native API. GNU/Linux, FreeBSD, Solaris,
|
||
AIX, and even special-purpose systems like Lynx and QNX are all Un*x.
|
||
|
||
Linux
|
||
Linux is a Unixlike kernel and a small assortment of peripheral software
|
||
written by Linus Torvalds and hundreds of other programmers. It forms the
|
||
foundation of the most widely used Un*x operating system.
|
||
|
||
GNU
|
||
The GNU (GNU's Not Unix) project is a longtime development effort to
|
||
produce an entirely free Unixlike operating system. The GNU Project is in
|
||
many ways the father of most modern free software efforts.
|
||
|
||
GNU/Linux
|
||
A GNU/Linux operating system is a complete system comprised of the Linux
|
||
kernel, its peripheral programs, and the GNU runtime environment of
|
||
libraries, utilities, end-user software, etc. Red Hat, Debian, Caldera,
|
||
SuSE, TurboLinux, and similar companies are all commercial vendors of
|
||
complete GNU/Linux systems.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
1.2. History
|
||
|
||
This have been severel generations of the Printing HOWTO. The history of the
|
||
PHT may be chronicled thusly:
|
||
|
||
1. Grant Taylor wrote the printing HOWTO in 1992 in response to all the
|
||
printing questions in comp.os.linux, and posted it. This predated the
|
||
HOWTO project by a few months and was the first FAQlet called a `howto'.
|
||
This edition was in plain ASCII.
|
||
|
||
2. After joining the HOWTO project, the Printing-HOWTO was merged with an
|
||
Lpd FAQ by Brian McCauley <B.A.McCauley@bham.ac.uk>; Grant Taylor
|
||
continued to co-author the PHT for two years or so. At some point he
|
||
incorporated the work of Karl Auer <Karl.Auer@anu.edu.au>. This
|
||
generation of the PHT was in TeXinfo, and available in PS, HTML, ASCII,
|
||
and Info.
|
||
|
||
3. After letting the PHT rot and decay for over a year, and an unsuccessful
|
||
attempt at getting someone else to maintain it, this rewrite happened.
|
||
This generation of the PHT is written in SGML using the LinuxDoc DTD and
|
||
the SGML-Tools-1 package. Beginning with version 3.27, it incorporated a
|
||
summary of a companion printer support database; before 3.27 there was
|
||
never a printer compatibility list in this HOWTO (!).
|
||
|
||
4. In mid-January, 2000, Grand found out about the PDQ print "spooler". PDQ
|
||
provides a printing mechanism so much better than lpd ever did that he
|
||
spent several hours playing with it, rewrote parts of this HOWTO, and
|
||
bumped the version number of the document to 4.
|
||
|
||
5. In mid-2000, Grant moved his printing website to www.linuxprinting.org,
|
||
and began offering more powerful configuration tools there. He also
|
||
converted the HOWTO to DocBook, and initiated coverage of CUPS, LPRng,
|
||
and GPR/libppd.
|
||
|
||
6. In early 2001, Grant began using the GNU Free Documentation License,
|
||
which seems quite suitable. He also began an effort to clarify what is
|
||
and isn't Linux-specific; there are several free Unixlike kernels out
|
||
there, and they all use the same printing software.
|
||
|
||
7. In early 2003, after listening to a presentation from Till Kampeter at
|
||
FOSDEM, I (Dirk) decided to update this HOWTO. Since Grant last edited
|
||
the HOWTO, CUPS has gotten more mature and a lot more popular.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
1.3. Copyright
|
||
|
||
Copyright (c) 1992-2001 Grant Taylor.
|
||
|
||
Permission is granted to copy, distribute and/or modify this document under
|
||
the terms of the GNU Free Documentation License, Version 1.1 or any later
|
||
version published by the Free Software Foundation; with no Invariant
|
||
Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of
|
||
the license is included in Appendix A.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2. Quick Start
|
||
|
||
The quickest way to get started is simply to use the setup tools provided by
|
||
your vendor. Assuming that this includes support for your driver, and
|
||
assuming that your vendor shipped the driver for your printer, then it should
|
||
be easy to get a basic setup going this way. For information on
|
||
vendor-provided setup tools, see Section 9.
|
||
|
||
If your vendor's tool doesn't work out, you should figure out if your printer
|
||
is supposed to work at all. Consult the printer compatibility listings in
|
||
Section 5.3.1 as well as the online version described there.
|
||
|
||
If your printer is known to work with a driver, check that you have that
|
||
driver, and install if it not. Typically you will be able to find a
|
||
contributed Ghostscript package including newer Ghostscript code and assorted
|
||
third-party drivers. If not, you can compile it yourself; the process is not
|
||
trivial, but it is well documented. See Section 10 for more information on
|
||
Ghostscript.
|
||
|
||
After installing the proper driver, attempt again to configure your printer
|
||
with your vendor's tools. If that fails, select a suitable third party tool
|
||
from those described in Section 8. If that also fails, you'll need to
|
||
construct your own setup; again see Section 8.
|
||
|
||
If you're still stuck, you've got a little troubleshooting to do. It's
|
||
probably best to read most of this document first to get a feel for how
|
||
things are supposed to work; then you'll be in a better position to debug.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.1. Where to Get Help
|
||
|
||
The Usenet newsgroups comp.os.linux.hardware, comp.os.linux.setup, and
|
||
comp.periphs.printers all have a share of general printing questions. These
|
||
are well-trafficked newsgroups where an answer is sure to be found; check in
|
||
the Google Groups archives, too. There are also the linuxprinting.foo
|
||
newsgroups; these are available both as web-based forums and via NNTP; see
|
||
the website.
|
||
|
||
Please also poke around the web looking for your answers. [http://
|
||
www.linuxprinting.org/] LinuxPrinting.org is an excellent place to start;
|
||
other websites and projects are linked to from there.
|
||
|
||
If you need more help, please try newsgroups, mailing lists, your
|
||
distribution's support line, and so forth. If do want to contact me, please
|
||
do so via the discussion forums on [http://www.linuxprinting.org/]
|
||
LinuxPrinting.org; this will give others a chance to respond, and will
|
||
archive your problem and any solution publicly for the next hapless user.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3. How to print
|
||
|
||
You actually use a different command to print depending on which spooling
|
||
software you use.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.1. With BSD LPD and the lpr command
|
||
|
||
If you've already got lpd setup to print to your printer, or your system
|
||
administrator already did so, or your vendor did so for you, then all you
|
||
need to do is learn how to use the lpr command. The [http://www.tldp.org/
|
||
HOWTO/Printing-Usage-HOWTO.html] Printing Usage HOWTO covers this, and a few
|
||
other queue manipulation commands you should probably know. Or just read the
|
||
lpr(1) man page.
|
||
|
||
In a nutshell, you specify the queue name with -P, and specify a filename to
|
||
print a file, or nothing to print from stdin. Driver options are
|
||
traditionally not controllable from lpr, but various systems accept certain
|
||
options with -o, -Z, or -J.
|
||
|
||
|
||
Example 1. lpr
|
||
lpr /etc/hosts
|
||
lpr -J "my hosts file" /etc/hosts
|
||
lpr -P mylaserjet /etc/services
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.2. With System V LPD and the lp command
|
||
|
||
There are two sets of commands that you may encounter if you have to deal
|
||
with several brands of Unix. The BSD based LPD print system (*BSD, Linux)
|
||
uses lpr (print),lpq (display queue),lprm (remove jobs). System V based
|
||
systems on the other hand use lp (print), lpstat (display queue), cancel
|
||
(remove jobs). Solaris, SCO and others are System V Unix systems.
|
||
|
||
On SYSV systems, you can of course consult the man page of the lp command. To
|
||
specify a queue you use the -d option and a filename to print a file, or
|
||
nothing to print from stdin.
|
||
|
||
|
||
Example 2. lp
|
||
lp /etc/hosts
|
||
lp -d mylaserjet /etc/services
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.3. With CUPS
|
||
|
||
CUPS provides both the System V and Berkeley command-line interfaces. This
|
||
means that you can use either lpr or lp to print. This is really nice if you
|
||
have a bunch of scripts that already use eg. lp or you have prior experience
|
||
with either a System V or a BSD flavor.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.4. GUI Printing Tools
|
||
|
||
Most spooling systems alone offer only a rather basic command-line interface.
|
||
Rather than use lpr directly, you may wish to obtain and use a front-end
|
||
interface. These generally let you fiddle with various printing options (the
|
||
printer, paper types, collation, n-up, etc) in an easy-to-use graphical way.
|
||
Some may have other features, as well.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.4.1. KDEPrint
|
||
|
||
KDEPrint allows users access to printing subsystems (CUPS, LPD, RLPR, LPRng
|
||
etc.) through a KDE graphical user interface. With KDEPrint, you can easily
|
||
print, administer jobs and printers and the printing daemon. KDEPrint is a
|
||
replacement for the old QtCUPS and KUPS. It is easy to use for both
|
||
developers and users. KDEPrint is already a part of KDE since 2.2.0 and has
|
||
several nice features.
|
||
|
||
kprinter is the print dialog of KDEPrint which allows you to select the
|
||
destination printer and change printer options. Among the destination
|
||
printers, there are a few virtual printers allowing you to print to email,
|
||
fax or pdf.
|
||
|
||
|
||
Figure 1. kprinter
|
||
|
||
[snapshot-kdeprint-kprinter]
|
||
|
||
You can use KDEPrint's kprinter in any application that lets you configure
|
||
your print command. Examples of these are Mozilla and OpenOffice.
|
||
|
||
|
||
Figure 2. Using kprinter with Mozilla
|
||
|
||
[snapshot-kdeprint-mozilla]
|
||
|
||
KDEPrint also features a Print Preview. that you can select from the Print
|
||
Dialog. This is accomplished by passing the print file through the filters
|
||
which make it suitable for displaying on screen using KGhostView or an
|
||
external application like gv.
|
||
|
||
The KDEPrint Job Viewer KJobViewer allows you to view, move and cancel print
|
||
jobs.
|
||
|
||
|
||
Figure 3. KJobViewer
|
||
|
||
[snapshot-kdeprint-kjobviewer]
|
||
|
||
You can find more information about KDEPrint at [http://printing.kde.org/]
|
||
http://printing.kde.org/.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.4.2. XPP
|
||
|
||
Another good choice for CUPS is the program [http://cups.sourceforge.net/xpp
|
||
/] XPP (see Figure 4). XPP is built from the FLTK library and is therefore
|
||
desktop agnostic.
|
||
|
||
To print with XPP, simply run the xpp program, and specify a file (or
|
||
nothing, if you're using xpp in place of lpr to print from stdin). Then
|
||
select a printer from the list of configured printers, and select any options
|
||
you'd like to apply from the various tabbed panels. See Figure 5 for an
|
||
example options panel highlighting the standard CUPS options.
|
||
|
||
When used with Foomatic driver interface system, XPP will also let you
|
||
control numeric parameters not normally supported by CUPS. This typically
|
||
includes such things as extended color tuning, cartridge alignment, and so
|
||
forth. See Figure 6 for an example of this.
|
||
|
||
You can save your selected printer and all the options with the `Save
|
||
Settings' button.
|
||
|
||
|
||
Figure 4. XPP Main Window
|
||
|
||
[snapshot-xpp-main]
|
||
|
||
|
||
Figure 5. CUPS/XPP Options Window
|
||
|
||
[snapshot-xpp-options]
|
||
|
||
|
||
Figure 6. CUPS/XPP Foomatic Options Window
|
||
|
||
[snapshot-xpp-foomaticoptions]
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.4.3. GPR
|
||
|
||
[http://www.compumetric.com/linux.html] GPR, by Thomas Hubbell, uses code
|
||
from CUPS to filter Postscript jobs and offer easy user control over job
|
||
options. Some options (like n-way printing, page selection, etc) are
|
||
implemented directly by GPR, while most others are implemented by the printer
|
||
or by the spooler's filter system.
|
||
|
||
GPR works with LPD or LPRng; or can be compiled specifically for use with
|
||
GNUlpr. When compiled normally, it uses VA's libppd directly to produce
|
||
printer-specific PostScript which it will then submit to the lpr command.
|
||
When compiled for GNUlpr, it will submit your unmodified Postscript job to
|
||
the lpr command, along with the set of job options you specify. This is
|
||
arguably the better route, since it allows the Postscript to be redirected to
|
||
a different printer by the spooler when appropriate; unfortunately it
|
||
requires GNUlpr, which is not in wide circulation (although it is of course
|
||
trivial to install).
|
||
|
||
To use GPR, first select a printer (by LPD queue name) and check that GPR has
|
||
loaded the proper PPD file. If it hasn't, you'll need to specify the PPD
|
||
filename, and specify your printer's options in the Printer Configuration
|
||
dialog (you get this dialog by pressing the Printer Configuration button; it
|
||
contains assorted printer setup options defined by the PPD).
|
||
|
||
Once you've configured your printer in GPR, you can print jobs by specifying
|
||
the filename and selecting the proper options from the `Common' and
|
||
`Advanced' tabbed panels. The `Common' options are implemented directly by
|
||
GPR for all printers, while the `Advanced' options are defined by the PPD
|
||
file for your printer. You can see these option panels in Figure 8 and Figure
|
||
9.
|
||
|
||
|
||
Figure 7. GPR Main Options
|
||
|
||
[snapshot-gpr-main]
|
||
|
||
|
||
Figure 8. GPR Common Options
|
||
|
||
[snapshot-gpr-common]
|
||
|
||
|
||
Figure 9. GPR Printer Options
|
||
|
||
[snapshot-gpr-printer]
|
||
-----------------------------------------------------------------------------
|
||
|
||
4. Kernel printer devices
|
||
|
||
There are two completely different device drivers for the parallel port;
|
||
which one you are using depends on your kernel version (which you can find
|
||
out with the command uname -a). The driver changed in Linux 2.1.33;
|
||
essentially all current systems will be running kernel 2.2 or later, so
|
||
you'll probably want to skip ahead to the parport driver section.
|
||
|
||
A few details are the same for both styles of driver. Most notably, many
|
||
people have found that Linux will not detect their parallel port unless they
|
||
disable "Plug and Play" in their PC BIOS. (This is no surprise; the track
|
||
record for PnP of non-PCI devices with Windows and elsewhere has been
|
||
something of a disaster).
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.1. The lp device (kernels <=2.1.32)
|
||
|
||
The Linux kernel (<=2.1.32), assuming you have compiled in or loaded the lp
|
||
device (the output of cat /proc/devices should include the device lp if it is
|
||
loaded), provides one or more of /dev/lp0,/dev/lp1, and /dev/lp2. These are
|
||
NOT assigned dynamically, rather, each corresponds to a specific hardware I/O
|
||
address. This means that your first printer may be lp0 or lp1 depending on
|
||
your hardware. Just try both.
|
||
|
||
A few users have reported that their bidirectional lp ports aren't detected
|
||
if they use an older unidirectional printer cable. Check that you've got a
|
||
decent cable.
|
||
|
||
One cannot run the plip and lp drivers at the same time on any given port
|
||
(under 2.0, anyway). You can, however, have one or the other driver loaded at
|
||
any given time either manually, or by kerneld with version 2.x (and later
|
||
1.3.x) kernels. By carefully setting the interrupts and such, you can
|
||
supposedly run plip on one port and lp on the other. One person did so by
|
||
editing the drivers; I eagerly await a success report of someone doing so
|
||
with only a clever command line.
|
||
|
||
There is a little utility called [http://www.linuxprinting.org/man/
|
||
tunelp.8.html] tunelp floating about with which you, as root, can tune the
|
||
Linux 2.0 lp device's interrupt usage, polling rate, and other options.
|
||
|
||
When the lp driver is built into the kernel, the kernel will accept an lp=
|
||
option to set interrupts and io addresses:
|
||
When the lp driver is built in to the kernel, you may use the
|
||
LILO/LOADLIN command line to set the port addresses and interrupts
|
||
that the driver will use.
|
||
|
||
Syntax: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
|
||
|
||
For example: lp=0x378,0 or lp=0x278,5,0x378,7 **
|
||
|
||
Note that if this feature is used, you must specify *all* the ports
|
||
you want considered, there are no defaults. You can disable a
|
||
built-in driver with lp=0.
|
||
|
||
When loaded as a module, it is possible to specify io addresses and interrupt
|
||
lines on the insmod command line (or in/etc/conf.modules so as to affect
|
||
kerneld) using the usual module argument syntax. The parameters areio=
|
||
port0,port1,port2 and irq=irq0,irq1,irq2. Read the man page for[http://
|
||
www.linuxprinting.org/man/insmod.1.html] insmod for more information on this.
|
||
|
||
**For those of you who can never find the standard port numbers when you need
|
||
them, they are as in the second example above. The other port (lp0) is at
|
||
0x3bc. I've no idea what interrupt it usually uses.
|
||
|
||
The source code for the Linux 2.0 parallel port driver is in /usr/src/linux/
|
||
drivers/char/lp.c.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.2. The parport device (kernels >= 2.1.33)
|
||
|
||
Beginning with kernel 2.1.33 (and available as a patch for kernel 2.0.30),
|
||
the lp device is merely a client of the new parport device. The addition of
|
||
the parport device corrects a number of the problems that plague the old lp
|
||
device driver - it can share the port with other drivers, it dynamically
|
||
assigns available parallel ports to device numbers rather than enforcing a
|
||
fixed correspondence between I/O addresses and port numbers, and so forth.
|
||
|
||
The advent of the parport device has enabled a whole flock of new
|
||
parallel-port drivers for things like Zip drives, Backpack CD-ROMs and disks,
|
||
and so forth. Some of these are also available in versions for 2.0 kernels;
|
||
look around on the web.
|
||
|
||
The main difference that you will notice, so far as printing goes, is that
|
||
parport-based kernels dynamically assign lp devices to parallel ports. So
|
||
what was lp1 under Linux 2.0 may well be lp0 under Linux 2.2. Be sure to
|
||
check this if you upgrade from an lp-driver kernel to a parport-driver
|
||
kernel.
|
||
|
||
The most popular problems with this device seems to stem from
|
||
misconfiguration:
|
||
|
||
The Distribution
|
||
Some GNU/Linux distributions don't ship with a properly setup /etc/
|
||
modules.conf (or /etc/conf.modules), so the driver isn't loaded properly
|
||
when you need it to be. With a recent modutils, the proper magical lines
|
||
from modules.conf seem to be:
|
||
alias /dev/printers lp # only for devfs?
|
||
alias /dev/lp* lp # only for devfs?
|
||
alias parport_lowlevel parport_pc # missing in Red Hat 6.0-6.1
|
||
|
||
The BIOS
|
||
Many PC BIOSes will make the parallel port into a Plug-and-Play device.
|
||
This just adds needless complexity to a perfectly simple device that is
|
||
nearly always present; turn off the PnP setting for your parallel port
|
||
("LPT1" in many BIOSes) if your parallel port isn't detected by the Linux
|
||
driver. The correct setting is often called "legacy", "ISA", or "0x378",
|
||
but probably not "disabled".
|
||
|
||
|
||
You can also read the [http://people.redhat.com/twaugh/parport/html/
|
||
parportguide.html] parport documentation in your kernel sources, or look at
|
||
the parport web site.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.3. Serial devices
|
||
|
||
Serial devices are usually called something like/dev/ttyS1 under Linux. The
|
||
utility [http://www.linuxprinting.org/man/stty.1.html] stty will allow you to
|
||
interactively view or set the settings for a serial port; [http://
|
||
www.linuxprinting.org/man/setserial.8.html] setserial will allow you to
|
||
control a few extended attributes and configure IRQs and I/O addresses for
|
||
non-standard ports. Further discussion of serial ports under Linux may be
|
||
found in the [http://metalab.unc.edu/mdw/HOWTO/Serial-HOWTO.html]
|
||
Serial-HOWTO.
|
||
|
||
When using a slow serial printer with flow control, you may find that some of
|
||
your print jobs get truncated. This may be due to the serial port, whose
|
||
default behavior is to purge any untransmitted characters from its buffer 30
|
||
seconds after the port device is closed. The buffer can hold up to 4096
|
||
characters, and if your printer uses flow control and is slow enough that it
|
||
can't accept all the data from the buffer within 30 seconds after printing
|
||
software has closed the serial port, the tail end of the buffer's contents
|
||
will be lost. If the command cat file > /dev/ttyS2 produces complete
|
||
printouts for short files but truncated ones for longer files, you may have
|
||
this condition.
|
||
|
||
The 30 second interval can be adjusted through the "closing_wait"
|
||
command-line option of setserial (version 2.12 and later). A machine's serial
|
||
ports are usually initialized by a call to setserial in the rc.serial boot
|
||
file. The call for the printing serial port can be modified to set the
|
||
closing_wait at the same time as it sets that port's other parameters.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.4. USB Devices
|
||
|
||
-----------------------------------------------------------------------------
|
||
4.4.1. USB 1.1
|
||
|
||
Linux supports USB pretty well. USB should work with any late-model 2.2
|
||
kernel, and any 2.4 kernel or newer. Of course you need kernel support for
|
||
USB, either linked in or through a module (recommended).
|
||
|
||
If you have a modular kernel, the following modules need to be loaded:
|
||
|
||
<EFBFBD><EFBFBD>*<2A>usb-core.o
|
||
|
||
<EFBFBD><EFBFBD>*<2A>usb-uhci.o or uhci.o or usb-ohci.o
|
||
|
||
<EFBFBD><EFBFBD>*<2A>printer.o
|
||
|
||
|
||
Which one of usb-uhci.o or uhci.o or usb-ohci.o you need depends on the kind
|
||
of motherboard or adaptor you have. Intel and Via motherboards and Via based
|
||
adaptors are UHCI (you can use either usb-uhci.o or uhci.o). You can find out
|
||
which type of HCI (Host Controller Interface) you have with lspci -v|grep HCI
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.4.2. USB 2.0
|
||
|
||
To get high speed transfers out of a USB 2.0 capable device you must attach
|
||
it to an USB 2.0 controller and use the EHCI driver (ehci-hcd.o). A recent
|
||
2.4 kernel or higher is recommended if you want to use USB 2.0.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.4.3. Hints
|
||
|
||
One thing to remember is that USB devices are dynamically allocated. A USB
|
||
printer gets assigned a device file (/dev/usb/lp*) when it is turned on or
|
||
connected. This could mean that print jobs are sent to the wrong printer
|
||
because you turned them on in a certain order. CUPS uses special Uri's
|
||
containing manufacturer, model and printer serial number to keep sending the
|
||
jobs to the correct physical printer.
|
||
|
||
Although most USB printers work fine on Linux, there are exceptions. For
|
||
example the new MF devices from Epson (Stylus CX3200/CX5200) return garbage
|
||
when one polls the IEEE-1284 ID string via IOCTL, for example with the code
|
||
of the CUPS "usb" backend. Whereas one can poll the ID string via an
|
||
Epson-proprietary method.
|
||
|
||
Till Kamppeter has written some tools to retrieve the device ID string from
|
||
USB printers. [http://www.linuxprinting.org/download/printing/
|
||
getusbprinterid.pl] getusbprinterid.pl and [http://www.linuxprinting.org/
|
||
download/printing/usb_id/test.c] usb_id_test.c are the same thing but
|
||
respectively in Perl and C. As mentioned above, the new MF devices from Epson
|
||
are an exception, but the "Epson proprietary method" is implemented in the
|
||
ttink tool of the [http://xwtools.automatix.de/] MTink package.
|
||
|
||
More documentation about USB is available at the [http://www.linux-usb.org/]
|
||
Linux USB Website.
|
||
-----------------------------------------------------------------------------
|
||
|
||
5. Supported Printers
|
||
|
||
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.
|
||
Unfortunately, this alone is insufficient; you must also be able to generate
|
||
data that the printer will understand. Primary among the incompatible
|
||
printers are those referred to as "Windows" or "GDI" printers. They are
|
||
called this because all or part of the printer control language and the
|
||
design details of the printing mechanism are not documented. Typically the
|
||
vendor will provide a Windows driver and happily sell only to Windows users;
|
||
this is why they are called Winprinters. In some cases the vendor also
|
||
provides drivers for NT, OS/2, or other operating systems.
|
||
|
||
Many of these printers do not work with free software. A few of them do, and
|
||
some of them only work a little bit (usually because someone has reverse
|
||
engineered the details needed to write a driver). See the printer support
|
||
list below for details on specific printers.
|
||
|
||
A few printers are in-between. Some of NEC's models, for example, implement a
|
||
simple form of the standard printer language PCL that allows PCL-speaking
|
||
software to print at up to 300dpi, but only NEC knows how to get the full
|
||
600dpi out of these printers.
|
||
|
||
Note that if you already have one of these Winprinters, there are roundabout
|
||
ways to print to one, but they're rather awkward. SeeSection 12 in this
|
||
document for more discussion of Windows-only printers.
|
||
-----------------------------------------------------------------------------
|
||
|
||
5.1. Postscript
|
||
|
||
As for what printers do work with free software, the best choice is to buy a
|
||
printer with native PostScript support in firmware. Nearly all Un*x software
|
||
that produces printable output produces it in PostScript, so obviously it'd
|
||
be nice to get a printer that supports PostScript directly. Unfortunately,
|
||
PostScript support is scarce outside the laser printer domain, and is
|
||
sometimes a costly add-on.
|
||
|
||
Un*x software, and the publishing industry in general, have standardized upon
|
||
Postscript as the printer control language of choice. This happened for
|
||
several reasons:
|
||
|
||
Timing
|
||
Postscript arrived as part of the Apple Laserwriter, a perfect companion
|
||
to the Macintosh, the system largely responsible for the desktop
|
||
publishing revolution of the 80s.
|
||
|
||
It's device-independent
|
||
Postscript programs can be run to generate output on a pixel screen, a
|
||
vector screen, a fax machine, or almost any sort of printer mechanism,
|
||
without the original program needing to be changed. Postscript output
|
||
will look the same on any Postscript device, at least within the limits
|
||
of the device's capabilities. Before the creation of PDF, people
|
||
exchanged complex documents online as Postscript files. The only reason
|
||
this standard didn't "stick" was because Windows machines didn't usually
|
||
include a Postscript previewer, so Adobe specified hyperlinks and
|
||
compression for Postscript, called the result PDF, distributed previewers
|
||
for it, and invented a market for their "distiller" tools (the
|
||
functionality of which is also provided by ghostscript's ps2pdf and
|
||
pdf2ps programs).
|
||
|
||
It's a real programming language
|
||
Postscript is a complete programming language; you can write software to
|
||
do most anything in it. This is mostly useful for defining subroutines at
|
||
the start of your program to reproduce complex things over and over
|
||
throughout your document, like a logo or a big "DRAFT" in the background.
|
||
But there's no reason you couldn't compute ?? in a Postscript program.
|
||
|
||
It's open
|
||
Postscript is fully specified in a publically available series of books
|
||
(which you can find at any good bookstore) and also online at [http://
|
||
partners.adobe.com/asn/developer/technotes/postscript.html] http://
|
||
partners.adobe.com/asn/developer/technotes/postscript.html. Although
|
||
Adobe invented it and provides the dominant commercial implementation,
|
||
other vendors like Aladdin produce independently coded implementations as
|
||
well.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
5.2. Non-Postscript
|
||
|
||
Failing the (larger) budget necessary to buy a Postscript printer, you can
|
||
use any printer supported by Ghostscript, the free Postscript interpreter
|
||
used in lieu of actual printer Postscript support. Note that most GNU/Linux
|
||
distributions can only ship a somewhat outdated version of Ghostscript due to
|
||
the license. Fortunately, there is usually a prepackaged up to date
|
||
Ghostscript made available in each distribution's contrib area.
|
||
|
||
Adobe now has a new printer language called "PrintGear". I think it's a
|
||
greatly simplified binary format language with some Postscript heritage but
|
||
no Postscript compatibility. And I haven't heard of Ghostscript supporting
|
||
it. But some PrintGear printers seem to support another language like PCL,
|
||
and these printers will work with GNU/Linux (if the PCL is implemented in the
|
||
printer and not in a Windows driver).
|
||
|
||
Similarly, Adobe offers a host-based Postscript implementation called
|
||
PressReady. This works much like Ghostscript does to provide Postscript
|
||
support for a non-Postscript printer, but has the disadvantage that it runs
|
||
only on Windows.
|
||
-----------------------------------------------------------------------------
|
||
|
||
5.3. What printers work?
|
||
|
||
You can look in several places to see if a particular printer will work. The
|
||
cooperatively maintained Printing HOWTO printer [http://www.linuxprinting.org
|
||
/database.html] database aims to be a comprehensive listing of the state of
|
||
GNU/Linux printer support. A summary of it is below; be sure to check online
|
||
for more details and information on what driver(s) to use.
|
||
|
||
The best bet for new printer shoppers is to consult the list of [http://
|
||
www.linuxprinting.org/suggested.html] suggested printers. These center around
|
||
color inkjets and mono laser devices. You can even help support this document
|
||
and the website by buying from one of [http://www.linuxprinting.org/
|
||
affiliate.html] affiliated vendors.
|
||
|
||
Ghostscript's printer compatibility page has a list of some working printers,
|
||
as well as links to other pages.
|
||
|
||
[http://groups.google.com/] Google groups contains hundreds of "it works"
|
||
and "it doesn't work" testimonials. Try all three, and when you're done,
|
||
check that your printer is present and correct in the [http://
|
||
www.linuxprinting.org/database.html] database, so that it will be listed
|
||
properly in this document in the future.
|
||
-----------------------------------------------------------------------------
|
||
|
||
5.3.1. Printer compatibility list
|
||
|
||
This section is a summary of the online database. The online version includes
|
||
device specifications, notes, driver information, user-maintained
|
||
documentation, manufacturer web pages, and interface scripts for using
|
||
drivers with several print spooling systems (including LPR, LPRng, PDQ, and
|
||
CUPS). The online version of this list is also interactive; people can and do
|
||
add printers all the time, so be sure to check it as well. Finally, if your
|
||
printer isn't listed, add it!
|
||
|
||
Note that this listing is not gospel; people sometimes add incorrect
|
||
information, which are eventually weeded out. Entries which have not been
|
||
sanity-checked are marked with an asterisk (*). Verify from Google Groups
|
||
that a printer works for someone before buying it based on this list.
|
||
|
||
Printers here are categorized into four types:
|
||
|
||
Perfectly
|
||
Perfect printers work perfectly - you can print to the full ability of
|
||
the printer, including color, full resolution, etc. In a few cases
|
||
printers with undocumented "resolution enhancement" modes that don't work
|
||
are listed as perfect; generally the difference in print quality is small
|
||
enough that it isn't worth worrying about.
|
||
|
||
Mostly
|
||
You can print fine, but there may be minor limitations of one sort or
|
||
another in either printing or other features.
|
||
|
||
Partially
|
||
You can print, but maybe not in color, or only at a poor resolution. See
|
||
the online listing for information on the limitation.
|
||
|
||
Paperweight
|
||
You can't print a darned thing; typically this will be due to lack of a
|
||
driver and/or documentation on how to write one. Paperweights
|
||
occasionally get "promoted", either when someone discovers that an
|
||
existing driver works, or when someone creates a new driver, but you
|
||
shouldn't count on this happening.
|
||
|
||
|
||
In all cases, since this information is provided by dozens of people, none of
|
||
it is guaranteed to be correct; entries with an asterisk (*) are particularly
|
||
suspect. The facts, however, should be easy to corroborate from the driver
|
||
web pages and manufacturer web sites.
|
||
|
||
And without further ado, here is the printer compatibility list:
|
||
|
||
|
||
Table 1. Linux Printer Support
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Manufacturer|Perfectly |Mostly |Partially |Paperweight |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Alps |<7C> |MD-1000 |<7C> |<7C> |
|
||
| | |MD-1300 | | |
|
||
| | |MD-1500* | | |
|
||
| | |MD-2000 | | |
|
||
| | |MD-2010 | | |
|
||
| | |MD-2300 | | |
|
||
| | |MD-4000 | | |
|
||
| | |MD-5000 | | |
|
||
| | |MD-5500 | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Anitech |M24 |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Apollo |P-1200 |<7C> |<7C> |<7C> |
|
||
| |P-1220<32>Barbie | | | |
|
||
| |P-1250 | | | |
|
||
| |P-2100 | | | |
|
||
| |P-2150 | | | |
|
||
| |P-2200 | | | |
|
||
| |P-2250 | | | |
|
||
| |P-2500 | | | |
|
||
| |P-2550 | | | |
|
||
| |P-2600 | | | |
|
||
| |P-2650 | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Apple |12/640ps |Color<6F>StyleWriter<65>1500|<7C> |<7C> |
|
||
| |Dot<6F>Matrix |Color<6F>StyleWriter<65>2200| | |
|
||
| |ImageWriter |Color<6F>StyleWriter<65>2400| | |
|
||
| |ImageWriter<65>LQ |Color<6F>StyleWriter<65>2500| | |
|
||
| |LaserWriter<65>4/600* |* | | |
|
||
| |LaserWriter<65>16/600* |ImageWriter<65>II* | | |
|
||
| |LaserWriter<65>IINTX* |LaserWriter<65>NT | | |
|
||
| |LaserWriter<65>IIg |StyleWriter<65>1200 | | |
|
||
| |LaserWriter<65>Pro<72>630* |StyleWriter<65>I | | |
|
||
| |LaserWriter<65>Select<63>360* |StyleWriter<65>II | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Avery |Personal<61>Label<65>Printer+* |Personal<61>Label<65>Printer|<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Brother |HL-4Ve |HJ-400 |DCP-1200 |4550* |
|
||
| |HL-8 |HL-1030 |HJ-100i* |MP-21C |
|
||
| |HL-10V |HL-1050 |HL-4V* | |
|
||
| |HL-10h |HL-1060 |HL-6* | |
|
||
| |HL-630 |HL-1240 |HL-6V* | |
|
||
| |HL-660 | |HL-630/631* | |
|
||
| |HL-720 | |HL-641/645/655M* | |
|
||
| |HL-730 | |HL-665* | |
|
||
| |HL-760 | |HL-730/730DX* | |
|
||
| |HL-820 | |HL-1270* | |
|
||
| |HL-960* | |HL-P2000* | |
|
||
| |HL-1020 | |M-1309* | |
|
||
| |HL-1040 | |M-1324* | |
|
||
| |HL-1070* | |M-1809* | |
|
||
| |HL-1250 | |M-1809<30>Color* | |
|
||
| |HL-1260 | |M-1824L* | |
|
||
| |HL-1270N | |M-1824L<34>Color* | |
|
||
| |HL-1440 | |M-1909* | |
|
||
| |HL-1450 | |M-1909<30>Color* | |
|
||
| |HL-1470N | |M-1924L* | |
|
||
| |HL-1650 | |M-1924L<34>Color* | |
|
||
| |HL-1660e | |M-4309* | |
|
||
| |HL-1670N | |MC-3000 | |
|
||
| |HL-2060 | |MFC<46>7150C | |
|
||
| |HL-2400CeN | |MFC-4000/4500/5500* | |
|
||
| |HL-2460 | |MFC-4350 | |
|
||
| |HL-2460N | |MFC-6550MC | |
|
||
| |HL-3400CN | |MFC-6550MC/7550MC* | |
|
||
| | | |MFC-8300 | |
|
||
| | | |MFC-9050 | |
|
||
| | | |MFC-9100c* | |
|
||
| | | |MFC-9500 | |
|
||
| | | |MFC-9600 | |
|
||
| | | |MFC-P2000* | |
|
||
| | | |MFC-P2500 | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|CItoh |M8510 |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|CalComp |Artisan<61>1023<32>penplotter* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Canon |BJ-5 |BJC-50* |BJ<42>F100* |BJC-5000* |
|
||
| |BJ-10e |BJC-55* |BJ<42>F200* |BJC-5100 |
|
||
| |BJ-10v* |BJC-80* |BJ<42>F600* |BJC-8500* |
|
||
| |BJ-15v* |BJC-85* |BJ<42>F800* |LBP-460* |
|
||
| |BJ-20 |BJC-240* |BJ<42>F6000* |LBP-600 |
|
||
| |BJ-30* |BJC-1000* |BJ-30v* |LBP-660* |
|
||
| |BJ-35v* |BJC-2000* |BJ-200e* |LBP-800* |
|
||
| |BJ-100 |BJC-2010* |BJ-220JCII* |Multipass<73>L6000* |
|
||
| |BJ-200 |BJC-2100 |BJ-220JSII* |S200 |
|
||
| |BJ-330 |BJC-2110 |BJ-230* | |
|
||
| |BJC-70 |BJC-3000 |BJ-300 | |
|
||
| |BJC-210 |BJC-4310SP |BJC-35v* | |
|
||
| |BJC-250* |BJC-6000 |BJC-35vII* | |
|
||
| |BJC-250ex |BJC-7004* |BJC-50v* | |
|
||
| |BJC-255SP |BJC-8200* |BJC-80v* | |
|
||
| |BJC-265SP |LBP-4sx |BJC-210J* | |
|
||
| |BJC-600* |S100 |BJC-210SP | |
|
||
| |BJC-610 |S400* |BJC-240J* | |
|
||
| |BJC-620 |imageRunner<65>330s |BJC-250J* | |
|
||
| |BJC-680J* | |BJC-400J* | |
|
||
| |BJC-800 | |BJC-410J* | |
|
||
| |BJC-880J* | |BJC-420J* | |
|
||
| |BJC-4000 | |BJC-430J* | |
|
||
| |BJC-4100 | |BJC-430J<30>Lite* | |
|
||
| |BJC-4200 | |BJC-430JD<4A>Lite* | |
|
||
| |BJC-4300* | |BJC-440J* | |
|
||
| |BJC-4400* | |BJC-455J* | |
|
||
| |BJC-4550* | |BJC-465J* | |
|
||
| |GP<47>335* | |BJC-600J* | |
|
||
| |GP<47>405 | |BJC-600e* | |
|
||
| |LBP-4+ | |BJC-610JW* | |
|
||
| |LBP-4U | |BJC-620JW* | |
|
||
| |LBP-8A1 | |BJC-700J* | |
|
||
| |LBP-310* | |BJC-820* | |
|
||
| |LBP-320<32>Pro* | |BJC-820J* | |
|
||
| |LBP-350* | |BJC-4200<30>Photo* | |
|
||
| |LBP-430 | |BJC-4304<30>Photo* | |
|
||
| |LBP-1000* | |BJC-4650* | |
|
||
| |LBP-1260 | |BJC-5500* | |
|
||
| |LBP-1760* | |BJC-5500J* | |
|
||
| |LIPS-II+* | |BJC-6100* | |
|
||
| |LIPS-III* | |BJC-6200* | |
|
||
| |LIPS-IV* | |BJC-6500* | |
|
||
| |LIPS-IVv* | |BJC-7000* | |
|
||
| | | |BJC-7004<30>Photo* | |
|
||
| | | |BJC-7100* | |
|
||
| | | |BJC-8000* | |
|
||
| | | |MultiPASS<53>C2500* | |
|
||
| | | |MultiPASS<53>C3000* | |
|
||
| | | |MultiPASS<53>C3500* | |
|
||
| | | |MultiPASS<53>C5000* | |
|
||
| | | |MultiPASS<53>C5500 | |
|
||
| | | |S300 | |
|
||
| | | |S450* | |
|
||
| | | |S500 | |
|
||
| | | |S600 | |
|
||
| | | |S630 | |
|
||
| | | |S800 | |
|
||
| | | |S4500* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Citizen |ProJet<65>II* |printiva700 |<7C> |<7C> |
|
||
| |ProJet<65>IIc |printiva1700 | | |
|
||
| |printiva600C | | | |
|
||
| |printiva600U | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Compaq |<7C> |IJ750* |IJ900 |IJ300* |
|
||
| | |IJ1200 | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|DEC |DECWriter<65>500i* |1800* |<7C> |<7C> |
|
||
| |DECwriter<65>110i* |LN17* | | |
|
||
| |DECwriter<65>520ic* | | | |
|
||
| |LA50* | | | |
|
||
| |LA70* | | | |
|
||
| |LA75* | | | |
|
||
| |LA75<37>Plus* | | | |
|
||
| |LJ250 | | | |
|
||
| |LN03* | | | |
|
||
| |LN07* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Daewoo |<7C> |<7C> |DP-3630H* |<7C> |
|
||
| | | |DP-7200H* | |
|
||
| | | |DP-7400C* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Dymo-CoStar |ASCII<49>250* |<7C> |<7C> |<7C> |
|
||
| |ASCII+* | | | |
|
||
| |EL40* | | | |
|
||
| |EL60* | | | |
|
||
| |LabelWriter<65>II* | | | |
|
||
| |LabelWriter<65>XL* | | | |
|
||
| |LabelWriter<65>XL+* | | | |
|
||
| |SE250* | | | |
|
||
| |SE250+* | | | |
|
||
| |Turbo* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Epson |ActionLaser<65>1100* |EPL-5700 |9-pin<69>136<33>Col* |AcuLaser<65>C1000 |
|
||
| |ActionLaser<65>II* |MC<4D>5000 |9-pin<69>80<38>Col* |EPL-5500W* |
|
||
| |ActionPrinter<65>3250* |MJ<4D>520C |24-pin<69>136<33>Col* |EPL-5700L |
|
||
| |AcuLaser<65>C2000 |MJ<4D>5100C |24-pin<69>80<38>Col* |EPL-5800L |
|
||
| |AcuLaser<65>C2000PS |PM<50>790PT* |AP-800* |EPL-5900L |
|
||
| |AcuLaser<65>C4000 |PM<50>850PT |AP-2250* |Stylus<75>CX3200 |
|
||
| |AcuLaser<65>C4000PS |PM<50>4000PX |AP-3250* | |
|
||
| |AcuLaser<65>C8500 |PM<50>5000C |AP-3260* | |
|
||
| |AcuLaser<65>C8500PS |Stylus<75>Color<6F>200* |AP-5000* | |
|
||
| |CL<43>700 |Stylus<75>Color<6F>300* |AP-5500* | |
|
||
| |CL<43>750 |Stylus<75>Color<6F>II |ActionLaser<65>1000/ | |
|
||
| |Dot<6F>Matrix |Stylus<75>Color<6F>IIs |EPL-5000* | |
|
||
| |EM<45>900C |Stylus<75>Photo<74>785* |ActionLaser<65>1400* | |
|
||
| |EM<45>900CN |Stylus<75>Photo<74>825* |ActionLaser<65>1500/ | |
|
||
| |EM<45>930C |Stylus<75>Photo<74>875* |EPL-5200* | |
|
||
| |EM<45>930CN |Stylus<75>Photo<74>895* |ActionLaser<65>1600/ | |
|
||
| |EPL-5200* |Stylus<75>Photo<74>915 |EPL-5600* | |
|
||
| |EPL-5200+* |Stylus<75>Photo<74>925 |ActionLaser<65>II/EPL-4000*| |
|
||
| |EPL-5800 |Stylus<75>Photo<74>950 |DFX-5000* | |
|
||
| |EPL-5800PS |Stylus<75>Photo<74>960 |DFX-5000+* | |
|
||
| |EPL-5900 |Stylus<75>Photo<74>2100 |DFX-8000* | |
|
||
| |EPL-5900PS |Stylus<75>Photo<74>2200 |DFX-8500* | |
|
||
| |EPL-7100 |Stylus<75>Pro<72>5000 |DLQ-2000<30>(360<36>dpi)* | |
|
||
| |EPL-N1600 |Stylus<75>Pro<72>5500 |DLQ-3000+* | |
|
||
| |EPL-N1600PS |Stylus<75>Pro<72>XL |EPL-7000/7100* | |
|
||
| |EPL-N2050 | |EPL-8000/8100* | |
|
||
| |EPL-N2050+ | |EPL-N1200* | |
|
||
| |EPL-N2050PS | |EPL-N2000* | |
|
||
| |EPL-N2050PS+ | |EX-800* | |
|
||
| |EPL-N2120 | |EX-1000* | |
|
||
| |EPL-N2750 | |FX-286e* | |
|
||
| |EPL-N2750PS | |FX-850* | |
|
||
| |L-1000* | |FX-870* | |
|
||
| |LP<4C>8000 | |FX-880* | |
|
||
| |LP-2000* | |FX-980* | |
|
||
| |LP-3000* | |FX-1000* | |
|
||
| |LP-7000* | |FX-1050* | |
|
||
| |LP-7000G* | |FX-1170* | |
|
||
| |LP-xx00* | |FX-1180* | |
|
||
| |LQ-24 | |FX-2170* | |
|
||
| |LQ-500 | |FX-2180* | |
|
||
| |LQ-570+* | |Generic<69>48<34>pin* | |
|
||
| |LQ-850 | |Generic<69>ESC2P* | |
|
||
| |LQ-2550 | |Generic<69>ESC_P<5F>24-J84* | |
|
||
| |LX-1050* | |Generic<69>ESC_P<5F>24-J84C* | |
|
||
| |MC<4D>7000 | |JX-80* | |
|
||
| |MJ<4D>6000C | |LQ-100* | |
|
||
| |MJ<4D>8000C | |LQ-150* | |
|
||
| |MachJet* | |LQ-300* | |
|
||
| |PM<50>700C | |LQ-300<30>Color* | |
|
||
| |PM<50>730C* | |LQ-400* | |
|
||
| |PM<50>750C | |LQ-510* | |
|
||
| |PM<50>760C* | |LQ-550* | |
|
||
| |PM<50>770C | |LQ-570* | |
|
||
| |PM<50>780C* | |LQ-670* | |
|
||
| |PM<50>800C | |LQ-850<35>(N9)* | |
|
||
| |PM<50>820C | |LQ-850+<2B>(360<36>dpi)* | |
|
||
| |PM<50>880C* | |LQ-860* | |
|
||
| |PM<50>2000C | |LQ-870* | |
|
||
| |PM<50>2200C* | |LQ-950<35>(N9)* | |
|
||
| |PM<50>3000C | |LQ-1010* | |
|
||
| |PM<50>3300C | |LQ-1050* | |
|
||
| |PM<50>3500C | |LQ-1050<35>(N9)* | |
|
||
| |PM<50>7000C | |LQ-1050+<2B>(360<36>dpi)* | |
|
||
| |SQ<53>1170 | |LQ-1060* | |
|
||
| |Stylus* | |LQ-1070* | |
|
||
| |Stylus<75>800* | |LQ-1070+* | |
|
||
| |Stylus<75>C20SX | |LQ-1170* | |
|
||
| |Stylus<75>C20UX | |LQ-2070* | |
|
||
| |Stylus<75>C40SX | |LQ-2080* | |
|
||
| |Stylus<75>C40UX | |LQ-2170* | |
|
||
| |Stylus<75>C41SX | |LQ-2180* | |
|
||
| |Stylus<75>C41UX | |LQ-2500* | |
|
||
| |Stylus<75>C42SX | |LX-100* | |
|
||
| |Stylus<75>C42UX | |LX-300* | |
|
||
| |Stylus<75>C60 | |LX-300<30>Color* | |
|
||
| |Stylus<75>C61 | |LX-400* | |
|
||
| |Stylus<75>C62 | |LX-800* | |
|
||
| |Stylus<75>C70 | |LX-810* | |
|
||
| |Stylus<75>C80 | |LX-850* | |
|
||
| |Stylus<75>C82 | |MC<4D>2000 | |
|
||
| |Stylus<75>Color* | |MC<4D>9000 | |
|
||
| |Stylus<75>Color<6F>8<EFBFBD>3 | |MC<4D>10000 | |
|
||
| |Stylus<75>Color<6F>400 | |MJ-500C* | |
|
||
| |Stylus<75>Color<6F>440* | |MJ-510C* | |
|
||
| |Stylus<75>Color<6F>460* | |MJ-700V2C* | |
|
||
| |Stylus<75>Color<6F>480 | |MJ-800C* | |
|
||
| |Stylus<75>Color<6F>500 | |MJ-900C* | |
|
||
| |Stylus<75>Color<6F>580 | |MJ-910C* | |
|
||
| |Stylus<75>Color<6F>600 | |MJ-3000C* | |
|
||
| |Stylus<75>Color<6F>640 | |MJ-3000CU* | |
|
||
| |Stylus<75>Color<6F>660 | |MJ-5000C* | |
|
||
| |Stylus<75>Color<6F>670* | |MJ-5100C* | |
|
||
| |Stylus<75>Color<6F>680 | |MX-80<38>(w_GRAFTRAX<41>80)* | |
|
||
| |Stylus<75>Color<6F>740 | |PM<50>950C | |
|
||
| |Stylus<75>Color<6F>760 | |PM<50>9000C | |
|
||
| |Stylus<75>Color<6F>777 | |PM<50>10000 | |
|
||
| |Stylus<75>Color<6F>800 | |PX<50>7000 | |
|
||
| |Stylus<75>Color<6F>850 | |PX<50>9000 | |
|
||
| |Stylus<75>Color<6F>860 | |SQ-850* | |
|
||
| |Stylus<75>Color<6F>880 | |SQ-2500* | |
|
||
| |Stylus<75>Color<6F>900 | |SQ-2550* | |
|
||
| |Stylus<75>Color<6F>980 | |Stylus<75>200* | |
|
||
| |Stylus<75>Color<6F>1160 | |Stylus<75>300* | |
|
||
| |Stylus<75>Color<6F>1500 | |Stylus<75>400* | |
|
||
| |Stylus<75>Color<6F>1520 | |Stylus<75>500* | |
|
||
| |Stylus<75>Color<6F>3000 | |Stylus<75>800+* | |
|
||
| |Stylus<75>Color<6F>I | |Stylus<75>820* | |
|
||
| |Stylus<75>Color<6F>PRO | |Stylus<75>1000* | |
|
||
| |Stylus<75>Photo | |Stylus<75>1500* | |
|
||
| |Stylus<75>Photo<74>700 | |Stylus<75>Color<6F>600Q* | |
|
||
| |Stylus<75>Photo<74>720* | |Stylus<75>Photo<74>2000P | |
|
||
| |Stylus<75>Photo<74>750 | |Stylus<75>Pro* | |
|
||
| |Stylus<75>Photo<74>780* | |Stylus<75>Pro<72>7600 | |
|
||
| |Stylus<75>Photo<74>790* | |Stylus<75>Pro<72>9000 | |
|
||
| |Stylus<75>Photo<74>810 | |Stylus<75>Pro<72>9500 | |
|
||
| |Stylus<75>Photo<74>820 | |Stylus<75>Pro<72>9600 | |
|
||
| |Stylus<75>Photo<74>830 | |Stylus<75>Pro<72>10000 | |
|
||
| |Stylus<75>Photo<74>870* | |Stylus<75>Pro<72>XL+* | |
|
||
| |Stylus<75>Photo<74>890* | |TLQ-4800* | |
|
||
| |Stylus<75>Photo<74>1200 | |TSQ-4800* | |
|
||
| |Stylus<75>Photo<74>1270 | | | |
|
||
| |Stylus<75>Photo<74>1280 | | | |
|
||
| |Stylus<75>Photo<74>1290 | | | |
|
||
| |Stylus<75>Photo<74>1290S | | | |
|
||
| |Stylus<75>Photo<74>EX | | | |
|
||
| |Stylus<75>Photo<74>EX3* | | | |
|
||
| |Stylus<75>Pro<72>7000 | | | |
|
||
| |Stylus<75>Pro<72>7500 | | | |
|
||
| |Stylus<75>Scan<61>2000 | | | |
|
||
| |Stylus<75>Scan<61>2500 | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Fujitsu |1200* |<7C> |<7C> |<7C> |
|
||
| |2400* | | | |
|
||
| |3400* | | | |
|
||
| |FMLBP2xx<78>Page<67>Printer* | | | |
|
||
| |FMPR* | | | |
|
||
| |PrintPartner<65>10V* | | | |
|
||
| |PrintPartner<65>16DV* | | | |
|
||
| |PrintPartner<65>20W* | | | |
|
||
| |PrintPartner<65>8000* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Generic |PostScript<70>Printer |<7C> |9-pin<69>136<33>Col* |<7C> |
|
||
| | | |9-pin<69>80<38>Col* | |
|
||
| | | |24-pin<69>136<33>Col* | |
|
||
| | | |24-pin<69>80<38>Col* | |
|
||
| | | |48<34>pin* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|GoldStar |<7C> |<7C> |GLP-1450* |<7C> |
|
||
| | | |GLP-2050* | |
|
||
| | | |GLP-5750* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|HP |2000C |Color<6F>LaserJet<65>5 |C<>LaserJet<65>4500* |DeskJet<65>3320 |
|
||
| |2500C |DesignJet<65>230 |C<>LaserJet<65>4550* |DeskJet<65>3420 |
|
||
| |2500CM |DesignJet<65>350C |C<>LaserJet<65>8500* |LaserJet<65>3100 |
|
||
| |2563 |DesignJet<65>650C |C<>LaserJet<65>8550* |LaserJet<65>3150 |
|
||
| |Business<73>Inkjet<65>2200 |DesignJet<65>750C |Color<6F>LaserJet* |PhotoSmart |
|
||
| |Business<73>Inkjet<65>2230 |DesignJet<65>750C<30>Plus |Color<6F>LaserJet<65>5/5M* | |
|
||
| |Business<73>Inkjet<65>2250 |DeskJet<65>350C |Color<6F>LaserJet<65>5000 | |
|
||
| |Business<73>Inkjet<65>2250TN |DeskJet<65>420C |DesignJet<65>5500 | |
|
||
| |Business<73>Inkjet<65>2280 |DeskJet<65>520 |LaserJet<65>2P<32>Plus* | |
|
||
| |Business<73>Inkjet<65>2600 |DeskJet<65>560C |LaserJet<65>3P* | |
|
||
| |Business<73>Inkjet<65>3000 |LaserJet<65>2D |LaserJet<65>3Si* | |
|
||
| |Color<6F>Inkjet<65>Printer<65>CP1160 |LaserJet<65>3200 |LaserJet<65>4<EFBFBD>Plus/4M<34>Plus*| |
|
||
| |Color<6F>Inkjet<65>Printer<65>CP1700 |LaserJet<65>3200m |LaserJet<65>4/4M* | |
|
||
| |Color<6F>LaserJet<65>2500 |LaserJet<65>3200se |LaserJet<65>4LJ<4C>Pro* | |
|
||
| |Color<6F>LaserJet<65>4500 |LaserJet<65>3330<33>MFP |LaserJet<65>4P/4MP* | |
|
||
| |Color<6F>LaserJet<65>4550 |OfficeJet |LaserJet<65>4PJ* | |
|
||
| |Color<6F>LaserJet<65>4600 |OfficeJet<65>300 |LaserJet<65>4Si/4Si<53>Mx* | |
|
||
| |Color<6F>LaserJet<65>5500 |OfficeJet<65>330 |LaserJet<65>4V/4MV* | |
|
||
| |Color<6F>LaserJet<65>8550GN |OfficeJet<65>350 |LaserJet<65>5/5M* | |
|
||
| |DesignJet<65>3500CP |OfficeJet<65>500 |LaserJet<65>5P/5MP* | |
|
||
| |DesignJet<65>5500ps |OfficeJet<65>600 |LaserJet<65>5Si/5Si<53>Mx/ | |
|
||
| |DesignJet<65>ColorPro<72>CAD |OfficeJet<65>625 |5Si<53>Mopier* | |
|
||
| |DeskJet |OfficeJet<65>635 |LaserJet<65>6L/6L<36>Gold* | |
|
||
| |DeskJet<65>200 |OfficeJet<65>710 |LaserJet<65>6P/6MP* | |
|
||
| |DeskJet<65>310 |OfficeJet<65>D135 |LaserJet<65>500<30>Plus* | |
|
||
| |DeskJet<65>320 |OfficeJet<65>D145 |LaserJet<65>1000 | |
|
||
| |DeskJet<65>340C |OfficeJet<65>D155 |LaserJet<65>2000* | |
|
||
| |DeskJet<65>400 |OfficeJet<65>G85 |LaserJet<65>4000/4000N* | |
|
||
| |DeskJet<65>450 |OfficeJet<65>G95 |LaserJet<65>4000T/TN* | |
|
||
| |DeskJet<65>500 |OfficeJet<65>K60 |LaserJet<65>Classic* | |
|
||
| |DeskJet<65>500C |OfficeJet<65>K80 |LaserJet<65>Plus* | |
|
||
| |DeskJet<65>505J<35>Plus |OfficeJet<65>LX |LaserJet<65>Series<65>2* | |
|
||
| |DeskJet<65>510 |OfficeJet<65>T45 |ThinkJet | |
|
||
| |DeskJet<65>540C |OfficeJet<65>T65 | | |
|
||
| |DeskJet<65>550C |OfficeJet<65>V40 | | |
|
||
| |DeskJet<65>600 |PSC<53>950 | | |
|
||
| |DeskJet<65>610C |PSC<53>2210 | | |
|
||
| |DeskJet<65>610CL | | | |
|
||
| |DeskJet<65>612C | | | |
|
||
| |DeskJet<65>630C | | | |
|
||
| |DeskJet<65>632C | | | |
|
||
| |DeskJet<65>640C | | | |
|
||
| |DeskJet<65>648C | | | |
|
||
| |DeskJet<65>656C | | | |
|
||
| |DeskJet<65>660C | | | |
|
||
| |DeskJet<65>670C | | | |
|
||
| |DeskJet<65>670TV | | | |
|
||
| |DeskJet<65>672C | | | |
|
||
| |DeskJet<65>680C | | | |
|
||
| |DeskJet<65>682C | | | |
|
||
| |DeskJet<65>690C | | | |
|
||
| |DeskJet<65>692C | | | |
|
||
| |DeskJet<65>693C | | | |
|
||
| |DeskJet<65>694C | | | |
|
||
| |DeskJet<65>695C | | | |
|
||
| |DeskJet<65>697C | | | |
|
||
| |DeskJet<65>710C | | | |
|
||
| |DeskJet<65>712C | | | |
|
||
| |DeskJet<65>720C | | | |
|
||
| |DeskJet<65>722C | | | |
|
||
| |DeskJet<65>810C | | | |
|
||
| |DeskJet<65>812C | | | |
|
||
| |DeskJet<65>815C | | | |
|
||
| |DeskJet<65>816C | | | |
|
||
| |DeskJet<65>820C | | | |
|
||
| |DeskJet<65>825C | | | |
|
||
| |DeskJet<65>830C | | | |
|
||
| |DeskJet<65>832C | | | |
|
||
| |DeskJet<65>840C | | | |
|
||
| |DeskJet<65>841C | | | |
|
||
| |DeskJet<65>842C | | | |
|
||
| |DeskJet<65>843C | | | |
|
||
| |DeskJet<65>845C | | | |
|
||
| |DeskJet<65>850C | | | |
|
||
| |DeskJet<65>855C | | | |
|
||
| |DeskJet<65>870C | | | |
|
||
| |DeskJet<65>880C | | | |
|
||
| |DeskJet<65>882C | | | |
|
||
| |DeskJet<65>890C | | | |
|
||
| |DeskJet<65>895C | | | |
|
||
| |DeskJet<65>916C | | | |
|
||
| |DeskJet<65>920C | | | |
|
||
| |DeskJet<65>930C | | | |
|
||
| |DeskJet<65>932C | | | |
|
||
| |DeskJet<65>933C | | | |
|
||
| |DeskJet<65>934C | | | |
|
||
| |DeskJet<65>935C | | | |
|
||
| |DeskJet<65>940C | | | |
|
||
| |DeskJet<65>948C | | | |
|
||
| |DeskJet<65>950C | | | |
|
||
| |DeskJet<65>952C | | | |
|
||
| |DeskJet<65>955C | | | |
|
||
| |DeskJet<65>957C | | | |
|
||
| |DeskJet<65>959C | | | |
|
||
| |DeskJet<65>960C | | | |
|
||
| |DeskJet<65>970C | | | |
|
||
| |DeskJet<65>975C | | | |
|
||
| |DeskJet<65>980C | | | |
|
||
| |DeskJet<65>990C | | | |
|
||
| |DeskJet<65>995C | | | |
|
||
| |DeskJet<65>1000C | | | |
|
||
| |DeskJet<65>1100C | | | |
|
||
| |DeskJet<65>1120C | | | |
|
||
| |DeskJet<65>1125C | | | |
|
||
| |DeskJet<65>1200C | | | |
|
||
| |DeskJet<65>1220C | | | |
|
||
| |DeskJet<65>1600C | | | |
|
||
| |DeskJet<65>1600CM | | | |
|
||
| |DeskJet<65>3820 | | | |
|
||
| |DeskJet<65>5550 | | | |
|
||
| |DeskJet<65>5551 | | | |
|
||
| |DeskJet<65>6122 | | | |
|
||
| |DeskJet<65>6127 | | | |
|
||
| |DeskJet<65>Plus | | | |
|
||
| |DeskJet<65>Portable | | | |
|
||
| |LaserJet | | | |
|
||
| |LaserJet<65>2 | | | |
|
||
| |LaserJet<65>2<EFBFBD>w/PS | | | |
|
||
| |LaserJet<65>2P | | | |
|
||
| |LaserJet<65>2P<32>Plus | | | |
|
||
| |LaserJet<65>3 | | | |
|
||
| |LaserJet<65>3D | | | |
|
||
| |LaserJet<65>3P<33>w/<2F>PCL5 | | | |
|
||
| |LaserJet<65>3P<33>w/PS | | | |
|
||
| |LaserJet<65>4 | | | |
|
||
| |LaserJet<65>4<EFBFBD>Plus | | | |
|
||
| |LaserJet<65>4L | | | |
|
||
| |LaserJet<65>4M | | | |
|
||
| |LaserJet<65>4ML | | | |
|
||
| |LaserJet<65>4P | | | |
|
||
| |LaserJet<65>4Si | | | |
|
||
| |LaserJet<65>4V | | | |
|
||
| |LaserJet<65>4V/4LJ<4C>Pro* | | | |
|
||
| |LaserJet<65>5 | | | |
|
||
| |LaserJet<65>5L | | | |
|
||
| |LaserJet<65>5M | | | |
|
||
| |LaserJet<65>5MP | | | |
|
||
| |LaserJet<65>5P | | | |
|
||
| |LaserJet<65>5Si | | | |
|
||
| |LaserJet<65>6 | | | |
|
||
| |LaserJet<65>6L | | | |
|
||
| |LaserJet<65>6MP | | | |
|
||
| |LaserJet<65>6P | | | |
|
||
| |LaserJet<65>1100 | | | |
|
||
| |LaserJet<65>1100A | | | |
|
||
| |LaserJet<65>1200 | | | |
|
||
| |LaserJet<65>1220 | | | |
|
||
| |LaserJet<65>2100 | | | |
|
||
| |LaserJet<65>2100M | | | |
|
||
| |LaserJet<65>2200 | | | |
|
||
| |LaserJet<65>3300<30>MFP | | | |
|
||
| |LaserJet<65>3310<31>MFP | | | |
|
||
| |LaserJet<65>3320<32>MFP | | | |
|
||
| |LaserJet<65>3320N<30>MFP | | | |
|
||
| |LaserJet<65>4000 | | | |
|
||
| |LaserJet<65>4050 | | | |
|
||
| |LaserJet<65>4100 | | | |
|
||
| |LaserJet<65>5000 | | | |
|
||
| |LaserJet<65>5100 | | | |
|
||
| |LaserJet<65>8000 | | | |
|
||
| |LaserJet<65>8100 | | | |
|
||
| |LaserJet<65>8150 | | | |
|
||
| |LaserJet<65>9000 | | | |
|
||
| |LaserJet<65>Plus | | | |
|
||
| |Mopier<65>240 | | | |
|
||
| |Mopier<65>320 | | | |
|
||
| |OfficeJet<65>D125 | | | |
|
||
| |OfficeJet<65>G55 | | | |
|
||
| |OfficeJet<65>Pro<72>1150C | | | |
|
||
| |OfficeJet<65>Pro<72>1170C | | | |
|
||
| |OfficeJet<65>Pro<72>1175C | | | |
|
||
| |OfficeJet<65>R45 | | | |
|
||
| |OfficeJet<65>R60 | | | |
|
||
| |OfficeJet<65>R65 | | | |
|
||
| |OfficeJet<65>R80 | | | |
|
||
| |PSC<53>370 | | | |
|
||
| |PSC<53>380 | | | |
|
||
| |PSC<53>500 | | | |
|
||
| |PSC<53>750 | | | |
|
||
| |PSC<53>2110 | | | |
|
||
| |PSC<53>2150 | | | |
|
||
| |PaintJet | | | |
|
||
| |PaintJet<65>XL | | | |
|
||
| |PaintJet<65>XL300 | | | |
|
||
| |PhotoSmart<72>7150 | | | |
|
||
| |PhotoSmart<72>7350 | | | |
|
||
| |PhotoSmart<72>7550 | | | |
|
||
| |PhotoSmart<72>P100 | | | |
|
||
| |PhotoSmart<72>P130 | | | |
|
||
| |PhotoSmart<72>P230 | | | |
|
||
| |PhotoSmart<72>P1000 | | | |
|
||
| |PhotoSmart<72>P1100 | | | |
|
||
| |PhotoSmart<72>P1115 | | | |
|
||
| |PhotoSmart<72>P1215 | | | |
|
||
| |PhotoSmart<72>P1218 | | | |
|
||
| |PhotoSmart<72>P1315 | | | |
|
||
| |e-printer<65>e20 | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Hansum |<7C> |<7C> |BJ-330H* |<7C> |
|
||
| | | |HS-650C* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Heidelberg |Digimaster<65>9110* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Hitachi |DDP<44>70<37>(with<74>MicroPress)* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|IBM |3853<35>JetPrinter* |<7C> |4029<32>030<33>LaserPrinter<65>10|<7C> |
|
||
| |4019* | |* | |
|
||
| |4029<32>10P* | |5183<38>Portable<6C>Printer* | |
|
||
| |4303<30>Network<72>Color<6F>Printer* | |Infoprint<6E>20* | |
|
||
| |Execjet<65>4072* | |Infoprint<6E>21* | |
|
||
| |Infoprint<6E>12* | |Infoprint<6E>32* | |
|
||
| |Page<67>Printer<65>3112* | |Infoprint<6E>40* | |
|
||
| |ProPrinterII* | |Infoprint<6E>70* | |
|
||
| | | |Infoprint<6E>2085* | |
|
||
| | | |Infoprint<6E>2105* | |
|
||
| | | |Network<72>Printer<65>12* | |
|
||
| | | |Network<72>Printer<65>17* | |
|
||
| | | |Network<72>Printer<65>24* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Imagen |ImPress* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Infotec |4651<35>MF* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Jepcom |<7C> |<7C> |JP-B330* |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Kodak |DigiSource<63>9110* |<7C> |<7C> |<7C> |
|
||
| |IS<49>70<37>CPII* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Kyocera |F-800T* |FS-3500* |F-800A/F-800* |<7C> |
|
||
| |F-1010* | |F-820* | |
|
||
| |F-3300 | |F-1000A/F-1000* | |
|
||
| |FS-600* | |F-1200S* | |
|
||
| |FS-600<30>(KPDL-2)* | |F-1800A/F-1800* | |
|
||
| |FS-680* | |F-2000A/F-2200S* | |
|
||
| |FS-800* | |F-3000A/F-3300* | |
|
||
| |FS-1000* | |F-5000A/F-5000* | |
|
||
| |FS-1000+ | |FS-400A/FS-400* | |
|
||
| |FS-1010 | |FS-850A/FS-850* | |
|
||
| |FS-1200 | |FS-1500A/FS-1500* | |
|
||
| |FS-1700+* | |FS-1550+* | |
|
||
| |FS-1750* | |FS-1550A/FS-1550* | |
|
||
| |FS-1800 | |FS-1600+* | |
|
||
| |FS-1900 | |FS-1600A/FS-1600* | |
|
||
| |FS-3750* | |FS-1700* | |
|
||
| |FS-3800 | |FS-1800/FS-1800N* | |
|
||
| |FS-5900C* | |FS-3400+* | |
|
||
| |FS-9100DN | |FS-3400A/FS-3400* | |
|
||
| |FS-9500DN | |FS-3500A/FS-3500* | |
|
||
| |P-2000* | |FS-3600+* | |
|
||
| | | |FS-3600A/FS-3600* | |
|
||
| | | |FS-3700* | |
|
||
| | | |FS-3700+* | |
|
||
| | | |FS-3800/FS-3800N* | |
|
||
| | | |FS-5500A/FS-5500* | |
|
||
| | | |FS-5800C* | |
|
||
| | | |FS-6300* | |
|
||
| | | |FS-6500/6500+* | |
|
||
| | | |FS-6700* | |
|
||
| | | |FS-6900* | |
|
||
| | | |FS-7000* | |
|
||
| | | |FS-7000+* | |
|
||
| | | |FS-9000* | |
|
||
| | | |LS<4C>6550* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|LaserMaster |<7C> |<7C> |<7C> |LM<4C>1000 |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Lexmark |4039<33>10plus |1020<32>Business* |1000 |Winwriter<65>100* |
|
||
| |E210 |3000* |1020* |Winwriter<65>150c* |
|
||
| |Optra<72>C710 |3200 |1100 |Winwriter<65>200* |
|
||
| |Optra<72>Color<6F>40 |4076* |2030* |Z13 |
|
||
| |Optra<72>Color<6F>45 |Z31 |2050 |Z23 |
|
||
| |Optra<72>Color<6F>1200 |Z42* |2070 |Z33 |
|
||
| |Optra<72>Color<6F>1275 | |5000 | |
|
||
| |Optra<72>E* | |5700* | |
|
||
| |Optra<72>E+* | |7000* | |
|
||
| |Optra<72>E310 | |7200 | |
|
||
| |Optra<72>E312* | |Winwriter<65>400* | |
|
||
| |Optra<72>Ep* | |X73 | |
|
||
| |Optra<72>K<EFBFBD>1220 | |Z11 | |
|
||
| |Optra<72>M410 | |Z12 | |
|
||
| |Optra<72>M412 | |Z22* | |
|
||
| |Optra<72>R+* | |Z32 | |
|
||
| |Optra<72>S<EFBFBD>1250* | |Z43* | |
|
||
| |Optra<72>S<EFBFBD>1855* | |Z51 | |
|
||
| |Optra<72>Se<53>3455* | |Z82 | |
|
||
| |Optra<72>T610 | | | |
|
||
| |Optra<72>T612 | | | |
|
||
| |Optra<72>T614 | | | |
|
||
| |Optra<72>T616 | | | |
|
||
| |Optra<72>W810 | | | |
|
||
| |Valuewriter<65>300* | | | |
|
||
| |Z52 | | | |
|
||
| |Z53 | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Minolta |PagePro<72>6* |<7C> |PagePro<72>8L* |PagePro<72>6L |
|
||
| |PagePro<72>6e* | | |PagePro<72>1100L |
|
||
| |PagePro<72>6ex* | | | |
|
||
| |PagePro<72>8* | | | |
|
||
| |PagePro<72>1100 | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Mitsubishi |CP50<35>Color<6F>Printer* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|NEC |MultiWriter* |<7C> |SuperScript<70>100C* |SuperScript<70>610plus|
|
||
| |P2X* | |SuperScript<70>150C* |* |
|
||
| |PC-PR150* | |SuperScript<70>650C* |SuperScript<70>660* |
|
||
| |PC-PR201* | |SuperScript<70>750C* |SuperScript<70>660plus|
|
||
| |PC-PR1000* | |SuperScript<70>860* |* |
|
||
| |PC-PR2000* | |SuperScript<70>870* | |
|
||
| |PICTY180* | |SuperScript<70>1260* | |
|
||
| |PinWriter<65>P6* | | | |
|
||
| |PinWriter<65>P6<50>plus* | | | |
|
||
| |PinWriter<65>P7* | | | |
|
||
| |PinWriter<65>P7<50>plus* | | | |
|
||
| |PinWriter<65>P60* | | | |
|
||
| |PinWriter<65>P70* | | | |
|
||
| |Pinwriter<65>P20* | | | |
|
||
| |SilentWriter<65>LC<4C>890* | | | |
|
||
| |Silentwriter<65>95f* | | | |
|
||
| |Silentwriter2<72>S60P* | | | |
|
||
| |Silentwriter2<72>model<65>290* | | | |
|
||
| |SuperScript<70>660i* | | | |
|
||
| |SuperScript<70>1800 | | | |
|
||
| |SuperScript<70>4600N* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Oce |3165* |<7C> |<7C> |<7C> |
|
||
| |9050* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Okidata |ML<4D>320 |DP<44>5000 |ML-184<38>Turbo* |Okijet<65>2010 |
|
||
| |ML<4D>321 |Microline<6E>182 |ML-192* | |
|
||
| |ML<4D>380* |OL400w* |ML-193* | |
|
||
| |Microline<6E>600CL* |OL410e |ML-320* | |
|
||
| |Microline<6E>620CL* |OL610e/S |ML-320<32>Turbo* | |
|
||
| |Microline<6E>IBM<42>compatible<6C>9<EFBFBD>pin*|Okijet<65>2500* |ML-321* | |
|
||
| |OL400 |Okipage<67>4w |ML-321<32>Turbo* | |
|
||
| |OL400e |Okipage<67>4w+* |ML-380* | |
|
||
| |OL400ex |Okipage<67>6w |ML-390* | |
|
||
| |OL600e* |Okipage<67>8w |ML-390<39>Turbo* | |
|
||
| |OL610e/PS |Okipage<67>8w<38>Lite |ML-391* | |
|
||
| |OL800 |Okipage<67>8z |ML-391<39>Turbo* | |
|
||
| |OL810e/PS |Super<65>6e |ML-393* | |
|
||
| |OL810ex | |ML-393C* | |
|
||
| |OL830Plus | |ML-395B* | |
|
||
| |Okipage<67>6e | |ML-395C* | |
|
||
| |Okipage<67>6ex* | |ML-520* | |
|
||
| |Okipage<67>8c | |ML-521* | |
|
||
| |Okipage<67>8p | |ML-590* | |
|
||
| |Okipage<67>10e | |ML-591* | |
|
||
| |Okipage<67>10ex | |ML-3410* | |
|
||
| |Okipage<67>12i | |ML-4410* | |
|
||
| |Okipage<67>14ex | |Microline<6E>192+* | |
|
||
| |Okipage<67>20DXn | |OL410ex* | |
|
||
| | | |OL810e* | |
|
||
| | | |OL820* | |
|
||
| | | |OL1200* | |
|
||
| | | |OkiPage<67>6e/6ex* | |
|
||
| | | |OkiPos<6F>425D* | |
|
||
| | | |OkiPos<6F>425S* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Olivetti |JP350S* |<7C> |JP450 |<7C> |
|
||
| |JP470* | | | |
|
||
| |PG<50>306* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Others |<7C> |<7C> |BJ-230* |<7C> |
|
||
| | | |HDMF<4D>NONE-FF* | |
|
||
| | | |LG<4C>GIP<49>3000Q_3000+* | |
|
||
| | | |VP-6570K* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|PCPI |1030* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Panasonic |KX-P1123* |KX-P2123* |KX-P1124i* |KX-P6100* |
|
||
| |KX-P1124* |KX-P6150* |KX-P1180* |KX-P6300<30>GDI* |
|
||
| |KX-P1150* | |KX-P1180i* |KX-P8410* |
|
||
| |KX-P2023* | |KX-P1191* | |
|
||
| |KX-P2135* | |KX-P1624* | |
|
||
| |KX-P2150* | |KX-P1654* | |
|
||
| |KX-P4410* | |KX-P1695* | |
|
||
| |KX-P4450* | |KX-P2124* | |
|
||
| |KX-P5400* | |KX-P2130* | |
|
||
| |KX-P8420* | |KX-P2180* | |
|
||
| |KX-P8475* | |KX-P2624* | |
|
||
| | | |KX-P3123* | |
|
||
| | | |KX-P3124* | |
|
||
| | | |KX-P3624* | |
|
||
| | | |KX-P6500* | |
|
||
| | | |KX-PS600* | |
|
||
| | | |KX-Pxxxx<78>24-pin* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Pentax |PocketJet<65>200 |<7C> |<7C> |<7C> |
|
||
| |PocketJet<65>II | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Printrex |<7C> |<7C> |820<32>DL* |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|QMS |2425<32>Turbo<62>EX* |ps-810* |<7C> |magicolor<6F>2 |
|
||
| |LPK-100* | | | |
|
||
| |magicolor<6F>2+* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Qnix |<7C> |<7C> |PICASSOI* |<7C> |
|
||
| | | |PICASSOII* | |
|
||
| | | |QBJ-3630E* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Raven |<7C> |LP-410 |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Ricoh |4081* |Aficio<69>401* |<7C> |Aficio<69>Color<6F>2206* |
|
||
| |4801* | | |Afico<63>FX10* |
|
||
| |6000* | | | |
|
||
| |Aficio<69>220* | | | |
|
||
| |Aficio<69>700 | | | |
|
||
| |Aficio<69>AP2000 | | | |
|
||
| |RPDL<44>I<EFBFBD>Laser<65>Printer* | | | |
|
||
| |RPDL<44>II<49>Laser<65>Printer* | | | |
|
||
| |RPDL<44>III<49>Laser<65>Printer* | | | |
|
||
| |RPDL<44>IV<49>Laser<65>Printer* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Sambo |<7C> |<7C> |PageJet<65>P1* |<7C> |
|
||
| | | |PageJet<65>P2* | |
|
||
| | | |Stylus<75>800H+* | |
|
||
| | | |Stylus<75>1000H+* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Samsung |ML-85* |ML-85G |MJ<4D>630V* |ML-5050G* |
|
||
| |ML-200 |QL-85G |SLB-3106G* |SF/MSYS/MJ-4700/ |
|
||
| |ML-210 | |SP-2417HW* |4800/4500C* |
|
||
| |ML-1000 | |SP-2421HW* | |
|
||
| |ML-1010 | |SP-2433HW* | |
|
||
| |ML-1020 | |SP-4017* | |
|
||
| |ML-1200 | |SP-4021* | |
|
||
| |ML-1210 | | | |
|
||
| |ML-1220 | | | |
|
||
| |ML-4500 | | | |
|
||
| |ML-4600* | | | |
|
||
| |ML-5000a* | | | |
|
||
| |ML-5080 | | | |
|
||
| |ML-6000/6100* | | | |
|
||
| |ML-6040 | | | |
|
||
| |ML-7000/7000P/7000N* | | | |
|
||
| |ML-7050* | | | |
|
||
| |QL-5100A* | | | |
|
||
| |QL-6050* | | | |
|
||
| |SI-630A* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Seiko |SpeedJET<45>200* |SLP* |<7C> |<7C> |
|
||
| | |SLP<4C>120* | | |
|
||
| | |SLP<4C>220* | | |
|
||
| | |SLP<4C>EZ30* | | |
|
||
| | |SLP<4C>Plus* | | |
|
||
| | |SLP<4C>Pro* | | |
|
||
| | |SLP-100* | | |
|
||
| | |SLP-200* | | |
|
||
| | |SLP-240* | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Sharp |AR-161* |AJ-1800 |<7C> |AJ-2100 |
|
||
| | |AJ-1805 | | |
|
||
| | |AJ-2000 | | |
|
||
| | |AJ-2005 | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Sindo |<7C> |<7C> |ExecJet<65>4072* |<7C> |
|
||
| | | |ExecJet<65>4076* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Sony |<7C> |<7C> |IJP-V100 |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Star |JJ-100* |LC<4C>90* |LC<4C>24-15<31>Multi-Font* |WinType<70>4000* |
|
||
| |LC24-100* |LC24-200* |LC<4C>24-20<32>Multi-Font* | |
|
||
| |LS-04 |LaserPrinter<65>8 |LC<4C>24-200<30>Colour* | |
|
||
| |NL-10* |NX-1001* |LC-15<31>Multi-Font* | |
|
||
| | |StarJet<65>48* |LC-20* | |
|
||
| | | |LC-100<30>Colour* | |
|
||
| | | |NX-1040R* | |
|
||
| | | |NX-1500* | |
|
||
| | | |NX-2415* | |
|
||
| | | |NX-2420R* | |
|
||
| | | |NX-2430* | |
|
||
| | | |Starjet<65>SJ-144* | |
|
||
| | | |XB<58>24-200<30>Multi-Font* | |
|
||
| | | |XB<58>24-250<35>Multi-Font* | |
|
||
| | | |XB-2420* | |
|
||
| | | |XB-2425* | |
|
||
| | | |XR-1020* | |
|
||
| | | |XR-1520* | |
|
||
| | | |ZA-200<30>Multi-Font* | |
|
||
| | | |ZA-250<35>Multi-Font* | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Tally |MT908* |<7C> |<7C> |<7C> |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Tektronix |3693d<33>color<6F>printer,<2C>8-bit<69>mode|Phaser<65>350* |<7C> |<7C> |
|
||
| |* | | | |
|
||
| |4693d<33>color<6F>printer,<2C>2-bit<69>mode| | | |
|
||
| |* | | | |
|
||
| |4693d<33>color<6F>printer,<2C>4-bit<69>mode| | | |
|
||
| |* | | | |
|
||
| |4695* | | | |
|
||
| |4696* | | | |
|
||
| |4697* | | | |
|
||
| |Phaser<65>780 | | | |
|
||
| |Phaser<65>850* | | | |
|
||
| |Phaser<65>IISX* | | | |
|
||
| |Phaser<65>PX* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
|Xerox |2700<30>XES |Able<6C>1406 |DocuPrint<6E>C8* |DocuPrint<6E>P8* |
|
||
| |3700<30>XES |DocuPrint<6E>C6* |DocuPrint<6E>C11* |WorkCentre<72>385 |
|
||
| |4045<34>XES* |DocuPrint<6E>M750* |DocuPrint<6E>XJ6C |WorkCentre<72>XD120f* |
|
||
| |DocuPrint<6E>4508 |DocuPrint<6E>M760* |DocuPrint<6E>XJ8C |WorkCentre<72>XE80 |
|
||
| |DocuPrint<6E>C20 |DocuPrint<6E>P8e |Document<6E>Homecentre |WorkCentre<72>XE90fx |
|
||
| |DocuPrint<6E>C55* |DocuPrint<6E>P12* |WorkCentre<72>450cp* | |
|
||
| |DocuPrint<6E>N17 |DocuPrint<6E>P1202* |WorkCentre<72>470cx* | |
|
||
| |DocuPrint<6E>N32* | |WorkCentre<72>XK35c | |
|
||
| |DocuPrint<6E>N4512 | | | |
|
||
| |DocuPrint<6E>N4512<31>PS | | | |
|
||
| |Document<6E>Centre<72>400* | | | |
|
||
+------------+-------------------------------+----------------------+------------------------+-------------------+
|
||
* This entry has not been sanity-checked.
|
||
-----------------------------------------------------------------------------
|
||
|
||
5.4. How to buy a printer
|
||
|
||
It's a bit difficult to select a printer these days; there are many models to
|
||
choose from. Here are some shopping tips:
|
||
|
||
Cost
|
||
You get what you pay for. Most printers under $200-300 can print
|
||
reasonably well, but printing costs a lot per page. For some printers, it
|
||
only takes one or two cartridges to add up to the cost of a new printer!
|
||
This is specially true for cheap inkjets. Similarly, the cheapest
|
||
printers won't last very long. The least expensive printers, for example,
|
||
have a MTBF of about three months; obviously these are poorly suited for
|
||
heavy use.
|
||
|
||
Inkjets
|
||
Inkjet printheads will clog irreparably over time, so the ability to
|
||
replace the head somehow is a feature. Inkjet printheads are expensive,
|
||
with integrated head/ink cartridges costing ten times (!) what ink-only
|
||
cartridges go for, so the ability to replace the head only when needed is
|
||
a feature. Epson Styluses tend to have fixed heads, and HP DeskJets tend
|
||
to have heads integrated into the cartridges. Canons have three-part
|
||
cartridges with independently replaceable ink tanks; I like this design.
|
||
OTOH, the HP cartridges aren't enormously more expensive, and HP makes a
|
||
better overall line; Canon is often the third choice from the print
|
||
quality standpoint. Epson Styluses and HP inkjets are the best supported
|
||
by free software at the moment.
|
||
|
||
Lasers
|
||
Laser printers consume a drum and toner, plus a little toner wiping bar.
|
||
The cheapest designs include toner and drum together in a big cartridge;
|
||
these designs cost the most to run. The best designs for large volume
|
||
take plain toner powder or at least separate toner cartridges and drums.
|
||
|
||
Photography
|
||
The best color photograph output is from continuous tone printers which
|
||
use a silver halide plus lasers approach to produce??surprise!??actual
|
||
photographs. Since these printers cost tens of thousands to buy, [http://
|
||
www.ofoto.com] Ofoto.com offers inexpensive print-by-print jobs. The
|
||
results are stunning; even the best inkjets don't compare.
|
||
|
||
The best affordable photo prints come from the dye-sublimation devices
|
||
like some members of the Alps series (thermal transfer of dry ink or dye
|
||
sublimation), or the few consumer-grade Sony photo printers.
|
||
Unfortunately the Alps devices have poor free software support (the one
|
||
report I have from a Alps user of the Ghostscript driver speaks of
|
||
banding and grainy pictures), and even then it's unclear if the dye-sub
|
||
option is supported. I have no idea if the Sonys work at all.
|
||
|
||
The more common photo-specialized inkjets usually feature 6 color CMYKcm
|
||
printing or even a 7 color CMYKcmy process. All photo-specialized
|
||
printers are expensive to run; either you always run out of blue and have
|
||
to replace the whole cartridge, or the individual color refills for your
|
||
high-end photo printer cost an arm and a leg. Special papers cost a
|
||
bundle, too; you can expect top-quality photo inkjet output to run over a
|
||
US dollar per page. See also the section on printing photographs later in
|
||
this document, and the sections on color tuning (such as it is) in
|
||
Ghostscript.
|
||
|
||
Lately color lasers have been getting a lot cheaper, these devices may be
|
||
interesting for color reports. Color lasers are a lot cheaper per page
|
||
than inkjets. However they may still not be suited for photographs. One
|
||
day color lasers may become common and replace those boring monochrome
|
||
laser printers.
|
||
|
||
Speed
|
||
Speed is proportional to processing power, bandwidth, and generally
|
||
printer cost. The fastest printers will be networked Postscript printers
|
||
with powerful internal processors. Consumer-grade printers will depend
|
||
partly on Ghostscript's rendering speed, which you can affect by having a
|
||
reasonably well-powered machine; full pages of color, in particular, can
|
||
consume large amounts of host memory. As long as you actuallyhave that
|
||
memory, things should work out fine.
|
||
|
||
Forms
|
||
If you want to print on multicopy forms, then you need an impact printer;
|
||
many companies still make dot matrix printers, most of which emulate
|
||
traditional Epson models and thus work fine.
|
||
|
||
Labels
|
||
There are two supported lines of label printer; look for the Dymo-Costar
|
||
and the Seiko SLP models. Other models may or may not work. Avery also
|
||
makes various sizes of stick-on labels in 8.5x11 format that you can run
|
||
through a regular printer.
|
||
|
||
Plotting
|
||
Big drafting formats are usually supported these days by monster inkjets;
|
||
HP is a popular choice. Mid-sized (11x17) inkjets are also commonly used
|
||
for smaller prints. Much plotting of this sort is done with the languages
|
||
RTL, HP-GL, and HP-GL/2, all of which are simple HP proprietary vector
|
||
languages usually generated directly by application software.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
6. Spooling software
|
||
|
||
Until recently, the choice for free software users was simple - everyone ran
|
||
the same old lpd lifted mostly verbatim out of BSD's Net-2 code. Even today,
|
||
some vendors ship this software. But this is beginning to change. SVR4-like
|
||
systems including Sun's Solaris come with a completely different print
|
||
spooling package, centered around lpsched.
|
||
|
||
Today, there are a number of good systems to chose from. They are all
|
||
described below; read the descriptions and make your own choice. CUPS is a
|
||
good option and recommended for most users; it has excellent Postscript
|
||
printer support, offers IPP support, a web interface, and a number of other
|
||
features. For business environments with mainly networked Postscript
|
||
printers, a front-end program like GPR with LPRng is another option; it
|
||
handles PPD options directly and has a nice interface.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.1. CUPS
|
||
|
||
[http://www.cups.org/] CUPS has become the standard printing system in most
|
||
distributions today. What makes CUPS different from the rest ? CUPS is an
|
||
implementation of the Internet Printing Protocol (IPP), a new standard
|
||
intended to solve some of the deficiencies of the old LPD protocol. CUPS also
|
||
supports LPD, SMB and AppSocket (JetDirect) with reduced functionality. The
|
||
implementation of CUPS has been driven by Michael Sweet of Easy Software
|
||
Products; CUPS is distributed under the GPL. Being a new protocol, the IPP
|
||
has a number of advantages on the ancient LPD protocol:
|
||
|
||
<EFBFBD><EFBFBD>*<2A>the scheduler is a HTTP 1.1 web server and also delivers a web interface
|
||
|
||
<EFBFBD><EFBFBD>*<2A>printer options, you can even ask the IPP device what options and
|
||
document formats it supports.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>access control which restricts print jobs, job controls, and system
|
||
administration commands coming from and to specified computers and
|
||
printers. Like Apache, you can control access to CUPS using Allow and
|
||
Deny directives.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>proxy support (since IPP uses HTTP)
|
||
|
||
<EFBFBD><EFBFBD>*<2A>encryption support
|
||
|
||
<EFBFBD><EFBFBD>*<2A>
|
||
|
||
|
||
Today, all major operating system vendors actively support IPP, as well as
|
||
the major printer vendors. IPP is a standard printing protocol in Windows
|
||
2000 (IIS needs to be installed) which may be a better option for free
|
||
software users than the proprietary SMB protocol. However, on Windows 2000
|
||
automatic printer driver downloading only works with SMB and not with IPP,
|
||
this may be a reason for administrators with a lot of Windows clients to
|
||
choose for SMB printer sharing using Samba and CUPS.
|
||
|
||
There are a number of very good features in it, including sensible option
|
||
handling; web, GUI, and command-line interfaces; and a mime-based filtering
|
||
system with strong support for Postscript.
|
||
|
||
There are several sets of PPDs which you can use with CUPS:
|
||
|
||
Built-in
|
||
The default CUPS installation contains generic PPDs for 9-pin and 24-pin
|
||
Epson matrix printers, Epson Stylus Color, Stylus Photo printers, HP
|
||
LaserJet, DeskJet printers and Dymo Label printers. These will enable you
|
||
to print to a lot of printer models, but will not give you access to
|
||
specific capacities of the models
|
||
|
||
[http://www.linuxprinting.org/foomatic.html] Foomatic
|
||
Foomatic can generate a suitable PPD for use with any printer driver that
|
||
has full details entered in the linuxprinting.org database. The PPD gets
|
||
used together with a backend script named foomatic-rip. foomatic-rip uses
|
||
free software drivers. At the moment there is support for a rather large
|
||
number of printers in this system. Foomatic forms a basis for
|
||
non-Postscript printer support in most GNU/Linux distributions. CUPS and
|
||
Foomatic are becoming quite popular and this is currently the recommended
|
||
printing system for most situations.
|
||
|
||
Postscript PPDs
|
||
CUPS can use vendor-supplied PPD files for Postscript printers directly.
|
||
Often these come with the Windows drivers for a printer, or can be found
|
||
on the printer vendor's website. If you have a choice between a driver
|
||
for Windows 9x and Windows NT/W2K, than select the driver for Windows NT.
|
||
[http://www.adobe.com/products/printerdrivers/winppd.html] Adobe also
|
||
distributes PPD files for many Postscript printers.
|
||
|
||
ESP Print Pro
|
||
Easy Software Products, Inc. sells CUPS bundled with a collection of
|
||
proprietary drivers. Although they are not free software, they do drive
|
||
many common printers. The bundle is somewhat expensive measured against
|
||
the price of a single supported printer, but it certainly has a place.
|
||
The package includes graphical front-end tools.
|
||
|
||
Gimp-Print
|
||
The [http://gimp-print.sourceforge.net/] Gimp-Print drivers are high
|
||
quality drivers for Canon, Epson, Lexmark, and PCL printers for use with
|
||
Ghostscript, CUPS, Foomatic, and the Gimp.
|
||
|
||
[http://www-124.ibm.com/developerworks/oss/linux/projects/omni/] OMNI
|
||
Omni is a package made by IBM, now containing support for more than 450
|
||
printers. The OMNI printer driver model is distributed by IBM under LGPL
|
||
License.
|
||
|
||
[http://hpinkjet.sourceforge.net/] HPIJS
|
||
HPIJS supports around 150 of HP's own printers at excellent print quality
|
||
now (currently only via the Foomatic path). As of Version 1.0.1 , the "hp
|
||
Product Only" clause has been removed from the license and the drivers
|
||
are distributed with a BSD license.
|
||
|
||
|
||
The third-party program [http://cups.sourceforge.net/xpp/] XPP (see Figure 4)
|
||
offers a very nice graphical interface to the user functionality of CUPS,
|
||
including an marvelous interface to print-time options (shown in Figure 5).
|
||
For information on using XPP, see Section 3.4.2.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.2. LPD
|
||
|
||
LPD, the original BSD Unix Line Printer Daemon, has been the standard on Unix
|
||
for years. It is available for every style of Unix, and offers a rather
|
||
minimal feature set derived from the needs of timesharing-era computing.
|
||
Despite this somewhat peculiar history, it is still useful today as a basic
|
||
print spooler. To be really useful with modern printer, a good deal of extra
|
||
work is needed in the form of companion filter scripts and front-end
|
||
programs. But these exist, and it does all work.
|
||
|
||
LPD is also the name given to the network printing protocol by RFC 1179. 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.
|
||
|
||
[http://www.lprng.org] LPRng(see Section 6.3) 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 essentially
|
||
an enhanced LPD implementation with better security and extra features.
|
||
|
||
There are a large number of LPD sources floating around in the world.
|
||
Arguably, some strain of BSD Unix is probably the official owner, but
|
||
everyone implements changes willy-nilly, and they all cross-pollinate in
|
||
unknown ways, such that it is difficult to say with certainty exactly which
|
||
LPD you might have. Of the readily available LPDs, [http://sourceforge.net/
|
||
projects/lpr/] GNUlpr offers one with a few minor modifications that make the
|
||
user interface much more flexible. The GNUlpr supports command-line option
|
||
specification with a-o flag; options are then passed through to filters. This
|
||
is similar to the features offered by a number of traditional Unix vendors,
|
||
and similar to (although incompatible with) LPRng's -z option mechanism.
|
||
|
||
If you go with LPD, the best way to use it is via a front-end. There are
|
||
several to chose from; KDEPrint, GPR (see Section 3.4) and XPP are perhaps
|
||
the best. Others exist; tell me about them.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.3. LPRng
|
||
|
||
Some GNU/Linux vendors provide LPRng, a far less ancient LPD print spooling
|
||
implementation. 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 frightfully haphazard codebase 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.
|
||
|
||
LPRng also includes some example setups for common network printers - HP
|
||
LaserJets, mainly - that include some accounting abilities. LPRng uses more
|
||
or less the same basic filter model as does BSD lpd, so the LPD support
|
||
offered by the linuxprinting.org website applies to LPRng as well. This can
|
||
help you effectively use free software drivers for many printers.
|
||
|
||
LPRng is distributed under either the GPL or an Artistic license.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.4. PPR
|
||
|
||
[http://ppr.trincoll.edu/] PPR is a Postscript-centric spooler which includes
|
||
a rudimentary Postscript parsing ability from which it derives several nice
|
||
features. It includes good accounting capabilities, good support for
|
||
Appletalk, SMB, and LPD clients, and much better error handling than lpd.
|
||
PPR, like every other spooler here, can call Ghostscript to handle
|
||
non-Postscript printers.
|
||
|
||
PPR was written by, and is in use at, Trinity College. The license is
|
||
BSD-style; free for all use but credit is due.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.5. Others
|
||
|
||
6.5.1. PDQ
|
||
|
||
PDQ stands for "Print, Don't Queue", and the way it works reflects this
|
||
design. PDQ is a non-daemon-centric print system which has a built-in, and
|
||
sensible, driver configuration syntax. This includes the ability to declare
|
||
printing options, and a GUI or command line tool for users to specify these
|
||
options with; users get a nice dialog box in which to specify resolution,
|
||
duplexing, paper type, etc.
|
||
|
||
Running all of the filters as the user has a number of advantages: the
|
||
security problems possible from Postscript are mostly gone, multi-file LaTeX
|
||
jobs can be printed effectively as dvi files, and so forth.
|
||
|
||
PDQ is not without flaws: most notably it processes the entire job before
|
||
sending it to the printer. This means that, for large jobs, PDQ may simply be
|
||
impractical—you can end up with hundreds of megs being copied back and
|
||
forth on your disk. Even worse, for slow drivers like the better quality
|
||
inkjet drivers, the job will not start printing until Ghostscript and the
|
||
driver have finished processing. This may be many minutes after submission.
|
||
|
||
There's a real place for PDQ; it has a simple design that doesn't subtract
|
||
user control. And the normal control path crosses no security boundaries, so
|
||
it can't have the classes of security bug people are always finding in other
|
||
systems. And to top it off, it's small.
|
||
|
||
However there is no active development done on PDQ. A new maintainer would be
|
||
most welcome.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.5.2. GNUlpr
|
||
|
||
GNUlpr began its life in some work that HP sponsored VA Linux to do.
|
||
Unfortunately, GNUlpr is now pretty much dead.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.5.3. CPS
|
||
|
||
The [http://www.tww.cx/cps.php] Coherent Printing System is a set of Perl
|
||
scripts called "lpr", "lpd", "lprm", and "lpq". These replace the programs of
|
||
the same name which come with many Linux systems.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6.5.4. CEPS
|
||
|
||
The Cisco Enterprise Print System was developed by Damian Ivereigh when he
|
||
was a sysadmin at Cisco. He did more than he was hired to do, he developed a
|
||
new printing system to improve the administrative hassle. Cisco authorized
|
||
the release of the software for free under the GNU General Public License.
|
||
Installing CEPS will however only pay off at large organisations.
|
||
-----------------------------------------------------------------------------
|
||
|
||
7. How it all works
|
||
|
||
In order to get printing working well, you need to understand how your
|
||
spooling software works. All systems work in essentially the same way,
|
||
although the exact order might vary a bit, and some systems skip a step or
|
||
two:
|
||
|
||
|
||
Figure 10. Spooling Illustration
|
||
|
||
[spool-illustration]
|
||
|
||
1. The user submits a job along with his selection of options. The job data
|
||
is usually, but not always, Postscript.
|
||
|
||
2. The spooling system copies the job and the options over the network in
|
||
the general direction of the printer.
|
||
|
||
3. The spooling system waits for the printer to be available.
|
||
|
||
4.
|
||
5. The spooling system applies the user's selected options to the job, and
|
||
translates the job data into the printer's native language, which is
|
||
usually not Postscript. This step is called filtering; most of the work
|
||
in setting things up lies in getting the proper filtering to happen.
|
||
|
||
6. The job is done. The spooling system will usually do assorted cleanup
|
||
things at this point. If there was an error along the way, the spooler
|
||
will usually notify the user somehow (for example, by email).
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
7.1. CUPS
|
||
|
||
To print a job with CUPS, you can use both the BSD (see Section 5.3.1) and
|
||
System V commands making it really easy for people with prior experience with
|
||
either system.
|
||
|
||
|
||
Figure 11. Simplified CUPS illustration
|
||
|
||
[cups-overview]
|
||
|
||
Initially CUPS lacked an LPD backend. This was of course quickly added.
|
||
Currently there are backends available for at least IPP, LPD, SMB, JetDirect,
|
||
USB, Netatalk, parallel and serial printers. You may find others on the net
|
||
or write your own.
|
||
|
||
There are only a handfull of built-in drivers, allowing you to print with
|
||
most printers but probably not at the maximum resolution. A PPD file for a
|
||
Postscript driver can be added to CUPS but if you want to print at best
|
||
quality with your fancy new HP Deskjet you are out of luck. It is here that
|
||
Foomatic comes to the rescue. You can use Foomatic in combination with CUPS.
|
||
Foomatic uses a CUPS filter called foomatic-rip to do its magic. foomatic-rip
|
||
uses PPD files to describe printer capabilities, even for non-Postscript
|
||
printers. CUPS + Foomatic is currently the recommended printing system. Some
|
||
Linux distributions already use it and the number that do will only grow.
|
||
|
||
The CUPS scheduler does not only accept jobs, it is also a administrative
|
||
webinterface. Currently you can add/delete printers, cancel jobs, start/stop
|
||
printers. Moving jobs will be available in a later release.
|
||
-----------------------------------------------------------------------------
|
||
|
||
7.2. LPD
|
||
|
||
Lpd stands for Line Printer Daemon, and refers in different contexts to both
|
||
the daemon and the whole collection of programs which run print spooling.
|
||
These are:
|
||
|
||
[http://www.linuxprinting.org/man/lpd.8.html] lpd
|
||
The spooling daemon. One of these runs to control everything on a
|
||
machine, AND one is run per printer while the printer is printing.
|
||
|
||
[http://www.linuxprinting.org/man/lpr.1.html] lpr
|
||
The user spooling command. Lpr contacts lpd and injects a new print job
|
||
into the spool.
|
||
|
||
[http://www.linuxprinting.org/man/lpq.1.html] lpq
|
||
Lists the jobs in a print queue.
|
||
|
||
[http://www.linuxprinting.org/man/lpc.8.html] lpc
|
||
The Lpd system control command. With lpc you can stop, start, reorder,
|
||
etc, the print queues.
|
||
|
||
[http://www.linuxprinting.org/man/lprm.1.html] lprm
|
||
lprm removes a job from the print spool.
|
||
|
||
|
||
So how does it fit together? The following things happen:
|
||
|
||
1. At boot time, lpd is run. It waits for connections and manages printer
|
||
queues.
|
||
|
||
2. A user submits a job with the lpr command or, alternatively, with an lpr
|
||
front-end like GPR, PDQ, etc.Lpr contacts lpd over the network and
|
||
submits both the user's data file (containing the print data) and a
|
||
control file (containing user options).
|
||
|
||
3. When the printer becomes available, the main lpd spawns a child lpd to
|
||
handle the print job.
|
||
|
||
4. The child lpd executes the appropriate filter(s) (as specified in the if
|
||
attribute in/etc/printcap) for this job and sends the resulting data on
|
||
to the printer.
|
||
|
||
|
||
The lp system was originally designed when most printers were line printers -
|
||
that is, people mostly printed plain ASCII. By placing all sorts of magic in
|
||
the if filter, modern printing needs can be met with lpd (well, more or less;
|
||
many other systems do a better job).
|
||
|
||
There are many programs useful for writing LPD filters. Among them are:
|
||
|
||
gs
|
||
Ghostscript is a host-based Postscript interpreter (aka a Raster Image
|
||
Processor or RIP). It accepts Postscript and produces output in various
|
||
printer languages or a number of graphics formats. Ghostscript is covered
|
||
in Section 10.
|
||
|
||
ppdfilt
|
||
[http://sourceforge.net/project/?group_id=1658] ppdfilt is a standalone
|
||
version of a CUPS component. It filters Postscript, executing a few basic
|
||
transformations on it (n-up printing, multiple copies, etc) and adding in
|
||
user option statements according to a Postscript Printer Definition (PPD)
|
||
file usually included with Postscript printers.
|
||
|
||
ppdfilt is best used together with an option-accepting LPD system (like
|
||
the GNUlpr, or LPRng) and a filter script which parses user-provided
|
||
options into the equivalent ppdfilt command. VA Linux and HP provide a
|
||
modified rhs-printfilters package which does exactly this; it produces
|
||
nice results if you have a Postscript printer. See Section 8.2.2 for
|
||
information on this system.
|
||
|
||
ps2ps
|
||
ps2ps is a utility script included with Ghostscript. It filters
|
||
Postscript into more streamlined Postscript, possibly at a lower Language
|
||
Level. This is useful if you have an older Postscript printer; most
|
||
modern software produces modern Postscript.
|
||
|
||
mpage
|
||
mpage is a utility which accepts text or Postscript, and generates n-up
|
||
output??that is, output with several page images on each piece of paper.
|
||
There are actually several programs which do this, includingenscript,
|
||
nenscript, anda2ps.
|
||
|
||
a2ps
|
||
a2ps, aka any-to-ps, is a program which accepts a variety of file types
|
||
and converts them to Postscript for printing.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
8. How to set things up
|
||
|
||
For common configurations, you can probably ignore this section entirely -
|
||
instead, you should jump straight to Section 9 below, or better yet, your
|
||
vendor's documentation. Most GNU/Linux distributions supply one or more
|
||
"idiot-proof" tools to do everything described here for common printers.
|
||
|
||
If your vendor's tool doesn't work out for you, or you'd like the ability to
|
||
interactively control printing options when you print, then you should use
|
||
some other system. APS Filter is another good system; it configures LPD
|
||
queues and filters very easily on most any sort of Unix system.
|
||
|
||
You can also use the printing system interfaces from the [http://
|
||
www.linuxprinting.org/] linuxprinting.org website to connect many free
|
||
drivers into several spooling systems. Once this project is complete, these
|
||
interfaces will offer the best functionality: all styles of free software
|
||
drivers are supported, user-settable options are available, and most common
|
||
spooling systems are supported. Currently the foomatic print system is used
|
||
in most modern distributions anyway. However, your distro may include a
|
||
slightly outdated version of foomatic.
|
||
-----------------------------------------------------------------------------
|
||
|
||
8.1. Configuring CUPS
|
||
|
||
If you are using a client with CUPS and a CUPS server has already been
|
||
configured, installing the printers on your client can not get much easier
|
||
than this: do nothing. Through broadcasting, the client should find the CUPS
|
||
server and automatically configure the printers that are installed on that
|
||
print server. This is one of the features of CUPS that will be really
|
||
appreciated on large networks.
|
||
|
||
Manually configuring printers with CUPS, also is a peace of cake. If you are
|
||
new to CUPS and/or Unix printing, the way to go is probably the web
|
||
interface. If you have to configure lots of printers, using the command-line
|
||
will probably be faster.
|
||
|
||
The URL to access the CUPS web interface is http://hostname:631/admin by
|
||
default. The port can be changed in cupsd.conf if necessary.
|
||
|
||
To add a printer from the command-line the general syntax is lpadmin -p
|
||
printer -E -v device -m ppd Lpadmin with the -p option adds or modifies a
|
||
printer. The printers are saved in the file The -x option deletes the named
|
||
printer. Read the lpadmin man page for available options.
|
||
|
||
|
||
Example 3. command-line examples
|
||
/usr/sbin/lpadmin -p testpr1 -E -v socket://192.168.1.9 -m deskjet.ppd
|
||
/usr/sbin/lpadmin -p testpr2 -E -v parallel:/dev/lp0 -m laserjet.ppd
|
||
/usr/sbin/lpadmin -x testpr1
|
||
|
||
More information about configuring printers and options can be found in the
|
||
[http://www.cups.org/documentation.html] CUPS documentation. The Software
|
||
Administrators Manual will teach you all you need to know about configuring
|
||
printers with CUPS.
|
||
-----------------------------------------------------------------------------
|
||
|
||
8.2. Configuring LPD
|
||
|
||
Until recently most GNU/Linux distributions shipped with LPD. This section
|
||
describes a very basic setup for LPD; further sections detail the creation of
|
||
complex filters and network configuration.
|
||
-----------------------------------------------------------------------------
|
||
|
||
8.2.1. Basic LPD configuration
|
||
|
||
The minimal setup for lpd results in a system that can queue files and print
|
||
them. It will not pay any attention to whether or not your printer will
|
||
understand them, and will probably not let you produce attractive output. But
|
||
we have to start somewhere.
|
||
|
||
To add a print queue to lpd, you must add an entry in/etc/printcap, and make
|
||
the new spool directory under /var/spool/lpd.
|
||
|
||
An entry in /etc/printcap looks like:
|
||
# LOCAL djet500
|
||
lp|dj|deskjet:\
|
||
:sd=/var/spool/lpd/dj:\
|
||
:mx#0:\
|
||
:lp=/dev/lp0:\
|
||
:sh:
|
||
This defines a spool called lp,dj, or deskjet, spooled in the directory /var/
|
||
spool/lpd/dj, with no per-job maximum size limit, which prints to the device/
|
||
dev/lp0, and which does not have a banner page (with the name of the person
|
||
who printed, etc) added to the front of the print job.
|
||
|
||
Go now and read the man page for [http://www.linuxprinting.org/man/
|
||
printcap.5.html] printcap.
|
||
|
||
The above looks very simple, but there a catch - unless I send in files a
|
||
DeskJet 500 can understand, this DeskJet will print strange things. For
|
||
example, sending an ordinary Unix text file to a deskjet results in literally
|
||
interpreted newlines, and gets me:
|
||
This is line one.
|
||
This is line two.
|
||
This is line three.
|
||
ad nauseam. Printing a PostScript file to this spool would get a beautiful
|
||
listing of the PostScript commands, printed out with this "staircase effect",
|
||
but no useful output.
|
||
|
||
Clearly more is needed, and this is the purpose of filtering. The more
|
||
observant of you who read the printcap man page might have noticed the spool
|
||
attributes if andof. Well, if, or the input filter, is just what we need
|
||
here.
|
||
|
||
If we write a small shell script called filter that adds carriage returns
|
||
before newlines, the staircasing can be eliminated. So we have to add in an
|
||
if line to our printcap entry above:
|
||
lp|dj|deskjet:\
|
||
:sd=/var/spool/lpd/dj:\
|
||
:mx#0:\
|
||
:lp=/dev/lp0:\
|
||
:if=/var/spool/lpd/dj/filter:\
|
||
:sh:
|
||
A simple filter script might be:
|
||
#!perl
|
||
# The above line should really have the whole path to perl
|
||
# This script must be executable: chmod 755 filter
|
||
while(<STDIN>){chomp $_; print "$_\r\n";};
|
||
# You might also want to end with a form feed: print "\f";
|
||
If we were to do the above, we'd have a spool to which we could print regular
|
||
Unix text files and get meaningful results. (Yes, there are four million
|
||
better ways to write this filter, but few so illustrative. You are encouraged
|
||
to do this more efficiently.)
|
||
|
||
The only remaining problem is that printing plain text is really not too hot
|
||
- surely it would be better to be able to print PostScript and other
|
||
formatted or graphic types of output. Well, yes, it would, and it's easy to
|
||
do. The method is simply an extension of the above linefeed-fixing filter.
|
||
|
||
Such a filter is called a magic filter. Don't bother writing one yourself
|
||
unless you print strange things - there are a good many written for you
|
||
already, and most have easy-to-use interactive configuration tools. You
|
||
should simply select a suitable pre-written filter:
|
||
|
||
foomatic-rip
|
||
[http://www.linuxprinting.org/lpd-doc.html] foomatic-rip is a filter
|
||
designed to use data from the LinuxPrinting.org printer database. It
|
||
supports essentially all free software printer drivers, including regular
|
||
Ghostscript drivers, Uniprint drivers, and the assorted filter programs
|
||
floating around out there. foomatic-rip works with CUPS, LPRng, LPD,
|
||
GNUlpr, PPR, PDQ, no spooler.
|
||
|
||
APS Filter
|
||
[http://www.apsfilter.org/] apsfilter is a filter designed for use on a
|
||
wide variety of Unices. It supports essentially all Ghostscript drivers.
|
||
It, too, works with various strains of LPD, including stock BSD and
|
||
LPRng.
|
||
|
||
RHS-Printfilters
|
||
RHS-Printfilters is a filter system constructed by Red Hat. It shipped
|
||
beginning, I think, in version 4 of Red Hat Linux, as the backend to the
|
||
easy-to-use printtool GUI printer configuration tool.
|
||
|
||
The rhs filter system is built on an ASCII database listing distributed
|
||
with it. This listing supports many Ghostscript and Uniprint drivers, but
|
||
not filter-style drivers. The filters constructed also do not support
|
||
much in the way of user-controllable options at print time.
|
||
|
||
The printtool places a configuration file named postscript.cfg in the
|
||
spool directory. Inside this Bourne shell-style file, each setting is a
|
||
variable. In unusual cases, you can make useful changes directly to the
|
||
config file which the printtool won't allow; typically this would be the
|
||
specification of an unusual Ghostscript driver, or a PPD filename for the
|
||
VA rhs-printfilters version.
|
||
|
||
VA Linux has made some enhancements to the rhs-printfilters system under
|
||
contract from HP. With the proper versions, it is possible to select
|
||
options for Postscript printers under control of Adobe PPD files. I cover
|
||
this system inSection 8.2.2.
|
||
|
||
|
||
There's one catch to such filters: older version of lpd don't run the if
|
||
filter for remote printers, while most newer ones do (although often with no
|
||
arguments). The version of LPD shipped with modern GNU/Linux and FreeBSD
|
||
distributions does; most commercial Unices that still ship LPD have a version
|
||
that does not. See the section on network printing later in this document for
|
||
more information on this. If you only have locally-connected printers, then
|
||
this won't affect you.
|
||
-----------------------------------------------------------------------------
|
||
|
||
8.2.2. LPD for PostScript Printers
|
||
|
||
While most versions of LPD don't gracefully handle PostScript (never mind
|
||
user options), VA Linux modified LPD and Red Hat's filtering software to
|
||
support PostScript printers fairly well. Because the intention was to donate
|
||
the code to the gnu project, they called it [http://lpr.sourceforge.net/]
|
||
GNUlpr
|
||
-----------------------------------------------------------------------------
|
||
|
||
8.2.2.1. How it works
|
||
|
||
VA's system uses Postscript Printer Definition, or PPD, files. PPD files are
|
||
provided by printer manufacturers and declare the available options on a
|
||
printer, along with the Postscript code needed to activate them. With the VA
|
||
system, the normal LPD scheme works a little differently:
|
||
|
||
1. The user can specify options with the -o flag. For example, you might
|
||
specify -o MediaType:Transparency if you were about to print on overhead
|
||
film. Alternatively, the front-end [http://www.compumetric.com/
|
||
linux.html] GPR can be used to specify options in a dialog box; you can
|
||
see screenshots of GPR in Section 3.4.3.
|
||
|
||
2. LPR passes the options to LPD as an extended attribute in the LPD control
|
||
file.
|
||
|
||
3. A modified version of the rhs-printfilters package is given the extended
|
||
options data in an environment variable, and uses ppdfilt to add these
|
||
options to the print data.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
8.2.2.2. Obtaining and Installing
|
||
|
||
You can obtain RPM packages, or source tarballs, from the project's website
|
||
on SourceForge. For installation details, consult the project's installation
|
||
micro-HOWTO. In essence, you need to uninstall the Red Hat version of
|
||
printtool, lpd, and rhs-printfilters entirely, and then install the VA
|
||
versions, plus ppdfilt, gpr, and a few other utilities.
|
||
|
||
You will also need PPD files for your Postscript printers. PPD files are
|
||
usually fairly easy to find. VA Linux and HP distribute PPD files for many
|
||
Laserjet models. Other vendors provide PPDs for their own printers, and Adobe
|
||
distributes [http://www.adobe.com/products/printerdrivers/winppd.html] PPD
|
||
files for many printers.
|
||
|
||
At the moment, much of this is a bit difficult to install. But future
|
||
installation tools will build upon the printer configuration library
|
||
libprinterconf, which enables both the autodetection and rhs-printfilter
|
||
configuration of both networked and local printers.
|
||
|
||
Note It is possible to use GPR alone, without the modified LPD or even
|
||
rhs-printfilters. GPR can be compiled with all the logic needed to
|
||
massage Postscript jobs directly. This may be an easier-to-install
|
||
option suitable for people who never really need to print using lpr
|
||
directly.
|
||
-----------------------------------------------------------------------------
|
||
|
||
8.2.2.3. Controlling Postscript Options
|
||
|
||
Once you've setup VA's Postscript-capable LPD system (GNUlpr), you can
|
||
control your printer's options in two ways:
|
||
|
||
With the GUI
|
||
To use GPR, you first make sure that you've specified the proper PPD
|
||
file. Then the printer's options will be available on the `Advanced'
|
||
panel. Basic ppdfilt options will be available on the `Common' panel.
|
||
|
||
With the command line
|
||
This lpr supports the -o option. You may specify any option/value pair
|
||
from your printer's PPD file with -o. For example, consider this PPD file
|
||
option clause:
|
||
*OpenUI *PrintQuality/Print Quality: PickOne
|
||
*DefaultPrintQuality: None
|
||
*OrderDependency: 150 AnySetup *PrintQuality
|
||
*PrintQuality None/Printer Setting: ""
|
||
*PrintQuality Quick/QuickPrint: "<< /DeviceRenderingInfo ...
|
||
*PrintQuality Normal/Normal: "<< /DeviceRenderingInfo << /...
|
||
*PrintQuality Pres/Presentation: "<< /DeviceRenderingInfo ...
|
||
*PrintQuality Image/1200 Image Quality: "<< /DeviceRenderi...
|
||
*CloseUI: *PrintQuality
|
||
For the option PrintQuality, the possible values are Quick, Normal,Pres,
|
||
or Image. You might give a command like:
|
||
% lpr -o PrintQuality:Image file.ps
|
||
|
||
There are a number of options common to all printers which will work in
|
||
addition to the ones from your PPD. These include:
|
||
|
||
page-ranges
|
||
You can specify a range of pages to print. For example,page-ranges:
|
||
2-3.
|
||
|
||
page-set
|
||
You can print only odd or even pages. For example,page-set:odd.
|
||
|
||
number-up
|
||
You can print multiple pages on each piece of paper. For example,
|
||
number-up:2.
|
||
|
||
|
||
Other options are detailed in the ppdfilt man page.
|
||
|
||
-----------------------------------------------------------------------------
|
||
8.2.3. File Permissions
|
||
|
||
By popular demand, I include below a listing of the permissions on
|
||
interesting files on my system. There are a number of better ways to do this,
|
||
ideally using only SGID binaries and not making everything SUID root, but
|
||
this is how my system came out of the box, and it works for me. (Quite
|
||
frankly, if your vendor can't even ship a working lpd you're in for a rough
|
||
ride).
|
||
-r-sr-sr-x 1 root lp /usr/bin/lpr*
|
||
-r-sr-sr-x 1 root lp /usr/bin/lprm*
|
||
-rwxr--r-- 1 root root /usr/sbin/lpd*
|
||
-r-xr-sr-x 1 root lp /usr/sbin/lpc*
|
||
drwxrwxr-x 4 root lp /var/spool/lpd/
|
||
drwxr-xr-x 2 root lp /var/spool/lpd/lp/
|
||
|
||
Lpd must currently be run as root so that it can bind to the low-numbered lp
|
||
service port. It should probably become UID lp.lp or something after binding,
|
||
but I don't think it does. This is simply one more reason to avoid the stock
|
||
BSD LPD.
|
||
-----------------------------------------------------------------------------
|
||
|
||
8.3. Large Installations
|
||
|
||
Large installations, by which I mean networks including more than two
|
||
printers or hosts, have special needs. Below are some tips.
|
||
|
||
CUPS has some nice features that make a good choice for a large network.
|
||
Printer classes, access control and automatic client configuration to name a
|
||
few.
|
||
|
||
If you use LPD, for really large environments, merely distributing printcap/
|
||
filter information becomes a difficult problem; the Cisco Enterprise Print
|
||
System addresses this and is probably either a good starting point or a
|
||
nearly complete solution, depending on your needs. Medium to large
|
||
environments can be well supported by native LPRng features.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Each printer should have a single point of control, where an
|
||
administrator can pause, reorder, or redirect the queue. To implement
|
||
this, have everyone printing to a local server, which will then queue
|
||
jobs and direct them to the proper printer. For large campuses or
|
||
distributed networks, have one server per building or other suitable
|
||
network subset.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Use CUPS or LPRng, at least on servers; the BSD LPD is too buggy for
|
||
"real" use. But don't take my word for it??you should test a number of
|
||
spoolers and see which suits you best.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Client systems should not have unique printing configurations. CUPS
|
||
provides automatic client configuration of printers on the same subnet.
|
||
You can even configure CUPS (BrowsePoll) to poll servers on other subnets
|
||
for available printers. These features limit the amount of configuration
|
||
that needs to take place at the client. To implement a uniform printing
|
||
configuration with LPRng, use LPRng's extended printcap syntax so that
|
||
you have one printcap to use everywhere. CEPS provides for this by
|
||
building atop a lightweight distributed database instead of traditional
|
||
printcap files.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Print queues should not be named for make or model; name print queues for
|
||
something sensible like location (floor2_nw) or capability
|
||
(color_transparency). Three years from now, when a printer breaks, you
|
||
will be able to replace it with a different make or model without causing
|
||
confusion.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Operate a web page which shows detailed information on each printer,
|
||
including location, capabilities, etc. Consider having it show the queue
|
||
and include a button to remove jobs from the queue. Complex networked
|
||
environments are unmanageable for users without proper documentation.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>On Windows and Apple systems, use either the platform-specific drivers
|
||
everywhere (Samba supports the Windows automagical driver-download
|
||
mechanism) or, better, use generic Postscript drivers everywhere. Do not
|
||
mix and match; primitive word processors often produce different output
|
||
when the installed printer driver changes; users cannot deal with output
|
||
that varies depending on the particular client/printer pair.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>If at all possible, buy a large-volume printer for large-volume printing.
|
||
If on a budget, use LPRng's multiple printers/one queue facility or CUPS
|
||
printer classes and assign a babysitter; printers are complex mechanical
|
||
devices that will often jam and run out of paper in such configurations.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Do not feel that printers must be plugged into workstations; Ethernet
|
||
"print servers" now cost under $100. The ability to locate printers
|
||
anywhere you can network is a big improvement over forced location near a
|
||
host; locate printers in sensible, central locations.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Use any SNMP trap or other monitoring/alert facility available to you -
|
||
someone should be tasked with running around and fixing printers with no
|
||
ink or paper. Npadmin (see Section 11.10.1) can be used to do some
|
||
management operations with SNMP printers.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
8.4. Accounting
|
||
|
||
Regular LPD provides very little to help you with accounting. You can specify
|
||
the name of an accounting file in the af printcap attribute, but this is
|
||
merely passed as an argument to your if filter. It's up to you to make your
|
||
if filter write entries to the accounting file, and up to you to process the
|
||
accounting file later (the traditional format is mainly useful for line
|
||
printers, and is nontrivial to parse in Perl, so there's no reason to
|
||
preserve it). Also, if you're using foomatic-rip program as your filter,
|
||
you'll need to make changes, since it depends on being given a configuration
|
||
file as the ``accounting'' file name.
|
||
|
||
CUPS provides page accounting by passing jobs through the pstops filter. This
|
||
filter expects Postscript input. If you use print "raw" jobs, this is always
|
||
counted as 1 page. This means that accounting will not work, if you print
|
||
from Windows client with the native printer driver.
|
||
|
||
Ghostscript provides a PageCount operator that you can use to count the
|
||
number of pages in each job; basically you just tack a few lines of
|
||
postscript onto the end of the job to write an accounting file entry; for the
|
||
best example of this see the fileunix-lpr.sh in the Ghostscript source
|
||
distribution.
|
||
|
||
Note that the unix-lpr implementation of accounting writes to a file from the
|
||
Ghostscript interpreter, and is thus incompatible with the recommended
|
||
-dSAFER option. A better solution might be to query the printer with a PJL
|
||
command after each job, or to write a postscript snippet that prints the
|
||
pagecount on stdout, where it can be captured without having to write to a
|
||
file.
|
||
|
||
The LPRng print spooler includes an HP-specific sample implementation of
|
||
accounting; I assume that it queries the printer with PJL. This technique
|
||
should work for most PJL, Postscript, or SNMP printers with which you have
|
||
two-way communications.
|
||
|
||
If you have a networked printer that supports SNMP, you can use the npadmin
|
||
program to query a pagecount after each job. This should work properly for
|
||
all print jobs. See Section 11.10.1 for more information on npadmin.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9. Vendor Solutions
|
||
|
||
This section is, by definition, incomplete. Feel free to send in details of
|
||
your favorite distribution.
|
||
|
||
There are a number of third-party packages out there designed to make printer
|
||
configuration under Unix easy. These are covered in Section 8; see the
|
||
subsection there for your particular spooling software for pointers.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9.1. Red Hat
|
||
|
||
Red Hat 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 and uses a filter program from the
|
||
rhs-printfilters package to support postscript and other common input types.
|
||
This solution works fairly well, and is trivial to setup for common cases.
|
||
|
||
Red Hat 6.x shipped a BSD LPD flavor; Red Hat 7.x and 8.0 appear to default
|
||
to using LPRng.
|
||
|
||
Where Red Hat 6.x and 7.x fail is when you have a printer which isn't
|
||
supported by their standard Ghostscript (which is GNU rather than Aladdin
|
||
Ghostscript, and which supports fewer printers). Check in the printer
|
||
compatibility list above (or [http://www.linuxprinting.org/printer_list.cgi]
|
||
online) if you find that you can't print properly with the stock Red Hat
|
||
software. If your printer isn't supported by Red Hat's tools, you may need to
|
||
install a contributed venison of Aladdin Ghostscript, and will probably also
|
||
be better off if you use the lpdomatic or apsfilter packages, which know all
|
||
about the printers supported by late-model Ghostscripts, and others besides.
|
||
|
||
Red Hat 8.0 still installs LPRng by default although you can select CUPS. But
|
||
even if you explicitly select only CUPS, LPRng is still installed. In Red Hat
|
||
8.1 CUPS will finally be the default spooler.
|
||
|
||
Red Hat 9.0 finally uses CUPS as default spooler.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9.2. Debian
|
||
|
||
Debian offers a choice between plain LPD, LPRng, or CUPS; LPRng or CUPS are
|
||
probably the better choices. PDQ is provided in the unstable tree (currently
|
||
called sid). Debian also offers a choice of printer configuration tools;
|
||
apsfilter version 5 or later is probably your best bet, since that venison
|
||
adds support for LPRng and Ghostscript's uniprint driver scheme. Red Hat's
|
||
printtool is also supported, for those who like GUI administration tools.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9.3. SuSE
|
||
|
||
The printing system on SuSE Linux is based on apsfilter, with some
|
||
enhancements; SuSE's apsfilter will recognize all common file formats
|
||
(including HTML, if html2ps is installed). There are two ways to setup
|
||
printers on SuSE systems:
|
||
|
||
<EFBFBD><EFBFBD>*<2A>YaST will let you configure "PostScript", "DeskJet" and "Other printers",
|
||
supported by Ghostscript drivers; it's also possible to setup HP's GDI
|
||
printers (DeskJet 710/720, 820, 1000, via the "ppa" package). YaST will
|
||
provide/etc/printcap entries for every printer ("raw", "ascii", "auto"
|
||
and "color", if the printer to configure is a color printer). YaST will
|
||
create spool directories and it will arrange apsfilterrc files, where
|
||
you're able to fine tune some settings (Ghostscript preloads, paper size,
|
||
paper orientation, resolution, printer escape sequences, etc.). With YaST
|
||
it's also possible to setup network printers (TCP/IP, Samba, or Novell
|
||
Netware Printer).
|
||
|
||
<EFBFBD><EFBFBD>*<2A>In addition SuSE includes the regular SETUP program from the original
|
||
apsfilter package (with some enhancements); runlprsetup to invoke this
|
||
configuration script. Once you get accustomed to its GUI, you'll be able
|
||
to configure local and network printers.
|
||
|
||
|
||
The SuSE installation manual explains both of these setup procedures.
|
||
|
||
Wolf Rogner reported some difficulties with SuSE. Apparently the following
|
||
bugs may bite:
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Apsfilter's regular SETUP script is a bit broken, as are the KDE setup
|
||
tools. Use YaST. [ Ed: does this still apply? It's been some time Wolf's
|
||
report. ]
|
||
|
||
<EFBFBD><EFBFBD>*<2A>For networked printers that need to be fed from Ghostscript, you'll need
|
||
to first uncomment the line REMOTE_PRINTER="remote" in /etc/apsfilterrc.
|
||
Then run YaST to configure the printer and, under Network configurations,
|
||
set up a remote printer queue.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>YaST's setup doesn't allow color laser printers, so configure a mono
|
||
printer and then change mono to color everywhere in the printcap entry.
|
||
You may have to rename the spool directory, too.
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
9.4. Caldera
|
||
|
||
Caldera ships LPRng. I have no idea what sort of setup tools they offer.
|
||
|
||
I've just signed up a Caldera employee as a maintainer of the
|
||
LinuxPrinting.org database; evidently they plan to ship a CUPS and
|
||
Foomatic-based print system in future releases.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9.5. Corel
|
||
|
||
Corel is Debian-based, so all the Debian facts above should still apply. In
|
||
addition, they've written their own setup tool, based on the sysAPS library
|
||
which in turn uses my database. They've certainly done so as part of
|
||
WordPerfect.
|
||
|
||
Corel operates a printing support newsgroup named [news://cnews.corel.com/
|
||
corelsupport.linux.printing] corelsupport.linux.printing. The bulk of the
|
||
traffic appears to be WordPerfect and Corel Linux related.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9.6. Mandrake
|
||
|
||
As of version 7.2b1, Mandrake ships with CUPS standard. The program QtCUPS is
|
||
used to provide a clean GUI administration interface. Till went to some
|
||
trouble to include as many drivers as possible, and they ship CUPS PPD files
|
||
build with my own [http://www.linuxprinting.org/foomatic.html] foomatic
|
||
interface code. Mandrake was the first distro to ship CUPS.
|
||
|
||
I think Earlier Mandrake versions shipped with the Red Hat printtool.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9.7. Slackware
|
||
|
||
Slackware ships with APS Filter. The apsfilter SETUP script is installed as
|
||
the command `apsfilterconfig'. You should be able to get a reasonable setup
|
||
by simply running that.
|
||
|
||
As of Slackware 9.0, CUPS is included in the extras dir of slackware but the
|
||
default is still LPRng + APSFilter.
|
||
-----------------------------------------------------------------------------
|
||
|
||
9.8. Other Distributions
|
||
|
||
Please send me info on what other distributions do!
|
||
-----------------------------------------------------------------------------
|
||
|
||
10. Ghostscript.
|
||
|
||
[http://www.cs.wisc.edu/~ghost/] Ghostscript is an incredibly significant
|
||
program for free software-driven printing. Most printing software under Unix
|
||
generates PostScript, which is typically a $100 option on a printer.
|
||
Ghostscript, however, is free, and will generate the language of your printer
|
||
from PostScript.
|
||
|
||
Ghostscript is available in several forms. The commercial version of
|
||
Ghostscript, called Aladdin Ghostscript, may be used freely for personal use
|
||
but may not be distributed by commercial entities. It is generally a year or
|
||
so ahead of the free Ghostscript; at the moment, for example, it supports
|
||
many color inkjets that the older Ghostscripts do not and has rather better
|
||
PDF support.
|
||
|
||
The main free version of Ghostscript is GNU Ghostscript, and is simply an
|
||
aged version of Aladdin ghostscript. This somewhat awkward arrangement has
|
||
allowed Aladdin to be a totally self-funded free software project; the
|
||
leading edge versions are done by L Peter and a few employees, and are
|
||
licensed to hardware and software vendors for use in commercial products.
|
||
Unfortunately, while this scheme has provided for L Peter's continued work on
|
||
Ghostscript for years, it has also inhibited the participation of the wider
|
||
free software community. Driver authors, in particular, find the arrangement
|
||
poor. L Peter's retirement plans mandate a larger community involvement in
|
||
the project, so he is considering license changes, and has established a
|
||
SourceForge project.
|
||
|
||
The third version of Ghostscript is ESP Ghostscript, maintained by Easy
|
||
Software Products (authors of CUPS) under contract from Epson. ESP
|
||
Ghostscript is a combination of the gimp-print driver project's drivers and
|
||
GNU Ghostscript, plus assorted usability patches. This version is not yet in
|
||
full swing, but it will be available soon, and will hopefully simplify life
|
||
for owners of Gimp-print-driven printers.
|
||
|
||
Whatever you do with [http://www.linuxprinting.org/man/gs.1.html] gs, be very
|
||
sure to run it with the option for disabling file access (-dSAFER).
|
||
PostScript is a fully functional language, and a bad PostScript program could
|
||
give you quite a headache.
|
||
|
||
Speaking of PDF, Adobe's Portable Document Format (at least through 1.3) is
|
||
actually little more than organized PostScript in a compressed file.
|
||
Ghostscript can handle PDF input just as it does PostScript. So you can be
|
||
the first on your block with a PDF-capable printer.
|
||
-----------------------------------------------------------------------------
|
||
|
||
10.1. Invoking Ghostscript
|
||
|
||
Typically, Ghostscript will be run by whatever filter you settle upon (I
|
||
recommend Foomatic if your vendor didn't supply anything that suits you), but
|
||
for debugging purposes it is often handy to run it directly.
|
||
|
||
gs -helpwill give a brief listing of options and available drivers (note
|
||
that this list is the list of drivers compiled in, not the master list of all
|
||
available drivers).
|
||
|
||
You might run gs for testing purposes like: `gs <options> -q -dSAFER
|
||
-sOutputFile=/dev/lp1 test.ps'.
|
||
-----------------------------------------------------------------------------
|
||
|
||
10.2. Ghostscript output tuning
|
||
|
||
There are a number of things one can do if Ghostscript's output is not
|
||
satisfactory (actually, you can do anything you darn well please, since you
|
||
have the source).
|
||
|
||
Some of these options, and others are described in the Ghostscript User Guide
|
||
(the file [http://www.cs.wisc.edu/~ghost/aladdin/doc/Use.htm] Use.htm in the
|
||
Ghostscript distribution; possibly installed under /usr/doc or/usr/share/doc
|
||
on your system) are all excellent candidates for driver options in your
|
||
filter system.
|
||
-----------------------------------------------------------------------------
|
||
|
||
10.2.1. Output location and size
|
||
|
||
The location, size, and aspect ratio of the image on a page is controlled by
|
||
the printer-specific driver in ghostscript. If you find that your pages are
|
||
coming out scrunched too short, or too long, or too big by a factor of two,
|
||
you might want to look in your driver's source module and adjust whatever
|
||
parameters jump out at you. Unfortunately, each driver is different, so I
|
||
can't really tell you what to adjust, but most of them are reasonably well
|
||
commented.
|
||
-----------------------------------------------------------------------------
|
||
|
||
10.2.2. Gamma, dotsizes, etc.
|
||
|
||
Most non-laser printers suffer from the fact that their dots are rather
|
||
large. This results in pictures coming out too dark. If you experience this
|
||
problem with an otherwise untunable driver, you could use your own transfer
|
||
function. Simply create the following file in the ghostscript lib-dir and add
|
||
its name to the gs call just before the actual file. You may need to tweak
|
||
the actual values to fit your printer. Lower values result in a brighter
|
||
print. Especially if your driver uses a Floyd-Steinberg algorithm to
|
||
rasterize colors, lower values ( 0.2 - 0.15 ) are probably a good choice.
|
||
|
||
|
||
%!
|
||
%transfer functions for cyan magenta yellow black
|
||
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
|
||
|
||
|
||
|
||
It is also possible to mend printers that have some kind of color fault by
|
||
tweaking these values. If you do that kind of thing, I recommend using the
|
||
filecolorcir.ps, that comes with ghostscript (in the examples/ subdirectory),
|
||
as a test page.
|
||
|
||
For many of the newer color inkjet drivers, there are command-line options,
|
||
or different upp driver files, which implement gamma and other changes to
|
||
adapt the printer to different paper types. You should look into this before
|
||
playing with Postscript to fix things.
|
||
-----------------------------------------------------------------------------
|
||
|
||
10.2.3. Color Printing in Ghostscript
|
||
|
||
Ghostscript's default color dithering is optimized for low-resolution
|
||
devices. It will dither rather coarsely in an attempt to produce 60ppi output
|
||
(not dpi, ppi - the "apparent" color pixels per inch you get after
|
||
dithering). This produces rather poor output on modern color printers;
|
||
inkjets with photo paper, in particular, are capable of much finer ppi
|
||
settings.
|
||
|
||
To adjust this, use the Ghostscript option-dDITHERPPI=x, where x is the value
|
||
to use. This may or may not have an effect with all drivers; many newer
|
||
drivers (the Epson Stylusstp driver, for example) implement their own
|
||
dithering and pay no attention to this setting. Some drivers can use either
|
||
the regular Ghostscript or driver-specific dithering (the Canon Bubblejet
|
||
bjc600 driver, for example).
|
||
|
||
Ghostscript's dithering is in fact rather rudimentary. Many things needed for
|
||
good output on modern printers are simply not available in the Ghostscript
|
||
core. Various projects to fix this situation??and the free software world
|
||
does have the software to do so ready and waiting??are hampered by
|
||
Ghostscript's licensing situation and the resulting "cathedral" development
|
||
style. Beginning at the Open Source Printing Summit 2000, however, all the
|
||
necessary people are talking, so you can expect this situation to improve
|
||
shortly.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11. Networks
|
||
|
||
One of the features of most spoolers is that they support printing over the
|
||
network to printers physically connected to a different machine, or to the
|
||
network directly. With the careful combination of filter scripts and assorted
|
||
utilities, you can print transparently to printers on all sorts of networks.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.1. Printing to a Unix/lpd host
|
||
|
||
To allow remote machines to print to your printer using the LPD protocol, you
|
||
must list the machines in/etc/hosts.equiv or/etc/hosts.lpd. (Note that
|
||
hosts.equiv has a host of other effects; be sure you know what you are doing
|
||
if you list any machine there). You can allow only certain users on the other
|
||
machines to print to your printer by using the rs attribute; read the [http:/
|
||
/www.linuxprinting.org/man/lpd.8.html] lpd man page for information on this.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.1.1. With lpd
|
||
|
||
To print to another machine, you make an/etc/printcap entry like this:
|
||
# REMOTE djet500
|
||
lp|dj|deskjet:\
|
||
:sd=/var/spool/lpd/dj:\
|
||
:rm=machine.out.there.com:\
|
||
:rp=printername:\
|
||
:sh:
|
||
Note that there is still a spool directory on the local machine managed by
|
||
lpd. If the remote machine is busy or offline, print jobs from the local
|
||
machine wait in the spool area until they can be sent.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.1.2. With rlpr
|
||
|
||
You can also use rlpr to send a print job directly to a queue on a remote
|
||
machine without going through the hassle of configuring lpd to handle it.
|
||
This is mostly useful in situations where you print to a variety of printers
|
||
only occasionally. From the announcement forrlpr:
|
||
|
||
Rlpr uses TCP/IP to send print jobs to lpd servers anywhere on a network.
|
||
|
||
Unlike lpr, it *does not* require that the remote printers be explicitly
|
||
known to the machine you wish to print from, (e.g. through /etc/printcap) and
|
||
thus is considerably more flexible and requires less administration.
|
||
|
||
rlpr can be used anywhere a traditional lpr might be used, and is backwards
|
||
compatible with traditional BSD lpr.
|
||
|
||
The main power gained by rlpr is the power to print remotely *from anywhere
|
||
to anywhere* without regard for how the system you wish to print from was
|
||
configured. Rlpr can work as a filter just like traditional lpr so that
|
||
clients executing on a remote machine like netscape, xemacs, etc, etc can
|
||
print to your local machine with little effort.
|
||
|
||
Rlpr is available from [ftp://metalab.unc.edu/pub/Linux/system/printing/]
|
||
Metalab.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.2. Printing to a Windows or Samba printer
|
||
|
||
There is a Printing to Windows mini-HOWTO out there which has more info than
|
||
there is here.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.2.1. From LPD
|
||
|
||
It is possible to direct a print queue through the [http://
|
||
www.linuxprinting.org/man/smbclient.1.html] smbclient program (part of the
|
||
Samba suite) to a TCP/IP based SMB print service. Samba includes a script to
|
||
do this called smbprint. In short, you put a configuration file for the
|
||
specific printer in question in the spool directory, and install the smbprint
|
||
script as theif.
|
||
|
||
The /etc/printcap entry goes like this:
|
||
lp|remote-smbprinter:\
|
||
:sh:\
|
||
:lp=/dev/null:\
|
||
:sd=/var/spool/lpd/lp:\
|
||
:if=/usr/local/sbin/smbprint:
|
||
|
||
You should read the documentation inside the smbprint script for more
|
||
information on how to set this up.
|
||
|
||
You can also use smbclient to submit a file directly to an SMB printing
|
||
service without involving lpd. See the man page.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.3. Printing to a NetWare Printer
|
||
|
||
The ncpfs suite includes a utility called nprint which provides the same
|
||
functionality as smbprint but for NetWare. You can get ncpfs from [ftp://
|
||
metalab.unc.edu/pub/Linux/system/filesystems/ncpfs/] Metalab. From the LSM
|
||
entry for version 0.16:
|
||
|
||
"With ncpfs you can mount volumes of your NetWare server under Linux. You
|
||
can also print to NetWare print queues and spool NetWare print queues to the
|
||
Un*x print spooler. You need kernel 1.2.x or 1.3.54 and above. ncpfs does NOT
|
||
work with any 1.3.x kernel below 1.3.54."
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.3.1. From LPD
|
||
|
||
To make nprint work via lpd, you write a little shell script to print stdin
|
||
on the NetWare printer, and install that as the if for an lpd print queue.
|
||
You'll get something like:
|
||
sub2|remote-NWprinter:\
|
||
:sh:\
|
||
:lp=/dev/null:\
|
||
:sd=/var/spool/lpd/sub2:\
|
||
:if=/var/spool/lpd/nprint-script:
|
||
The nprint-script might look approximately like:
|
||
#! /bin/sh
|
||
# You should try the guest account with no password first!
|
||
/usr/local/bin/nprint -S net -U name -P passwd -q printq-name -
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.4. Printing to an EtherTalk (Apple) printer
|
||
|
||
The netatalk package includes something like nprint and smbclient. Others
|
||
have documented the procedure for printing to and from an Apple network far
|
||
better than I ever will; see the Linux Netatalk-HOWTO.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.5. Printing to a networked printer
|
||
|
||
Many printers come with an ethernet interface which you can print to
|
||
directly, typically using the LPD protocol. You should follow the
|
||
instructions that came with your printer or its network adaptor, but in
|
||
general, such printers are "running" lpd, and provide one or more queues
|
||
which you can print to. An HP, for example, might work with a printcap like:
|
||
lj-5|remote-hplj:\
|
||
:sh:\
|
||
:sd=/var/spool/lpd/lj-5:\
|
||
:rm=printer.name.com:\
|
||
:rp=raw:
|
||
|
||
HP Laserjet printers with JetDirect interfaces generally support two built in
|
||
lpd queues - "raw" which accepts PCL (and possibly Postscript) and "text"
|
||
which accepts straight ascii (and copes automatically with the staircase
|
||
effect). If you've got a JetDirect Plus3 three-port box, the queues are named
|
||
"raw1", "text2", and so forth.
|
||
|
||
Note that the ISS company has identified an assortment of denial of service
|
||
attacks which hang HP Jetdirect interfaces. Most of these have been addressed
|
||
beginning in Fall 98. These sorts of problems are common in embedded code;
|
||
few appliance-style devices should be exposed to general Internet traffic.
|
||
|
||
In a large scale environment, especially a large environment where some
|
||
printers do not support PostScript, it may be useful to establish a dedicated
|
||
print server to which all machines print and on which all ghostscript jobs
|
||
are run. This will allow the queue to be paused or reordered using the topq
|
||
and lprm commands.
|
||
|
||
This also allows your GNU/Linux box to act as a spool server for the printer
|
||
so that your network users can complete their print jobs quickly and get on
|
||
with things without waiting for the printer to print any other job that
|
||
someone else has sent. This is suggested too if you have unfixable older HP
|
||
Jetdirects; it reduces the likelihood of the printers wedging.
|
||
|
||
To do this, set up a queue on your linux box that points at the ethernet
|
||
equipped HP LJ (as above). Now set up all the clients on your LAN to point at
|
||
the LPD queue (eg lj-5 in the example above).
|
||
|
||
Some HP network printers apparently don't heed the banner page setting sent
|
||
by clients; you can turn off their internally generated banner page by
|
||
telnetting to the printer, hitting return twice, typing "banner: 0" followed
|
||
by "quit". There are other settings you can change this way, as well; type "?
|
||
" to see a list.
|
||
|
||
The full range of settings can be controlled with HP's [http://www.hp.com/go/
|
||
webjetadmin] webJetAdmin software. This package runs as a daemon, and accepts
|
||
http requests on a designated port. It serves up forms and Java applets which
|
||
can control HP printers on the network. In theory, it can also control Unix
|
||
print queues, but it does so using the rexec service, which is completely
|
||
unsecure. I don't advise using that feature.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.5.1. To AppSocket Devices
|
||
|
||
Some printers (and printer networking "black boxes") support only a cheesy
|
||
little non-protocol involving plain TCP connections; this is sometimes called
|
||
the "AppSocket" protocol. Notable in this category are early-model JetDirect
|
||
(including some JetDirectEx) cards. Basically, to print to the printer, you
|
||
must open a TCP connection to the printer on a specified port (typically
|
||
9100, or 9100, 9101 and 9102 for three-port boxes) and stuff your print job
|
||
into it. LPRng has built-in support for stuffing print jobs into random TCP
|
||
ports, but with BSD lpd it's not so easy. The best thing is probably to
|
||
obtain and use the little utility called netcat.
|
||
|
||
Failing that, it can be implemented, among other ways, in Perl using the
|
||
program below. For better performance, use the program netcat ("nc"), which
|
||
does much the same thing in a general purpose way. Most distributions should
|
||
have netcat available in prepackaged form.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.6. Running an if for remote printers with old LPDs
|
||
|
||
One oddity of older versions of lpd is that the if is not run for remote
|
||
printers. (Versions after 0.43 or so have the change originated on FreeBSD
|
||
such that the if is always run). If you find that you need to run anif for a
|
||
remote printer, and it isn't working with your lpr, you can do so by setting
|
||
up a double queue and requeueing the job. As an example, consider
|
||
thisprintcap:
|
||
|
||
|
||
lj-5:\
|
||
:lp=/dev/null:sh:\
|
||
:sd=/var/spool/lpd/lj-5:\
|
||
:if=/usr/lib/lpd/filter-lj-5:
|
||
lj-5-remote:sh:rm=printer.name.com:\
|
||
:rp=raw:sd=/var/spool/lpd/lj-5-raw:
|
||
|
||
|
||
in light of this filter-lj-5 script:
|
||
#!/bin/sh
|
||
gs <options> -q -dSAFER -sOutputFile=- - | \
|
||
lpr -Plj-5-remote -U$5
|
||
|
||
The -U option to lpr only works if lpr is run as daemon, and it sets the
|
||
submitter's name for the job in the resubmitted queue correctly. You should
|
||
probably use a more robust method of getting the username, since in some
|
||
cases it is not argument 5. See the man page for [http://
|
||
www.linuxprinting.org/man/printcap.5.html] printcap.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.7. From Windows.
|
||
|
||
Printing from a Windows (or presumably, OS/2) client to a Un*x server is
|
||
directly supported over SMB through the use of the SAMBA package, which also
|
||
supports file sharing of your Un*x filesystem to Windows clients.
|
||
|
||
Samba includes fairly complete documentation, and there is a good Samba FAQ
|
||
which covers it, too. You can either configure a magic filter on the Un*x box
|
||
and print PostScript to it, or run around installing printer-specific drivers
|
||
on all the Windows machines and having a queue for them with no filters at
|
||
all. Relying on the Windows drivers may in some cases produce better output,
|
||
but is a bit more of an administrative hassle if there are many Windows
|
||
boxes. So try Postscript first. Modern versions of Samba should support the
|
||
automagical driver download mechanism offered by Windows NT servers to deal
|
||
with this problem.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.8. From an Apple.
|
||
|
||
Netatalk supports printing from Apple clients over EtherTalk. See the
|
||
Netatalk HOWTO Page for more information.
|
||
|
||
Really, though, any modern Mac can print over TCP/IP using the LPD protocol
|
||
just fine. UVa provides a very nice [http://www.itc.virginia.edu/desktop/mac/
|
||
ip_printing/ip_printing.html] support page detailing how to set this up.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.9. From Netware.
|
||
|
||
The ncpfs package includes a daemon named pserver which can be used to
|
||
provide service to a NetWare print queue. From what I understand, this system
|
||
requires a Bindery-based NetWare, eg 2.x, 3.x, or 4.x with bindery access
|
||
enabled.
|
||
|
||
For more information on ncpfs and it's pserver program, see the ncpfs FTP
|
||
site.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.10. Networked Printer Administration
|
||
|
||
Most networked printers support some method of remote administration. Often
|
||
there are easy-to-use web pages for configuration. More usefully, there is
|
||
often support for SNMP management. Typically you can find out interesting
|
||
information on printer status like ink and paper levels, print volumes, and
|
||
so forth, and you can usually change certain settings. SNMP printer control,
|
||
and a number of other printing-related things, are being standardized by the
|
||
IEEE's [http://www.pwg.org/] Printer Working Group
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.10.1. npadmin
|
||
|
||
[http://npadmin.sourceforge.net/] Npadminis a command-line program which
|
||
offers an interface to the common SNMP functionality of networked printers.
|
||
It implements the standard Printer MIB, as well as a few vendor-proprietary
|
||
schemes used mainly for older devices. Both printer-discovery style actions
|
||
and various printer status queries are supported.
|
||
|
||
npadmin has an excellent [http://npadmin.sourceforge.net/man/] man page, and
|
||
precompiled packages are distributed for a number of RPM and dpkg based
|
||
distributions.
|
||
-----------------------------------------------------------------------------
|
||
|
||
11.10.2. Other SNMP tools
|
||
|
||
Besides npadmin, there are a number of SNMP tools that will be useful.
|
||
snmptraplogd can log SNMP trap events. This is useful for observing printer
|
||
jams, out of paper events, etc; it would be straightforward to retransmit
|
||
certain events to a pager, or to send an email.
|
||
|
||
While npadmin provides simplified support for many network printers' SNMP
|
||
interfaces, some printers may have vendor extensions which npadmin doesn't
|
||
know about. In this case, you can use the CMU SNMP tools, which support
|
||
arbitrary SNMP GET and SET operations, as well as walks and the like. With
|
||
these, and a bit of work, you can make use of any SNMP feature offered by
|
||
your printer's MIB. You may need to obtain a MIB from your vendor to figure
|
||
out what all the variables are; sometimes vendors think that people actually
|
||
use the proprietary tools they ship.
|
||
|
||
VA Linux's [http://sourceforge.net/project/?group_id=3648] libprinterconf
|
||
includes code to perform network printer discovery. Printers are identified
|
||
against a compiled-in library of printer signatures; at the moment the
|
||
library is not large, but does cover many common networked printer models.
|
||
-----------------------------------------------------------------------------
|
||
|
||
12. Windows-only printers
|
||
|
||
As I discussed earlier, some printers are inherently unsupported because they
|
||
don't speak a normal printer language, instead using the computer's CPU to
|
||
render a bitmap which is then piped to the printer at a fixed speed. In a few
|
||
cases, these printers also speak something normal like PCL, but often they do
|
||
not. In some (really low-end) cases, the printer doesn't even use a normal
|
||
parallel connection but relies on the vendor's driver to emulate what should
|
||
be hardware behavior (most importantly flow control).
|
||
|
||
In any case, there are a few possible workarounds if you find yourself stuck
|
||
with such a lemon.
|
||
-----------------------------------------------------------------------------
|
||
|
||
12.1. The Ghostscript Windows redirector
|
||
|
||
There is now a Ghostscript printer driver available (called mswinpr2) that
|
||
will print using Windows GDI calls. There is also a port redirection tool
|
||
called redmon which will run a print job through Ghostscript before finally
|
||
printing it. (Rather like an if filter in Unix's LPD). Taken all together,
|
||
this allows a Windows machine to print PostScript to a Windows-only printer
|
||
through the vendor's driver.
|
||
|
||
If you have a host-based printer that can't be used directly, you can export
|
||
it as a "Postscript" printer by using redmon, Ghostscript, and mswinpr2 on a
|
||
Windows PC and print through the vendor's drivers.
|
||
-----------------------------------------------------------------------------
|
||
|
||
12.2. HP Winprinters
|
||
|
||
Some HP printers use "Printing Performance Architecture" (marketing speak for
|
||
"we were too cheap to implement PCL"). This is supported in a roundabout way
|
||
via the pbm2ppa translator written by Tim Norman. Basically, you use
|
||
ghostscript to render PostScript into a bitmapped image in pbm format and
|
||
then use pbm2ppa to translate this into a printer-specific ppa format bitmap
|
||
ready to be dumped to the printer. This program may also come in ghostscript
|
||
driver format by now.
|
||
|
||
The ppa software can be had from the ppa home page; pbm2ppa supports some
|
||
models of the HP 720, 820, and 1000; read the documentation that comes with
|
||
the package for more details on ppa printer support.
|
||
-----------------------------------------------------------------------------
|
||
|
||
12.3. Lexmark Winprinters
|
||
|
||
Most of the cheap Lexmark inkjets use a proprietary language and are
|
||
therefore Winprinters. However, Henryk Paluch has written a program which can
|
||
print on a Lexmark 7000. Hopefully he'll be able to figure out color and
|
||
expand support to other Lexmark inkjets. See [http://bimbo.fjfi.cvut.cz/
|
||
~paluch/l7kdriver/] here for more info.
|
||
|
||
Similarly, there are now drivers for the 5700, 1000, 1100, 2070, 3200, and
|
||
others. See the supported printers listing above, and my web site, for more
|
||
information on obtaining these drivers.
|
||
-----------------------------------------------------------------------------
|
||
|
||
13. How to print to a fax machine.
|
||
|
||
You can print to a fax machine with, or without, a modem.
|
||
-----------------------------------------------------------------------------
|
||
|
||
13.1. Using a faxmodem
|
||
|
||
There are a number of fax programs out there that will let you fax and
|
||
receive documents. One of the most powerful is Sam Leffler's [http://
|
||
www.hylafax.org/] HylaFAX. It supports all sorts of things from multiple
|
||
modems to broadcasting.
|
||
|
||
SuSE ships a Java HylaFax client which allegedly works on any Java platform
|
||
(including Windows and GNU/Linux). There are also non-Java fax clients for
|
||
most platforms; GNU/Linux can almost certainly handle your network faxing
|
||
needs.
|
||
|
||
Also available, and a better choice for smaller installations, is [http://
|
||
casas.ee.ubc.ca/efax/] efax, a simple program which sends and receives faxes.
|
||
The getty program mgetty can receive faxes using efax (and do voicemail or
|
||
interactive logins).
|
||
-----------------------------------------------------------------------------
|
||
|
||
13.2. Using the Remote Printing Service
|
||
|
||
There is an experimental service offered that lets you send an email message
|
||
containing something you'd like printed such that it will appear on a fax
|
||
machine elsewhere. Nice formats like postscript are supported, so even though
|
||
global coverage is spotty, this can still be a very useful service. For more
|
||
information on printing via the remote printing service, see the [http://
|
||
www.tpc.int/] Remote Printing WWW Site.
|
||
-----------------------------------------------------------------------------
|
||
|
||
13.3. Commercial Faxing Services
|
||
|
||
A number of companies operate web-based faxing services. [http://www.efax.com
|
||
/] EFax, in particular, offers free inbound faxes (to your own dedicated fax
|
||
number, no less) via email, and fax transmission for a fee. Other companies
|
||
offer similar services.
|
||
-----------------------------------------------------------------------------
|
||
|
||
14. How to generate something worth printing.
|
||
|
||
Here we get into a real rat's-nest of software. Basically, Linux can run many
|
||
types of binaries with varying degrees of success: Linux/x86, Linux/Alpha,
|
||
Linux/Sparc, Linux/foo, iBCS, Win16/Win32s (with dosemu and, someday, with
|
||
Wine), Mac/68k (with Executor), and Java. I'll just discuss native GNU/Linux
|
||
and common Un*x software.
|
||
-----------------------------------------------------------------------------
|
||
|
||
14.1. Markup languages
|
||
|
||
Most markup languages are more suitable for large or repetitive projects,
|
||
where you want the computer to control the layout of the text to make things
|
||
uniform.
|
||
|
||
nroff
|
||
This was one of the first markup languages on the original version of
|
||
Unix. Man pages are the most common examples of things formatted in *roff
|
||
macros; many people swear by them, but nroff has, to me at least, a more
|
||
arcane syntax than needed (see Figure 12), and probably makes a poor
|
||
choice for new works. It is worth knowing, though, that you can typeset a
|
||
man page directly into postscript with groff. Most man commands will do
|
||
this for you with man -t foo | lpr.
|
||
|
||
|
||
Figure 12. Example of roff Input
|
||
.B man
|
||
is the system's manual pager. Each
|
||
.I page
|
||
argument given to
|
||
.B man
|
||
is normally the name of a program, utility or function.
|
||
The
|
||
.I manual page
|
||
associated with each of these arguments is then found and
|
||
displayed. A
|
||
.IR section ,
|
||
if provided, will direct
|
||
.B man
|
||
to look
|
||
only in that
|
||
.I section
|
||
of the manual.
|
||
|
||
TeX
|
||
TeX, and the macro package LaTeX, are one of the most widely used markup
|
||
languages on Un*x systems, although TeX did not originate on Unix and is
|
||
available to run on a wide variety of systems. Technical works are
|
||
frequently written in LaTeX because it greatly simplifies the layout
|
||
issues and isstill one of the few text processing systems to support
|
||
mathematics both completely and well. TeX's output format is dvi, and is
|
||
converted to PostScript or Hewlett Packard's PCL with dvips or dvilj. If
|
||
you wish to install TeX or LaTeX, install the whole teTeX group of
|
||
packages; it contains everything. Recent TeX installations include pdfTeX
|
||
and pdfLaTeX, which produce Adobe PDF files directly. Commands are
|
||
available do create hyperlinks and navigation features in the PDF file.
|
||
|
||
|
||
Figure 13. Example of LaTeX Input
|
||
\subsubsection{NAT}
|
||
|
||
Each real server is assigned a different IP address, and the NA
|
||
implements address translation for all inbound and outbound
|
||
packets.
|
||
|
||
\begin{description}
|
||
\item[Advantage] Implementation simplicity, especially if we
|
||
already implement other NAT capabilities.
|
||
|
||
\item[Disadvantage] Return traffic from the server goes through
|
||
address translation, which may incur a speed penalty. This
|
||
probably isn't too bad if we design for it from the
|
||
beginning.
|
||
|
||
\item[Disadvantage] NAT breaks the end-to-end semantics of normal
|
||
internet traffic. Protocols like ftp, H.323, etc would
|
||
require special support involving snooping and in-stream
|
||
rewriting, or complete protocol proxying; neither is likely
|
||
to be practical.
|
||
\end{description}
|
||
|
||
SGML
|
||
There is at least one free SGML parser available for Un*x systems; it
|
||
forms the basis of Linuxdoc-SGML's homegrown document system. It can
|
||
support other DTD's, as well, most notably DocBook. This document is
|
||
written in DocBook-DTD SGML; see Figure 14 for an example.
|
||
|
||
|
||
Figure 14. Example of DocBook SGML
|
||
<varlistentry>
|
||
<term>SGML</term>
|
||
<listitem>
|
||
<para>
|
||
There is at least one free SGML parser available for Un*x
|
||
systems; it forms the basis of Linuxdoc-SGML's homegrown
|
||
document system. It can support other DTD's, as well, most
|
||
notably DocBook. This document is written in DocBook-DTD
|
||
SGML.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
|
||
-----------------------------------------------------------------------------
|
||
14.2. WYSIWYG Word Processors
|
||
|
||
There is no shortage of WYSIWYG word processing software. Several complete
|
||
office suites are available, including one that's free for personal use
|
||
(StarOffice).
|
||
|
||
StarOffice
|
||
This full-blown office suite has all the features you'd expect, including
|
||
both import and export of Microsoft Office file formats (including Word
|
||
documents). There's a mini-HOWTO out there which describes how to obtain
|
||
and install it. It generates PostScript, so should work with most any
|
||
printer that works otherwise on GNU/Linux.
|
||
|
||
WordPerfect
|
||
Corel distributes a basic version of WordPerfect 8 free for GNU/Linux,
|
||
and sells various packages of Word Perfect Office 2000 (which includes
|
||
WordPerfect, Corel Draw and Quattro Pro Versions 9). The Linux
|
||
WordPerfect Fonts and Printers page has information about configuring
|
||
WordPerfect for use with either Ghostscript or its built-in printer
|
||
drivers (which are apparently identical the DOS WordPerfect drivers, if
|
||
your printer's driver isn't included in the distribution).
|
||
|
||
Applix
|
||
Applix is a cross-platform (eg, various Unices, Windows, and others)
|
||
office suite sold by the Applix company. Red Hat and SuSE sold it
|
||
themselves when it was the only game in town; now sales have reverted to
|
||
Applix. This is the only native Unix-style application suite; it probably
|
||
fits in better with the Unix way of doing things.
|
||
|
||
AbiWord
|
||
[http://www.abisource.com/] AbiWord is one of several GPL WYSIWYG word
|
||
processor projects; this one has produced a very nice word processor
|
||
based on an XML format. It is capable of Word file import. AbiWord is
|
||
still a work in progress, although it is useful for small things now.
|
||
|
||
|
||
Figure 15. AbiWord
|
||
|
||
[snapshot-abiword]
|
||
|
||
LyX
|
||
LyX is a front-end to LaTeX which looks very promising. See the [http://
|
||
www.lyx.org/] LyX Homepage for more information. There is a KDE-styled
|
||
version of LyX, called Klyx; the author of LyX and the instigator of KDE
|
||
are the same person.
|
||
|
||
|
||
Figure 16. LyX
|
||
|
||
[snapshot-lyx]
|
||
|
||
Maxwell
|
||
Maxwell is a simple MS RTF-format based word processor which started as a
|
||
commercial product but is now distributed under the GPL.
|
||
|
||
|
||
Other vendors should feel free to drop me a line with your offerings.
|
||
-----------------------------------------------------------------------------
|
||
|
||
15. Printing Photographs
|
||
|
||
There are many details to getting decent photo output from common printers.
|
||
If you haven't bought a photo printer yet, see the photo-related tips in
|
||
Section 5.4.
|
||
-----------------------------------------------------------------------------
|
||
|
||
15.1. Ghostscript and Photos
|
||
|
||
Ghostscript has some difficulties rendering color photographs through most
|
||
drivers. The problems are several:
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Many drivers have poorly tuned color support. Often the colors don't
|
||
match the Windows driver output or the screen. OTOH, all drivers, and
|
||
Ghostscript as a whole, have readily adjustable color support; the
|
||
"Gamma" settings (seeSection 10.2.2) are one thing to play with, and
|
||
there are others documented in Ghostscript'sUse.htm documentation file.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>I'm only aware of one Ghostscript driver with support for 6 and 7 color
|
||
printing; it's in beta at the moment and supports most Epson Stylus Photo
|
||
models. It is rumored to produce better color than the Windows driver
|
||
(!). The Ghostscript driver core itself provides no support for non CMYK
|
||
or RGB colors; arguably, some work to put that there is needed.
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Ghostscript often ends up dithering coarsely, or generating printouts
|
||
with artifacts like banding. The dithering can usually be corrected; see
|
||
Section 10.2.3, and read the documentation for your driver.
|
||
|
||
|
||
You should be able to correct some of these problems by tuning Ghostscript;
|
||
see Section 10 for more information on how to do this. Fiddling with
|
||
Ghostscript options is much easier if you declare them as options in your
|
||
spooling system.
|
||
|
||
That said, the obvious solution for now is to use non-Ghostscript software
|
||
for printing photos, and indeed, such things do exist. The main contender is
|
||
the print plugin in the Gimp, which supports pixel-for-pixel printing on
|
||
Epson Styluses and Postscript printers (with basic PPD support). That Epson
|
||
Stylus portion of that driver is available for Ghostcript, as well, as thestp
|
||
driver. Also possible to use for this purpose are the assorted external
|
||
pnm-to-foo programs used to print on printers like the cheap Lexmarks; these
|
||
print attempt to print pixmaps pixel-for-pixel.
|
||
|
||
The best solution, of course, is to buy a Postscript printer; such printers
|
||
can usually be completely controlled from available free software, and will
|
||
print to the full capability of the printer.
|
||
-----------------------------------------------------------------------------
|
||
|
||
15.2. Paper
|
||
|
||
Color inkjets are extremely dependent on the paper for good output. The
|
||
expensive glossy coated inkjet papers will allow you to produce
|
||
near-photographic output, while plain uncoated paper will often produce muddy
|
||
colors and fuzzy details. Non-glossy coated inkjet papers will produce
|
||
results in between, and are probably best for final prints of text, as well.
|
||
Stiffer glossy coated "photo" papers will produce similar output to
|
||
lighter-weight glossy papers, but will feel like a regular photo.
|
||
-----------------------------------------------------------------------------
|
||
|
||
15.3. Printer Settings
|
||
|
||
For photo output on most color inkjets, you should use the most highly
|
||
interlaced (and slowest) print mode; otherwise solid regions may have banding
|
||
or weak colors. Generally with Ghostscript this is what will happen when you
|
||
pick the highest resolution. With Postscript printers, you may need to add a
|
||
snippet to the prologue based on the settings available in the PPD file. The
|
||
Gimp's PPD support doesn't include (printer-specific) print quality settings,
|
||
but I added one in an ugly way for my own use; contact me if you'd like that.
|
||
If you use PDQ or CUPS, you can easily control all the printer settings you
|
||
need. VA Linux'slibppd and the GPR front-end can also add these options for
|
||
Postscript printers.
|
||
-----------------------------------------------------------------------------
|
||
|
||
15.4. Print Durability
|
||
|
||
Color inkjet printouts usually fade after a few years, especially if exposed
|
||
to lots of light and air; this is a function of the ink. Printers with
|
||
ink-only consumables like the Epsons and Canons can buy archival inks, which
|
||
are less prone to this problem. Newer printers often use pigment-based inks,
|
||
which don't fade as much as the older dye-based ink did. No inkjet output is
|
||
really particularly good for long-term archival use. Write the bits to a CD-R
|
||
and store that instead.
|
||
-----------------------------------------------------------------------------
|
||
|
||
15.5. Shareware and Commercial Software
|
||
|
||
There's a program called [http://home.t-online.de/home/jj.sarton/startE.htm]
|
||
xwtools which supports photo printing with all the bells and whistles on an
|
||
assortment of Epson, HP, and Canon printers. Unfortunately, it was written
|
||
under NDA, so comes without source. Unless you use it for the Epson Stylus
|
||
Color 300 on GNU/Linux x86, it costs E15 for personal use; commercial pricing
|
||
is unknown.
|
||
|
||
The ESP Print Pro package from Easy Software supports some printers which
|
||
might otherwise be unsupported. These drivers are not reported to be very
|
||
well-tuned for photos, but they do work.
|
||
-----------------------------------------------------------------------------
|
||
|
||
16. On-screen previewing of printable things.
|
||
|
||
Nearly anything you can print can be viewed on the screen, too.
|
||
-----------------------------------------------------------------------------
|
||
|
||
16.1. PostScript
|
||
|
||
Ghostscript has an X11 driver best used under the management of the
|
||
PostScript previewer [http://wwwthep.physik.uni-mainz.de/~plass/gv/] gv. The
|
||
latest versions of these programs should be able to view PDF files, as well.
|
||
Note that gv has replaced the older previewer "Ghostview"; the new user
|
||
interface is much prettier and featureful that ghostview's plain old Athena
|
||
GUI.
|
||
|
||
|
||
Figure 17. Gv
|
||
|
||
[snapshot-gv]
|
||
-----------------------------------------------------------------------------
|
||
|
||
16.2. TeX dvi
|
||
|
||
TeX DeVice Independent files may be previewed under X11 with[http://
|
||
www.linuxprinting.org/man/xdvi.1.html] xdvi. Modern versions of xdvi call
|
||
ghostscript to render PostScript specials.
|
||
|
||
A VT100 driver exists as well. It's called dgvt. Tmview works with GNU/Linux
|
||
and svgalib, if that's all you can do.
|
||
-----------------------------------------------------------------------------
|
||
|
||
16.3. Adobe PDF
|
||
|
||
Adobe's Acrobat Reader is available for GNU/Linux; just download it from the
|
||
[http://www.adobe.com/] Adobe web site.
|
||
|
||
You can also use xpdf, which is free software, and I believegv supports
|
||
viewing PDF files with gs under X11.
|
||
-----------------------------------------------------------------------------
|
||
|
||
17. Serial printers under lpd
|
||
|
||
Serial printers are rather tricky under lpd.
|
||
-----------------------------------------------------------------------------
|
||
|
||
17.1. Setting up in printcap
|
||
|
||
Lpd provides five attributes which you can set in/etc/printcap to control all
|
||
the settings of the serial port a printer is on. Read the [http://
|
||
www.linuxprinting.org/man/printcap.5.html] printcap man page and note the
|
||
meanings ofbr#, fc#,xc#, fs# andxs#. The last four of these attributes are
|
||
bitmaps indicating the settings for use the port. Thebr# attribute is simply
|
||
the baud rate, eg `br#9600'.
|
||
|
||
It is very easy to translate from [http://www.linuxprinting.org/man/
|
||
stty.1.html] stty settings to printcap flag settings. If you need to, see the
|
||
man page for stty now.
|
||
|
||
Use stty to set up the printer port so that you can cat a file to it and have
|
||
it print correctly. Here's what `stty -a' looks like for my printer port:
|
||
dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
|
||
speed 9600 baud; rows 0; columns 0; line = 0;
|
||
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
|
||
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
|
||
lnext = ^V; min = 1; time = 0;
|
||
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
|
||
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
|
||
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
|
||
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
|
||
bs0 vt0 ff0
|
||
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
|
||
-tostop -echoprt -echoctl -echoke
|
||
The only changes between this and the way the port is initialized at bootup
|
||
are -clocal, -crtscts, and ixon. Your port may well be different depending on
|
||
how your printer does flow control.
|
||
|
||
You actually use stty in a somewhat odd way. Since stty operates on the
|
||
terminal connected to it's standard input, you use it to manipulate a given
|
||
serial port by using the `<' character as above.
|
||
|
||
Once you have your stty settings right, so that `cat file > /dev/ttyS2' (in
|
||
my case) sends the file to the printer, look at the file /usr/src/linux/
|
||
include/asm-i386/termbits.h. This contains a lot of #defines and a few
|
||
structs (You may wish to cat this file to the printer (you do have that
|
||
working, right?) and use it as scratch paper). Go to the section that starts
|
||
out
|
||
|
||
|
||
/* c_cflag bit meaning */
|
||
#define CBAUD 0000017
|
||
This section lists the meaning of the fc# and fs# bits. You will notice that
|
||
the names there (after the baud rates) match up with one of the lines of stty
|
||
output. Didn't I say this was going to be easy?
|
||
|
||
Note which of those settings are preceded with a - in your stty output. Sum
|
||
up all those numbers (they are octal). This represents the bits you want to
|
||
clear, so the result is yourfc# capability. Of course, remember that you will
|
||
be setting bits directly after you clear, so you can just use `fc#0177777' (I
|
||
do).
|
||
|
||
Now do the same for those settings (listed in this section) which do not have
|
||
a - before them in your stty output. In my example the important ones are CS8
|
||
(0000060), HUPCL (0002000), and CREAD (0000200). Also note the flags for your
|
||
baud rate (mine is 0000015). Add those all up, and in my example you get
|
||
0002275. This goes in your fs# capability (`fs#02275' works fine in my
|
||
example).
|
||
|
||
Do the same with set and clear for the next section of the include file,
|
||
"c_lflag bits". In my case I didn't have to set anything, so I just use `xc#
|
||
0157777' and `xs#0'.
|
||
-----------------------------------------------------------------------------
|
||
|
||
17.2. Older serial printers that drop characters
|
||
|
||
Jon Luckey points out that some older serial printers with ten-cent serial
|
||
interfaces and small buffersreally mean stop when they say so with flow
|
||
control. He found that disabling the FIFO in his Linux box's 16550 serial
|
||
port with [http://www.linuxprinting.org/man/setserial.8.html] setserial
|
||
corrected the problem of dropped characters (you apparently just specify the
|
||
UART type as an 8250 to do this).
|
||
-----------------------------------------------------------------------------
|
||
|
||
18. What's missing?
|
||
|
||
Many of the parts for a complete printing system do not exist yet. Projects
|
||
are underway to address most of these, although most have not yet produced
|
||
running useful code, and efforts to standardize the necessary protocols and
|
||
APIs are in their infancy.
|
||
-----------------------------------------------------------------------------
|
||
|
||
18.1. Plumbing
|
||
|
||
There's a general problem with getting all the parts to talk to one another;
|
||
especially in a spooler-independent way. This problem manifests itself most
|
||
noticeably in the pathetic application support for control over all the
|
||
"usual" printing features. There is simply no way for an application writer
|
||
to get information about printers, jobs, etc; no standardized way to submit
|
||
jobs; no good way to get job status back; nor even really a standardized way
|
||
to generate print data (although most of the new desktop systems offer
|
||
desktop-specific facilities for doing this).
|
||
-----------------------------------------------------------------------------
|
||
|
||
18.2. Fonts
|
||
|
||
Font handling on free systems is rather awkward. The display, the printer,
|
||
the application, and the data files should ideally all have access to the
|
||
same fonts. Unfortunately this was simply not the case. With the advent of
|
||
xft2 and fontconfig - which the newest distributions will start deploying -
|
||
this should finally be solved. Redhat 8.0 is AFAIK the first distro that uses
|
||
xft2.
|
||
-----------------------------------------------------------------------------
|
||
|
||
18.3. Drivers
|
||
|
||
There is still some work to be done on free software drivers. Although the
|
||
drivers have improved a lot the last several years, not all printers are
|
||
supported.
|
||
|
||
Printer vendors have a major role to play in this area. With the increasing
|
||
popularity of Linux it is getting really hard for them to simple ignore this
|
||
userbase.
|
||
-----------------------------------------------------------------------------
|
||
|
||
19. Credits
|
||
|
||
Special thanks to Grant Taylor for creating this HOWTO and to Till Kampeter
|
||
for foomatic and his expert advice.
|
||
|
||
The smbprint information is from an article by Marcel Roelofs <
|
||
marcel@paragon.nl>.
|
||
|
||
The nprint information for using Netware printers was provided by Michael
|
||
Smith <mikes@bioch.ox.ac.uk>.
|
||
|
||
The serial printers under lpd section is from Andrew Tefft <
|
||
teffta@engr.dnet.ge.com>.
|
||
|
||
The blurb about gammas and such for gs was sent in by Andreas<
|
||
quasi@hub-fue.franken.de>.
|
||
|
||
The two paragraphs about the 30 second closing_wait of the serial driver was
|
||
contributed by Chris Johnson <cdj@netcom.com>.
|
||
|
||
Robert Hart sent a few excellent paragraphs about setting up a print server
|
||
to networked HPs which Grant used verbatim.
|
||
|
||
And special thanks to the dozens upon dozens of you who've pointed out typos,
|
||
bad URLs, and errors in the document over the years.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A. GNU Free Documentation License
|
||
|
||
Version 1.2, November 2002
|
||
|
||
|
||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple
|
||
Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy
|
||
and distribute verbatim copies of this license document, but changing it
|
||
is not allowed.
|
||
|
||
-----------------------------------------------------------------------------
|
||
A.1. PREAMBLE
|
||
|
||
The purpose of this License is to make a manual, textbook, or other
|
||
functional and useful document "free" in the sense of freedom: to assure
|
||
everyone the effective freedom to copy and redistribute it, with or without
|
||
modifying it, either commercially or noncommercially. Secondarily, this
|
||
License preserves for the author and publisher a way to get credit for their
|
||
work, while not being considered responsible for modifications made by
|
||
others.
|
||
|
||
This License is a kind of "copyleft", which means that derivative works of
|
||
the document must themselves be free in the same sense. It complements the
|
||
GNU General Public License, which is a copyleft license designed for free
|
||
software.
|
||
|
||
We have designed this License in order to use it for manuals for free
|
||
software, because free software needs free documentation: a free program
|
||
should come with manuals providing the same freedoms that the software does.
|
||
But this License is not limited to software manuals; it can be used for any
|
||
textual work, regardless of subject matter or whether it is published as a
|
||
printed book. We recommend this License principally for works whose purpose
|
||
is instruction or reference.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.2. APPLICABILITY AND DEFINITIONS
|
||
|
||
This License applies to any manual or other work, in any medium, that
|
||
contains a notice placed by the copyright holder saying it can be distributed
|
||
under the terms of this License. Such a notice grants a world-wide,
|
||
royalty-free license, unlimited in duration, to use that work under the
|
||
conditions stated herein. The "Document", below, refers to any such manual or
|
||
work. Any member of the public is a licensee, and is addressed as "you". You
|
||
accept the license if you copy, modify or distribute the work in a way
|
||
requiring permission under copyright law.
|
||
|
||
A "Modified Version" of the Document means any work containing the Document
|
||
or a portion of it, either copied verbatim, or with modifications and/or
|
||
translated into another language.
|
||
|
||
A "Secondary Section" is a named appendix or a front-matter section of the
|
||
Document that deals exclusively with the relationship of the publishers or
|
||
authors of the Document to the Document's overall subject (or to related
|
||
matters) and contains nothing that could fall directly within that overall
|
||
subject. (Thus, if the Document is in part a textbook of mathematics, a
|
||
Secondary Section may not explain any mathematics.) The relationship could be
|
||
a matter of historical connection with the subject or with related matters,
|
||
or of legal, commercial, philosophical, ethical or political position
|
||
regarding them.
|
||
|
||
The "Invariant Sections" are certain Secondary Sections whose titles are
|
||
designated, as being those of Invariant Sections, in the notice that says
|
||
that the Document is released under this License. If a section does not fit
|
||
the above definition of Secondary then it is not allowed to be designated as
|
||
Invariant. The Document may contain zero Invariant Sections. If the Document
|
||
does not identify any Invariant Sections then there are none.
|
||
|
||
The "Cover Texts" are certain short passages of text that are listed, as
|
||
Front-Cover Texts or Back-Cover Texts, in the notice that says that the
|
||
Document is released under this License. A Front-Cover Text may be at most 5
|
||
words, and a Back-Cover Text may be at most 25 words.
|
||
|
||
A "Transparent" copy of the Document means a machine-readable copy,
|
||
represented in a format whose specification is available to the general
|
||
public, that is suitable for revising the document straightforwardly with
|
||
generic text editors or (for images composed of pixels) generic paint
|
||
programs or (for drawings) some widely available drawing editor, and that is
|
||
suitable for input to text formatters or for automatic translation to a
|
||
variety of formats suitable for input to text formatters. A copy made in an
|
||
otherwise Transparent file format whose markup, or absence of markup, has
|
||
been arranged to thwart or discourage subsequent modification by readers is
|
||
not Transparent. An image format is not Transparent if used for any
|
||
substantial amount of text. A copy that is not "Transparent" is called
|
||
"Opaque".
|
||
|
||
Examples of suitable formats for Transparent copies include plain ASCII
|
||
without markup, Texinfo input format, LaTeX input format, SGML or XML using a
|
||
publicly available DTD, and standard-conforming simple HTML, PostScript or
|
||
PDF designed for human modification. Examples of transparent image formats
|
||
include PNG, XCF and JPG. Opaque formats include proprietary formats that can
|
||
be read and edited only by proprietary word processors, SGML or XML for which
|
||
the DTD and/or processing tools are not generally available, and the
|
||
machine-generated HTML, PostScript or PDF produced by some word processors
|
||
for output purposes only.
|
||
|
||
The "Title Page" means, for a printed book, the title page itself, plus such
|
||
following pages as are needed to hold, legibly, the material this License
|
||
requires to appear in the title page. For works in formats which do not have
|
||
any title page as such, "Title Page" means the text near the most prominent
|
||
appearance of the work's title, preceding the beginning of the body of the
|
||
text.
|
||
|
||
A section "Entitled XYZ" means a named subunit of the Document whose title
|
||
either is precisely XYZ or contains XYZ in parentheses following text that
|
||
translates XYZ in another language. (Here XYZ stands for a specific section
|
||
name mentioned below, such as "Acknowledgements", "Dedications",
|
||
"Endorsements", or "History".) To "Preserve the Title" of such a section when
|
||
you modify the Document means that it remains a section "Entitled XYZ"
|
||
according to this definition.
|
||
|
||
The Document may include Warranty Disclaimers next to the notice which states
|
||
that this License applies to the Document. These Warranty Disclaimers are
|
||
considered to be included by reference in this License, but only as regards
|
||
disclaiming warranties: any other implication that these Warranty Disclaimers
|
||
may have is void and has no effect on the meaning of this License.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.3. VERBATIM COPYING
|
||
|
||
You may copy and distribute the Document in any medium, either commercially
|
||
or noncommercially, provided that this License, the copyright notices, and
|
||
the license notice saying this License applies to the Document are reproduced
|
||
in all copies, and that you add no other conditions whatsoever to those of
|
||
this License. You may not use technical measures to obstruct or control the
|
||
reading or further copying of the copies you make or distribute. However, you
|
||
may accept compensation in exchange for copies. If you distribute a large
|
||
enough number of copies you must also follow the conditions in section 3.
|
||
|
||
You may also lend copies, under the same conditions stated above, and you may
|
||
publicly display copies.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.4. COPYING IN QUANTITY
|
||
|
||
If you publish printed copies (or copies in media that commonly have printed
|
||
covers) of the Document, numbering more than 100, and the Document's license
|
||
notice requires Cover Texts, you must enclose the copies in covers that
|
||
carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the
|
||
front cover, and Back-Cover Texts on the back cover. Both covers must also
|
||
clearly and legibly identify you as the publisher of these copies. The front
|
||
cover must present the full title with all words of the title equally
|
||
prominent and visible. You may add other material on the covers in addition.
|
||
Copying with changes limited to the covers, as long as they preserve the
|
||
title of the Document and satisfy these conditions, can be treated as
|
||
verbatim copying in other respects.
|
||
|
||
If the required texts for either cover are too voluminous to fit legibly, you
|
||
should put the first ones listed (as many as fit reasonably) on the actual
|
||
cover, and continue the rest onto adjacent pages.
|
||
|
||
If you publish or distribute Opaque copies of the Document numbering more
|
||
than 100, you must either include a machine-readable Transparent copy along
|
||
with each Opaque copy, or state in or with each Opaque copy a
|
||
computer-network location from which the general network-using public has
|
||
access to download using public-standard network protocols a complete
|
||
Transparent copy of the Document, free of added material. If you use the
|
||
latter option, you must take reasonably prudent steps, when you begin
|
||
distribution of Opaque copies in quantity, to ensure that this Transparent
|
||
copy will remain thus accessible at the stated location until at least one
|
||
year after the last time you distribute an Opaque copy (directly or through
|
||
your agents or retailers) of that edition to the public.
|
||
|
||
It is requested, but not required, that you contact the authors of the
|
||
Document well before redistributing any large number of copies, to give them
|
||
a chance to provide you with an updated version of the Document.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.5. MODIFICATIONS
|
||
|
||
You may copy and distribute a Modified Version of the Document under the
|
||
conditions of sections 2 and 3 above, provided that you release the Modified
|
||
Version under precisely this License, with the Modified Version filling the
|
||
role of the Document, thus licensing distribution and modification of the
|
||
Modified Version to whoever possesses a copy of it. In addition, you must do
|
||
these things in the Modified Version:
|
||
|
||
A. Use in the Title Page (and on the covers, if any) a title distinct from
|
||
that of the Document, and from those of previous versions (which should,
|
||
if there were any, be listed in the History section of the Document). You
|
||
may use the same title as a previous version if the original publisher of
|
||
that version gives permission.
|
||
|
||
B. List on the Title Page, as authors, one or more persons or entities
|
||
responsible for authorship of the modifications in the Modified Version,
|
||
together with at least five of the principal authors of the Document (all
|
||
of its principal authors, if it has fewer than five), unless they release
|
||
you from this requirement.
|
||
|
||
C. State on the Title page the name of the publisher of the Modified
|
||
Version, as the publisher.
|
||
|
||
D. Preserve all the copyright notices of the Document.
|
||
|
||
E. Add an appropriate copyright notice for your modifications adjacent to
|
||
the other copyright notices.
|
||
|
||
F. Include, immediately after the copyright notices, a license notice giving
|
||
the public permission to use the Modified Version under the terms of this
|
||
License, in the form shown in the Addendum below.
|
||
|
||
G. Preserve in that license notice the full lists of Invariant Sections and
|
||
required Cover Texts given in the Document's license notice.
|
||
|
||
H. Include an unaltered copy of this License.
|
||
|
||
I. Preserve the section Entitled "History", Preserve its Title, and add to
|
||
it an item stating at least the title, year, new authors, and publisher
|
||
of the Modified Version as given on the Title Page. If there is no
|
||
section Entitled "History" in the Document, create one stating the title,
|
||
year, authors, and publisher of the Document as given on its Title Page,
|
||
then add an item describing the Modified Version as stated in the
|
||
previous sentence.
|
||
|
||
J. Preserve the network location, if any, given in the Document for public
|
||
access to a Transparent copy of the Document, and likewise the network
|
||
locations given in the Document for previous versions it was based on.
|
||
These may be placed in the "History" section. You may omit a network
|
||
location for a work that was published at least four years before the
|
||
Document itself, or if the original publisher of the version it refers to
|
||
gives permission.
|
||
|
||
K. For any section Entitled "Acknowledgements" or "Dedications", Preserve
|
||
the Title of the section, and preserve in the section all the substance
|
||
and tone of each of the contributor acknowledgements and/or dedications
|
||
given therein.
|
||
|
||
L. Preserve all the Invariant Sections of the Document, unaltered in their
|
||
text and in their titles. Section numbers or the equivalent are not
|
||
considered part of the section titles.
|
||
|
||
M. Delete any section Entitled "Endorsements". Such a section may not be
|
||
included in the Modified Version.
|
||
|
||
N. Do not retitle any existing section to be Entitled "Endorsements" or to
|
||
conflict in title with any Invariant Section.
|
||
|
||
O. Preserve any Warranty Disclaimers.
|
||
|
||
|
||
If the Modified Version includes new front-matter sections or appendices that
|
||
qualify as Secondary Sections and contain no material copied from the
|
||
Document, you may at your option designate some or all of these sections as
|
||
invariant. To do this, add their titles to the list of Invariant Sections in
|
||
the Modified Version's license notice. These titles must be distinct from any
|
||
other section titles.
|
||
|
||
You may add a section Entitled "Endorsements", provided it contains nothing
|
||
but endorsements of your Modified Version by various parties--for example,
|
||
statements of peer review or that the text has been approved by an
|
||
organization as the authoritative definition of a standard.
|
||
|
||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||
passage of up to 25 words as a Back-Cover Text, to the end of the list of
|
||
Cover Texts in the Modified Version. Only one passage of Front-Cover Text and
|
||
one of Back-Cover Text may be added by (or through arrangements made by) any
|
||
one entity. If the Document already includes a cover text for the same cover,
|
||
previously added by you or by arrangement made by the same entity you are
|
||
acting on behalf of, you may not add another; but you may replace the old
|
||
one, on explicit permission from the previous publisher that added the old
|
||
one.
|
||
|
||
The author(s) and publisher(s) of the Document do not by this License give
|
||
permission to use their names for publicity for or to assert or imply
|
||
endorsement of any Modified Version.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.6. COMBINING DOCUMENTS
|
||
|
||
You may combine the Document with other documents released under this
|
||
License, under the terms defined in section 4 above for modified versions,
|
||
provided that you include in the combination all of the Invariant Sections of
|
||
all of the original documents, unmodified, and list them all as Invariant
|
||
Sections of your combined work in its license notice, and that you preserve
|
||
all their Warranty Disclaimers.
|
||
|
||
The combined work need only contain one copy of this License, and multiple
|
||
identical Invariant Sections may be replaced with a single copy. If there are
|
||
multiple Invariant Sections with the same name but different contents, make
|
||
the title of each such section unique by adding at the end of it, in
|
||
parentheses, the name of the original author or publisher of that section if
|
||
known, or else a unique number. Make the same adjustment to the section
|
||
titles in the list of Invariant Sections in the license notice of the
|
||
combined work.
|
||
|
||
In the combination, you must combine any sections Entitled "History" in the
|
||
various original documents, forming one section Entitled "History"; likewise
|
||
combine any sections Entitled "Acknowledgements", and any sections Entitled
|
||
"Dedications". You must delete all sections Entitled "Endorsements".
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.7. COLLECTIONS OF DOCUMENTS
|
||
|
||
You may make a collection consisting of the Document and other documents
|
||
released under this License, and replace the individual copies of this
|
||
License in the various documents with a single copy that is included in the
|
||
collection, provided that you follow the rules of this License for verbatim
|
||
copying of each of the documents in all other respects.
|
||
|
||
You may extract a single document from such a collection, and distribute it
|
||
individually under this License, provided you insert a copy of this License
|
||
into the extracted document, and follow this License in all other respects
|
||
regarding verbatim copying of that document.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.8. AGGREGATION WITH INDEPENDENT WORKS
|
||
|
||
A compilation of the Document or its derivatives with other separate and
|
||
independent documents or works, in or on a volume of a storage or
|
||
distribution medium, is called an "aggregate" if the copyright resulting from
|
||
the compilation is not used to limit the legal rights of the compilation's
|
||
users beyond what the individual works permit. When the Document is included
|
||
an aggregate, this License does not apply to the other works in the aggregate
|
||
which are not themselves derivative works of the Document.
|
||
|
||
If the Cover Text requirement of section 3 is applicable to these copies of
|
||
the Document, then if the Document is less than one half of the entire
|
||
aggregate, the Document's Cover Texts may be placed on covers that bracket
|
||
the Document within the aggregate, or the electronic equivalent of covers if
|
||
the Document is in electronic form. Otherwise they must appear on printed
|
||
covers that bracket the whole aggregate.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.9. TRANSLATION
|
||
|
||
Translation is considered a kind of modification, so you may distribute
|
||
translations of the Document under the terms of section 4. Replacing
|
||
Invariant Sections with translations requires special permission from their
|
||
copyright holders, but you may include translations of some or all Invariant
|
||
Sections in addition to the original versions of these Invariant Sections.
|
||
You may include a translation of this License, and all the license notices in
|
||
the Document, and any Warranty Disclaimers, provided that you also include
|
||
the original English version of this License and the original versions of
|
||
those notices and disclaimers. In case of a disagreement between the
|
||
translation and the original version of this License or a notice or
|
||
disclaimer, the original version will prevail.
|
||
|
||
If a section in the Document is Entitled "Acknowledgements", "Dedications",
|
||
or "History", the requirement (section 4) to Preserve its Title (section 1)
|
||
will typically require changing the actual title.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.10. TERMINATION
|
||
|
||
You may not copy, modify, sublicense, or distribute the Document except as
|
||
expressly provided for under this License. Any other attempt to copy, modify,
|
||
sublicense or distribute the Document is void, and will automatically
|
||
terminate your rights under this License. However, parties who have received
|
||
copies, or rights, from you under this License will not have their licenses
|
||
terminated so long as such parties remain in full compliance.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.11. FUTURE REVISIONS OF THIS LICENSE
|
||
|
||
The Free Software Foundation may publish new, revised versions of the GNU
|
||
Free Documentation License from time to time. Such new versions will be
|
||
similar in spirit to the present version, but may differ in detail to address
|
||
new problems or concerns. See http://www.gnu.org/copyleft/.
|
||
|
||
Each version of the License is given a distinguishing version number. If the
|
||
Document specifies that a particular numbered version of this License "or any
|
||
later version" applies to it, you have the option of following the terms and
|
||
conditions either of that specified version or of any later version that has
|
||
been published (not as a draft) by the Free Software Foundation. If the
|
||
Document does not specify a version number of this License, you may choose
|
||
any version ever published (not as a draft) by the Free Software Foundation.
|
||
-----------------------------------------------------------------------------
|
||
|
||
A.12. ADDENDUM: How to use this License for your documents
|
||
|
||
To use this License in a document you have written, include a copy of the
|
||
License in the document and put the following copyright and license notices
|
||
just after the title page:
|
||
|
||
|
||
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute
|
||
and/or modify this document under the terms of the GNU Free Documentation
|
||
License, Version 1.2 or any later version published by the Free Software
|
||
Foundation; with no Invariant Sections, no Front-Cover Texts, and no
|
||
Back-Cover Texts. A copy of the license is included in the section
|
||
entitled "GNU Free Documentation License".
|
||
|
||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||
replace the "with...Texts." line with this:
|
||
|
||
|
||
with the Invariant Sections being LIST THEIR TITLES, with the
|
||
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
|
||
|
||
If you have Invariant Sections without Cover Texts, or some other combination
|
||
of the three, merge those two alternatives to suit the situation.
|
||
|
||
If your document contains nontrivial examples of program code, we recommend
|
||
releasing these examples in parallel under your choice of free software
|
||
license, such as the GNU General Public License, to permit their use in free
|
||
software.
|