Overview of HP's PPA DeskJet Printers.
Most of Hewlett-Packard's DeskJet(tm) printers use the PCL3 command language, and are currently supported by Ghostscript drivers. However, a few models, namely
feature "Host-based" printing, and use HP's proprietary PPA (Printer Performance Architecture) protocol, instead of PCL. The two models in each series are physically identical; they just come with different bundled Windows software. The 820C and 1000C series are discontinued at this time (January 2000).
PPA printers rely on software running on the host CPU to carry out the low-level processing of printer output that would be done by hardware in a standard PCL printer. The relation of PPA printers to PCL printers is analogous to the relation between "Winmodems" and true modems.
Unfortunately, HP only supplies Windows software drivers for PPA printers, and have indicated that it is unlikely that they will ever make the proprietary PPA specs public. This is apparently because of concerns that publication of the specs might reveal crucial details of HP's trade secrets about "color science" to competitors. (A secondary issue is that it is apparently possible to physically damage the printer by sending it bad sequences of PPA commands, which is not the case for PCL commands, and it seems that HP do not wish to take any responsibility for such damage by encouraging unofficial PPA programming.)
In fact, the decline in hardware component prices has meant that the anticipated cost-savings through using host-based PPA instead of printer-based PCL are less than expected, and two of the PPA printer series (820C, 1000C) have been phased out, and replaced by similar PCL printers in HP's product line. The 710C and 720C series are still being sold at this time of writing. All other currently-offered DeskJet models appear to be standard PCL3 printers.
Many Linux users may have inadvertently purchased PPA DeskJet models, mistaking them for PCL3 DeskJets, for which independently-produced Linux drivers have long been available. Fortunately, a reverse engineering effort, started in 1998 by Tim Norman, http://www.normsoft.com/ppa and http://www.httptech.com/ppa, and continued by the pnm2ppa project at http://sourceforge.net/projects/pnm2ppa has managed to produce drivers that provide basic printing functionality for these PPA printers under Linux and other Unices.
The pnm2ppa driver for color printing with PPA printers.
Color printing with PPA printers is currently supported by the (experimental)
pnm2ppa
driver which is the successor to the stable
(but black and white only) driver
pbm2ppa-0.8.6 developed by Tim Norman.
The pnm2ppa
color printing driver is currently (04/2000) essentially
finished, and a stable release is imminent.
Currently pnm2ppa
can translate portable anymap (pnm)
format images into a stream of PPA instructions which can be sent to the
printer. In the driver name,
"pnm" stands for the superset
of three image formats:
ppm (portable "pixmap" format for color images),
pgm (portable "greymap" format for greyscale images),
and pbm (portable "bitmap" format for black and white images).
Ghostscript has a number of "output devices" that
produce pnm format output from postscript or pdf input.
These come in plain (text) and raw
(binary) variants. While pnm2ppa
can now interpret
both plain and raw pnm formats, there is no point in using the
inefficient plain formats: always use the "raw"
output devices, which are:
ghostscript-5.10
package supplied with Red Hat 6.x distributions provides all these
devices; older versions may not. To see the list of available
ghostscript output devices, type the command line
gs --help
if the required ppmraw
or
pbmraw
devices are not shown, you will have to upgrade your
version of ghostscript.
The data must be streamed directly from ghostscript to
pnm2ppa
to the (local) printer without being
stored in any intermediate
file: one ppm-format (color) US Letter size page is represented
by 3x5100x6600 Bytes (100MB) in binary format and four times this amount in
text format.
An example of
a command line for printing a postscript
file file.ps
using gs
(ghostscript) and pnm2ppa
is
cat file.ps | gs -q -sDEVICE=ppmraw -r600 -sPAPERSIZE=letter -dNOPAUSE \
-sOutputFile=- - | pnm2ppa --eco -v 720 -i - -o - | lpr -l
(all on a single line). In this example the paper size is explicitly
given to gs
as US Letter
(8.5"x11") size
(letter
); pnm2ppa
no longer needs to be told what
the paper size is, and will read it from the gs
output (and check
that it is a permitted size for the printer type).
The pnm2ppa
option --eco
specifies "EconoFast"
mode, for a lower quality output which uses less ink, and prints faster,
and -v 720
specifies the PPA printer as belonging
to the DeskJet 720C series.
Obviously, it would be impractical to type such a command each time
one wished to print something, so in addition to the pnm2ppa
driver itself, an enhanced version of Red Hat's rhs-printfilters
RPM package is provided; after this is installed, the PPA printer
can be managed like other standard printers with the Red Hat
printtool
utility. The postscript file can then be printed with
the simple command
lpr file.ps
printtool
utility, you can
use scripts like the one above.
The HP 710C, 720C, and 820C series support paper sizes from
3"x3" to 8.5"x14", while the 1000C
supports 4"x6" to 13"x19".
Available RPM packages.
Two RPM packages are supplied by the pnm2ppa project for installation on Red Hat Linux systems, and on "compatible" distributions like Mandrake. They can be found at http://sourceforge.net/projects/pnm2ppa. (The latest versions at the time of writing are listed below, but later versions may be available when you read this.)
pnm2ppa-1.0-1.i386.rpm
printtool-3.44
or later, and rhs-printfilters-1.61 or later):
rhs-printfilters-1.57-4ppa4.i386.rpm
for
Red Hat 6.1 rhs-printfilters-1.58-4ppa5mdk.i386.rpm
for Mandrake 7.0.The second RPM (rhs-printfilters
) integrates the PPA drivers
with the Red Hat printfilters, used by Red Hat and "Red Hat-compatible"
distributions. Do not install the Red Hat RPM on Mandrake
systems: use the *mdk.i386.rpm
package for Mandrake.
pnm2ppa
in the rhs-printfilters
that comes with the distribution.
Future releases of Mandrake will also have this.
(Note that our current replacement version is only compatible
with printtool-3.43
or earlier, so it cannot replace
the version that comes with RedHat 6.2.)
pnm2ppa
rpm package now contains the latest
versions of the files used by official rhs-printfilters versions
(1.61 or greater) that suppport pnm2ppa
. You can (if necessary)
use them to manually update the printfilter files
ppaprint
and printerdb
, if they have changed since your
rhs-printfilters was released. (See
/usr/lib/rhs/rhs-printfilters/README.ppa
for details.)
This is only possible if your rhs-printfilters is new enough to
already support pnm2ppa
.
printtool
to delete any installed PPA printers BEFORE
upgrading rhs-prinfilters
. If you forget to do this, and
printool will not start after the update, delete or move your/etc/printcap
file.These packages should work on older releases of these
distributions, but perhaps may first have to be rebuilt from
their source RPMS. For example, to rebuild
the pnm2ppa
rpm, the command is
rpm --rebuild pnm2ppa-1.0-1.src.rpm
(You must be root
to do this, and have the necessary
compilers installed; the rebuilt RPM will be created in
the directory /usr/src/redhat/RPMS/i386/
.)
Installing the pnm2ppa
RPM package and setting up the PPA printer.
To install RPMS, you must log in as the system administrator,
root
.
pbm2ppa
or
pnm2ppa
by compiling it yourself from a "tarball",
you should first delete or move the old pbm2ppa
or
pnm2ppa
executable,
so it will not be found in your path (typically it will be
/usr/local/bin/pnm2ppa
).
You
should also remove the calibration programs
pbmtpg
and calibrate
, if they are in
your path, and also rename or delete
/etc/pnm2ppa.conf
, and
/etc/pbm2ppa.conf
if they exist. To check for this, the command
which pnm2ppa
will find the first instance of pnm2ppa
in your path.
Now begin the installation. First install the pnm2ppa
RPM:
rpm -Uvh pnm2ppa-1.0-1.i386.rpm
The pnm2ppa
executable gets installed in /usr/bin/
.
If you are using a 2.2.x kernel,
(Red Hat 6.x, Mandrake 6.x, etc.)
it will be able to autodetect
IEEE-1284 devices like PPA printers, provided they are attached
to the parallel port with a bidirectional IEEE-1284 cable. (If your
printer works under Windows, you have the correct cable.)
(Note that older (2.0.x) kernels do not have this autoprobe facility.)
A script detect_ppa
is provided by the pnm2ppa
RPM: just type
detect_ppa
to confirm that your Printer is found.
If it is not detected,
it is possible (especially on Red Hat 6.1) that you will have to add
a line
alias parport_lowlevel parport_pc
to the file /etc/conf.modules
for the printer to be found (this is
a parallel port recognition issue, not specific to PPA printers.
and a known "gotcha" on Red Hat 6.1).
A typical message from the printer, which will
be displayed if autodetection is successful, is:
CLASS:PRINTER;
MODEL:DESKJET 820C;
MANUFACTURER:HEWLETT-PACKARD;
DESCRIPTION:Hewlett-Packard DeskJet 820C;
COMMAND SET:SCP,VLINK;
A list of PPA printers found, and the parallel ports to which they are
attached, will also be shown.
At this point it is useful to test that your printer is working, by
printing a test page using the supplied script test_ppa
which the RPM has installed. You will need to know your
printer model (710, 712, 720, 722, 820, 1000), your paper size
(letter, legal, a4) and the printer port the printer is attached to.
If it is attached to the primary parallel port, this is
/dev/lp1
under older 2.0.x kernels, and (usually)
/dev/lp0
under newer 2.2.x kernels, as in Red Hat 6.x.
Type
test_ppa
and give the details about printer model. papersize, and port number
when prompted.
You will then be asked
which driver (new, pnm2ppa
, or old, pbm2ppa
) to test,
and whether to print a test page, a calibration
page, or a color calibration page (for the color driver only).
test_ppa
script
does not use the print filters that
will be installed by the rhs-printfilters
RPM, so it is
useful when troubleshooting, for testing if any printing problems are
associated with the basic printer installation, or with the
configuration of the print filters.
Installing the PPA-enhanced rhs-printfilters
RPM package (if needed).
The rhs-printfilters
rpm distributed with
Red Hat 6.1 does not support pnm2ppa
, and the one distributed with
Mandrake 7.0 has out-of-date PPA support. (Later distributions
include the support described here).
If you use an older distribution, you will first have to replace their
rhs-printfilters
RPM with the PPA-enhanced version from the
pnm2ppa project.
Once you have confirmed you have a working printer, install the
RPM rhs-printfilters
(either the Red Hat version
rhs-printfilters-1.57-4ppa4.i386.rpm
or
the Mandrake version
rhs-printfilters-1.58-4ppa5mdk.i386.rpm
)
which are PPA-enhanced versions of the packages
that comes with Red Hat 6.1 or Mandrake-7.0, respectively:
rpm -Uvh rhs-printfilters-1.57-4ppa4.i386.rpm (Red Hat 6.1)
or
rpm -Uvh rhs-printfilters-1.58-4ppa5mdk.i386.rpm (Mandrake 7.0)
Configuring the print filters with printtool
.
Now start the "Red Hat Linux Print System Manager" (as root) to configure the printer, either by clicking on the printer icon in Red Hat's "control-panel", or just typing
printtool
In the Print System Manager window, click on Add, then
in the "Add a Printer Entry", select Local Printer, and
click Ok. Hopefully, the port on which the printer is attached
will be listed as "Detected" (if not,
fix the problem before continuing, perhaps by
adding the line "alias parport_lowlevel parport_pc
"
to /etc/conf.modules
), as mentioned above.
You will now have to "edit
the local printer entry" for the PPA printer. Click on
Select to chose the "Input filter".
The Configure Filter screen will open.
Among the many printer entries in the list
"Printer Type", you should find three entries
rhs-printfilters
package that you updated did not allow
the printer database /usr/lib/rhs/rhs-printfilters/printerdb
to be replaced. Try deleting or renaming the printerdb
file, and then reinstall
the PPA-enhanced rhs-printfilters
RPM using
"rpm --force -Uvh rhs-printfilters*
"
Select the appropriate entry for your printer model. You will then be presented with various options:
pnm2ppa
options
--eco (EconoFast mode), -p (disable black
ink cartridge) and --bw (black and white printing only),
without direct intervention by the user.) The choices (in the
most recent printerdb
database) are:
--bw --eco
)--bw
)--eco --fd
)--eco
)-p --eco
)-p --uni
)rhs-printfilters-1.72
; if you installed a pnm2ppa
RPM package from
the SourceForge pnm2ppa site, you may have a file
/usr/lib/rhs/rhs-printfilters/README.ppa
explaining how to modify
earlier versions of rhs-printfilters
to show these updated
choices.) pnm2ppa
is
by first converting them to postscript(tm), this is not
possible on the PPA printer.
gs_options PPA ppa_options
Anything before the
"PPA
" is interpreted as a gs
option, anything after it
is interpreted as a ppa
option. You can learn about
pnm2ppa
options by typing either "man pnm2ppa
"
or "pnm2ppa --help
" at a command line (hopefully, these
two sources of information will be consistent with each other!);
pbm2ppa
options are also displayed in this way.
(The manpages for both drivers are also useful: type
"man pnm2ppa
" etc.)You are now back in the "Red Hat Print System Manager" screen; highlight the printer you just configured, and, in the Tests menu, choose Print Postscript test page to print a test page using the Red Hat print filters. If this printed correctly, your print system is set up to use the PPA printer, just like any of the other printers that the Red Hat print filters support.
Configuring pnm2ppa.conf and calibrating the printer.
A number of printer parameters are set to reasonable default values
for each of the printer models, but you may wish to "fine tune"
or calibrate your printer. The default values can be overridden
by entries in the configuration files, which by default are
/etc/pnm2ppa.conf
and /etc/pbm2ppa.conf
.
At 600dpi, one pixel is 1/600 inch.
The user-adjustable parameters are:
-x <xoff>
and -y <yoff>
options.)
See
CALIBRATION.html (or CALIBRATION.txt) for more information.
-t <top margin>
,
-b <bottom margin>
,
-l <left margin>
, and
-r <right margin>
options.)
test.ps
)
each time an ink cartrudge is replaced. (You will find
test.ps
in /usr/doc/pnm2ppa-*/
.)
See
CALIBRATION.html (or CALIBRATION.txt) for more information.
--uni
and --bi
options can control how a particular print
run is printed. Unidirectional printing is only useful
(it is slower) if there are issues of "shearing"
in high quality image printing.
-B <n>
option,
where n
is the number of drops.)
/etc/pnm2ppa.gamma
, if it exists.
See the discussion in
COLOR.html or COLOR.txt.At present, the procedures for fine-tuning these parameters are
primitive. Use test_ppa
to print the test pages
or calibration patterns to adjust the offsets.
If you wish to specify these
parameters using the command-line options
described above, they can be
entered in the "extra GS options" box using the Print System Manager
(printtool
), as described above.
Utility programs for the printer.
HP's Windows software provides a utility program that sends PPA commands to tell the printer to perform taks like cleaning the printheads, etc. The codes for some of these functions have already been reverse engineered. There are plans to add support for PPA printers to the PUP (Printer Utility Program) utility, which is also a project at http://www.sourceforge.net. However, as of the time of writing, no PUP support for PPA printers is available (volunteers, anyone?).
Troubleshooting
Here are suggestions for dealing with problems that you may encounter.
pnm2ppa
versions, printing finishes normally, but an incomplete
document is printed). The system log
reports that read_line
could not read the image, and found EOF
(end-of-file). This probably
means that ghostscript
's "ppmraw" or
"pgmraw" output device failed for some reason,
usually leaving a core dump, without completing the
translation of the postscript to a pnm format.
(This has been seen to happen in ghostscript 5.10 ;
upgrading to ghostscript 5.50 solved the problem.) If you cannot
upgrade, try printing the document
in black-and-white using the ghostscript "pbmraw" output device.testppa
script works,
but I can't get printtool
to make the printfilters work.
I think I installed pnm2ppa-1.0
and the PPA-enhanced
rhs-printfilters
(earlier than v. 1.61) from the pnm2ppa
Sourceforge page. I am using printtool
v. 3.43 or earlier
and I am probably a Mandrake user.
Solution: (a) use printtool
to uninstall the PPA printer;
(b) delete (or rename) the printer database
/usr/lib/rhs/rhs-printfilters/printerdb
, and reinstall
the rhs-printfilters
RPM using the
"rpm --force ...
"
option; (c) use printtool
to add the
PPA printer again.
(Your previously-installed rhs-printfilters
may have
resisted replacement of its printerdb
).rhs-printfilters
from the
pnm2ppa Sourceforge site. I
upgraded my distribution to one using printtool
v 3.44 or later
(e.g. RedHat 6.2).
Solution: Make sure that
rhs-printfilters
has been updated to a version
1.61 or greater that came with your
upgraded distribution.
Use printtool
to delete, and then add the
PPA printer
This will create a new printer configuration compatible
with your upgraded distribution.--uni
,
or unimode 1
in /etc/pnm2ppa.conf
) helps a little, but
this problem requires an extensive
rewrite of part of pnm2ppa (cutswath.c
)
for a satisfactory solution. (Volunteers welcome - see the TODO file in the
pnm2ppa docs (/usr/doc/pnm2ppa*/pnm2ppa/TODO
)!) gs
) to
produce the correct image, and the paper size is in the range allowed
by your printer, you should be able to do this with a
script that bypasses the print filters, as described earlier
in this document./etc/pnm2ppa,conf
, or (b)
install a customized color calibration file
/etc/pnm2ppa.gamma
. See the file
COLOR.html (or COLOR.txt) for more information.
Contacting the pnm2ppa project.
Send comments or corrections (about this document or the RPMS) to: ppa-rpms@users.sourceforge.net
There are three mailing lists, ppa.announce (announcements), ppa.users (users helping users) and ppa.devel (developers). You can subscribe to them, or browse their archives, at http://www.httptech.com/ppa.
To contact the developers, subscribe to ppa.devel and post a message.
There are Public Forums for posting questions and comments at http://sourceforge.net/projects/pnm2ppa (but whether you get any help from these, depends on whether anyone is reading them).