  PPA Printer-Support RPM Packages for Red Hat Linux and Com-
  patible Distributions
  The pnm2ppa project team ppa-rpms@users.sourceforge.net
  v0.27, Nov 11,  2000

  Information and installation instructions to accompany pnm2ppa pack-
  ages for Red Hat Linux available at http://sourceforge.net/pro-
  jects/pnm2ppa (Updated for pnm2ppa-1.04 and later.)  See the "Trou-
  bleshooting" section at the end of this document for fixes to  some
  reported problems

   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

  o  DeskJet 710C Series: HP DeskJet 710C, 712C

  o  DeskJet 720C Series: HP DeskJet 720C, 722C

  o  DeskJet 820C Series: HP DeskJet 820Cxi, 820Cse (discontinued)

  o  DeskJet 1000C Series: HP DeskJet 1000Cxi, 1000Cse (discontinued)

  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://pnm2ppa.sourceforge.net, 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 supported by the pnm2ppa driver
  which is the successor to the  older black-and-white-only driver
  pbm2ppa-0.8.6 developed by Tim Norman.


  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:

  o  ppmraw - raw pixmap format (color images);

  o  pgmraw - raw greymap format (greyscale images);

  o   pbmraw - raw bitmap format (black and white images);

  o  pnmraw - selects between ppm, pgm, and pbm raw formats;

  o  pgnmraw - selects between pgm and pbm raw formats.

     The last two output devices are switches that try to analyze the
     image, and  select an appropriate format; however, they are not
     recommended for routine use, as they may inconsistently choose the
     format.  The 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





  o  However, if you wish to print to paper sizes supported by
     ghostscript, but not supported by the Red Hat 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.

  A RPM package for pnm2ppa is  part of the Red Hat Linux distribution
  starting with Red Hat 6.2.  You will also find a RPM package for the
  latest release of pnm2ppa at http://sourceforge.net/projects/pnm2ppa.

  The latest version at the time of writing is pnm2ppa-1.04-1.i386.rpm,
  and is built on Red Hat 6.2.    If you are running  a different
  release of Red Hat (or a  different Linux  distribution) you may need
  to download and rebuild the source RPM pnm2ppa-1.04-1.src.rpm instead:


       rpm --rebuild pnm2ppa-1.04-1.src.rpm




  (You must be root to do this, and have the necessary compilers
  installed; on Red Hat, the rebuilt binary RPM will be created in the
  directory  /usr/src/redhat/RPMS/i386/.)

  Red Hat 6.2 and later also includes support for configuring your
  printer to use pnm2ppa using  printtool and rhs-printfilters.  If you
  are using  Red Hat 6.1 and earlier,you will need to update the rhs-
  printfilters that came with the distribution to the rhs-
  printfilters-1.57-4ppa4.i386.rpm  also available at
  http://sourceforge.net/projects/pnm2ppa.  (This is designed to work
  only with printtool-3.43 and earlier.)


  Note: If you are using Red Hat 6.2, you may wish to update the print
  filter support that it comes with.   The pnm2ppa-1.04-1 RPM package
  supplies the necessary files that you can use.  After installing this
  RPM, see /usr/lib/rhs/rhs-printfilters/README.ppa for details.


   Installing the pnm2ppa RPM package and setting up the PPA printer.

  To install the RPM package, you must log in as the system
  administrator, root.

  Now begin the installation. First install the pnm2ppa RPM:


       rpm -Uvh pnm2ppa-1.04-1.i386.rpm




  The pnm2ppa executable gets installed in /usr/bin/.

  If you are using a  2.2.x kernel, (e.g. Red Hat 6.x) 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.

  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 whether to print a test page,
  an offset calibration page, or an alignment calibration page, etc.

  o  Tip: The 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).


  o  This step is NOT needed on  Red Hat 6.2 or later.

  The rhs-printfilters rpm distributed with Red Hat 6.1 does not support
  pnm2ppa, 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-1.57-4ppa4.i386.rpm


       rpm -Uvh rhs-printfilters-1.57-4ppa4.i386.rpm




   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 men-
  tioned 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

  o  HP DeskJet 1000 series (PPA) (for 1000Cse, 1000Cxi models)

  o  HP DeskJet 710/720 series (PPA) (for 710C, 712C, 720C, 722C models)

  o  HP DeskJet 820 series (PPA) (for 820Cse, 820Cxi models)

  o  If these entries do not show up, it may be because the older 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:

  o  The Driver Description box contains information about the driver
     (you may have to use the scrollbar at the right of the box to read
     it all).

  o  The resolution box shows a single resolution (600x600).  There are
     no other choices.

  o  The Paper Size box allows various choices (only letter, legal, and
     a4 seem correspond to native paper sizes printed by the Red Hat
     print filters; the other choices, (a3, ledger, ...) appear to get
     resized by the print filters to print on US Letter size paper (?)
     ).  (Other paper sizes cannot be selected this way, but you can
     print to any papersize, if it supported by both ghostscript and the
     printer, using a script, as described above, that bypasses the
     RedHat printfilters.)

  o  The Color Depth/ Uniprint Mode box allows various selections of
     color and print quality (These are achieved by using  various
     combinations of the 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:

  o  Black and White, econofast mode (--bw --eco)

  o  Black and White, normal quality (--bw)

  o  Color, econofast  mode (--eco --fd)

  o  Color, normal quality (--eco)

  o  Color, high quality

  o  Color, normal quality, black ink disabled (-p --eco)

  o  Color, high quality, black ink disabled (-p --uni)

     (These are the choices that will be  presented by "official" 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.)

     You may also see a choice to use the older "Legacy" driver pbm2ppa
     (black and white only); this is is stable but unmaintained; it may
     still be a useful alternative to  pnm2ppa on older, slower systems
     with less available memory.

  o  The three Printing options are not relevant here, and should not be
     selected. They are for direct printing of text (ascii) to non-
     postscript printers, but since the only way of printing text files
     with pnm2ppa is by first converting them to postscript(tm), this is
     not possible on the PPA printer.

  o  It is important that the choice "Fast text printing (non-PS
     printers only)" is NOT selected, so that the print filters will
     convert text files to postscript before printing.

  o  The Margins entries control the margins used when printing text
     files (these are instructions to the text-to-postscript conversion
     process).

  o  The Extra GS options box is not only a place for adding options for
     ghostscript, but also for the PPA drivers.  Leave this box empty
     unless you know what you are doing.  As explained in the text in
     the Driver Description box (you did read it, didn't you ?),  the
     entry should be  in the format:



       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 com-
  mand line (hopefully, these two sources of information will be consis-
  tent with each other!);

  When you have made your choices, click on Ok to save your selections
  and close the "Configure Filter" screen, and then click  on OK to
  close the "Edit Local Printer Entry" screen.

  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:

  o  verbose 1 and silent 1.   These control messages about progress and
     errors from  pnm2ppa.  By default, messages are sent to the system
     log /var/log/messages.  The verbose 1 keyword send copies to
     stderr, the standard error stream to the terminal.   The silent 1
     keyword silences the stream of messages to the system log.

  o   The system log messages  may be  silenced in the default
     configuration file; switch off "silent" mode  with "silent 0" for
     debugging printer problems (or use verbose mode).

  o  The version keyword can be used to specify the printer model as
     710, 712, 720, 722, 820, or 1000.  It is not needed if you use the
     RedHat printool to configure the printer.

  o  xoffset and yoffset: the x-offset and y-offset (in pixels) of the
     printed image on the page, which should be chosen so the image is
     correctly centered on the paper.  (These can also be set with the
     -x  <xoff>  and  -y <yoff>  options.)  See CALIBRATION.html (or
     CALIBRATION.txt) for more information.


  o  topmargin, bottommargin, leftmargin, rightmargin: the four margins,
     which define the distances (in pixels) from the edges of the paper
     to the printed region; parts of the image that are outside these
     margins will not be printed.  (These can also be set with the
      -t <top margin> ,
      -b <bottom margin> ,
      -l <left margin> , and
      -r <right margin> options.)

  o  ColOffsX and ColOffsY: the  x-offset and y-offset (in pixels)
     between  the color image produced by the color ink printer head,
     and that produced by the black ink printer head.  These should be
     recalibrated
      each time an ink cartridge is replaced.  See CALIBRATION.html (or
     CALIBRATION.txt) for more information.

  o  blackshear and colorshear: these are x offsets between right-to-
     left and left-to-right sweeps of the print head, one for the black
     printing and one for the color printing.  These provide sideways
     offsets  (in pixels)  of the right-to-left sweeps, that can be used
     to correct "shearing" when printing in modes that use bidirectional
     print head sweeps.

  o  unimode 1  will make unidirectional print sweeps (left-to-right)
     the default, instead of bidirectional sweeps. The --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.

  o  blackness : this takes values 0,1,2,3 or 4 drops of black ink per
     pixel, and controls black ink density in black-and-white and "text-
     like"  black regions  in color printing.   At present, this has no
     effect on printing  with the black ink cartridge  disabled, or on
     black regions identified as "image-like".   (This can also be set
     with the  -B <n> option, where n is the number of drops.)


  o  GammaR, GammaG, and GammaB: the are the three "gamma" parameters
     that define the standard  color correction curves for red, green,
     and blue.   Changing these will affect how colors appear
     (decreasing any Gamma enhaces the corresponding color).  The Gamma
     values are specified as decimal numbers, with Gamma = 1.0
     corresponding to no color correction.

  o  Gamma values can also be specified using integer numbers
     RedGammaIdx, GreenGammaIdx, BlueGammaIdx; These are determined by a
     procedure  discussed in COLOR.html or COLOR.txt, which involves
     printing a test page.  The papersize keyword specifies the paper
     size used  for this testpage, because it is produced by pnm2ppa
     without the input that usually specifies the page size.

  o  The keywords black_ink 0, color_ink 0, cyan_ink 0, magenta_ink 0,
     and yellow_ink 0 can be used to switch of the various inks; this
     can be useful in troubleshooting and debugging  pnm2ppa.

  Use test_ppa to print various test pages or calibration patterns to
  adjust the offsets.

  If you wish to specify these parameters using the command-line options
  described above, some of them 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 proposals  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

  The first thing to do is to look at the messages from pnm2ppa in the
  system log to see what is happening, whether pnm2ppa actually received
  any input, and if it was valid.
   (You may  need to enable system log messages in /etc/pnm2ppa.conf,
  see above.)  Maybe  ghostscript failed to convert your postscript file
  into PNM format: this is not a pnm2ppa problem!  Here are suggestions
  for dealing with problems that you may encounter.

  o   Printing fails in the middle of a print run, perhaps when a figure
     embedded in the document is printing (in the latest 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.

  o  The test_ppa script works, but you can't get  printtool to make the
     printfilters work.

     You installed  pnm2ppa-1.0 and the  PPA-enhanced rhs-printfilters
     (earlier than v. 1.61) from  the pnm2ppa SourceForge page.   You
     are using  printtool v. 3.43 or earlier and are 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).

  o  You upgraded your RedHat (or compatible) Linux distribution and
     your printfilters no longer work.  You used to use a PPA-enhanced
     rhs-printfilters from the pnm2ppa SourceForge site.   You upgraded
     your 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.

  o  You printed  an image file using a  "high quality" printer setting,
     but it has  visible horizontal  lines on it and printing under
     Windows(tm) 9x doesn't show  this effect (except in "economode").
     These are probably "swath boundaries", showing the junction between
     different sweeps of the print head.  Solution: using unidirectional
     printing (PPA option --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*/TODO)!)

  o  "Flashing light syndrome ".  Your printer usually works, but you
     have found that some particular documents cause the printer to
     fail, and the lights on its panel start flashing rapidly in
     sequence.   Solution, turn the printer off and back on again.
     This is not supposed to happen any more; if it happens
     reproducibly, contact the pnm2ppa developers, and offer to make the
     offending file available for testing and diagnosis of this problem.
     (Don't sent it to the Mailing List unless requested).  Bug reports
     can be filed at the SourceForge pnm2ppa site.

  o  You wish to  print on envelopes or other non-standard media not
     supported by the  print filters?  Solution:  if you can get
     Ghostscript (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.

  o  Colors look wrong, or do not match what the Windows(tm) 9x driver
     produces.  Solution:  check that your color ink cartridge is not
     running out of some ink color; if not, (a) adjust the "gamma"
     entries in /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://pnm2ppa.sourceforge.net/maillist.htm.

  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).






















