COHERENT manpages

This page displays the COHERENT manpage for printer [How to attach and run a printer].

List of available manpages
Index


printer -- Technical Information

How to attach and run a printer

A printer is the device that  transfers text to paper.  The COHERENT system
includes a  system for spooling a  file to one or  more printers.  Spooling
means that the file is copied  into a special area and printed by a daemon.
With a  spooler, more than one  user can send files to  the same printer at
the same time, yet the files will not collide.

COHERENT also  includes commands to prepare text for  printing a variety of
printers.   These include  line  printers (that  is, dot-matrix  printers),
Epson-compatible printers, laser printers that use the PCL page-description
language, and  printers that  use PostScript.   With COHERENT, you  can run
prepare text into a variety of  formats, and print the output on any number
of printers plugged into either parallel or serial ports.

COHERENT has implemented spooling  in two ways.  Versions of COHERENT prior
to release  4.2 control printing through a version  of the Berkeley command
lpr.  COHERENT release  4.2 and subsequent  releases also  control printing
through the  MLP print spooler, which implements a  version of the System-V
command lp  and related tools.   These systems differ greatly;  each set is
discussed in its own section below.

Before we begin to describe printing,  please note that one major source of
confusion for  users is the  fact that the  same names occur  over and over
again.   For example,  please  do not  confuse  the parallel-port's  device
driver lp  with the  print-spooler command lp  or with the  device /dev/lp.
COHERENT inherits  much of this  confusion from the  UNIX operating system;
but we will do our best to make these terms clear to you.  Caveat lector.

Device Drivers

Both the lpr and lp spoolers work through COHERENT's device drivers for the
serial  and  parallel ports.   The  following gives  an  overview of  these
drivers.

The driver  lp manages parallel ports.  The architecture  of the PC permits
your  computer to  have  up to  three parallel  ports.  Devices  /dev/lpt1,
/dev/lpt2, and /dev/lpt3 control,  respectively, parallel ports 1, 2, and 3
in cooked mode.  For more information, see the Lexicon entry for the driver
lp.

COHERENT uses the driver asy to  manage all serial ports, whether COM ports
or multi-port cards.  For details, see its entry in the Lexicon.

Finding the Port

Both spooler systems  require that you be able to  identify a port when you
plug a printer into it.  This  can be more difficult than it seems, largely
because the labels on your system's  port may not be reliable: those labels
reflect what MS-DOS thinks the ports are, and that may not be accurate.

The following describes  how to identify the port into  which you have just
plugged a printer.  Note that these directions assume that you are printing
to a  parallel port; however, you  can adapt them to  serial ports as well,
depending on the configuration of serial devices on your system.

1. Plug the printer  into an unused port.  Load paper  into the printer and
   turn it on.

2. Log in as the superuser root.

3. cd to directory /dev.

4. Send some  output to each  parallel port.  The output  must be something
   that your  printer can print.   If your new  printer is a  line printer,
   type:

       cat /etc/uucpname | pr > lpt1

   If the printer is a laser printer that uses PCL, type:

       cat /etc/uucpname | hp > lpt1

   Or, if the printer is a PostScript printer, type:

       cat /etc/uucpname | prps > lpt1

   If text  appears on your  printer, then you have  discovered the correct
   port.   Jot down  its name  on  a piece  of paper,  e.g., ``lpt1''.   If
   nothing happens, try the command again for lpt2 and lpt3, until you have
   found the correct port and noted its name.

5. Exit from superuser status.

The lpr Printing System

Versions of  COHERENT prior to  release 4.2 use  a version of  the Berkeley
command lpr to control printing.  Although this command can print text onto
printers  plugged into  either serial  or parallel  ports, they  are almost
always  used through  parallel ports; therefore,  the descriptions  in this
section assume that all printers are plugged into parallel ports.

To begin, lpr is actually a family of commands, as follows:

hpd      Daemon that prints files on the laser printer
hpr      Spool a file for printing on the laser printer
hpskip   Abort/restart printing a file on the laser printer
lpd      Daemon that prints files on the line printer
lpr      Spool a file for printing on the line printer
lpskip   Abort/restart printing a file on the line printer

Each  command has  its own  entry  in the  Lexicon, which  describes it  in
detail.

The commands  lpr and  hpr dispatch  text to printers:  lpr to  the printer
plugged into  device /dev/lp,  and hpr to  the printer plugged  into device
/dev/hp. Each of  these devices is actually a link  to the correct parallel
port  --  that  is,  to  devices  /dev/lpt1, /dev/lpt2,  or  /dev/lpt3,  as
described above.  (For information on what a link is, see the Lexicon entry
for the command  ln). The fact that each command  uses a ``generic'' device
for its output makes it easy for you to dispatch files to the right device;
however, it  also means  that you  can have only  one line printer  and one
laser printer plugged into your computer.

When you installed COHERENT, the installation program tried to link /dev/lp
and  /dev/hp for  you  automatically; however,  you  may need  to set  them
yourself (say, because you have purchased a new printer).

To set  these links correctly,  first follow the directions  given above to
identify the port into which you have plugged the printer.  Then, link that
port  to the  device by  which  you will  access the  printer.  If  you are
installing a  line printer that you  will access via the  command lpr, then
you  must use  the  command ln  to  link the  port to  device /dev/lp;  if,
however,  the printer  is a  laser  printer that  you will  access via  the
command hpr, then you must link the port to device /dev/hp. For example, if
you have  plugged a  line printer  into port lpt1,  then use  the following
commands:

    ln -f lpt1 lp
    ln -f rlpt1 rlp

(Please  note that  the last  character  in ``lpt1''  and ``rlpt1''  is the
numeral one -- not a lower-case  el.) If, however, you have plugged a laser
printer into port lpt3, then use the following commands:

    ln -f lpt3 hp
    ln -f rlpt3 rhp

After you  have made the  links, use the  command lpr or  hpr (whichever is
applicable) to  test whether you have  set up the links  correctly.  If you
have not, go through the above procedure again.

The following describes how to use the lpr family of commands to print to a
variety of printers.

Dumb Printers
   To print  on a line  printer, simply use  the command lpr.  This command
   performs  some formatting  on  the file,  and  invokes the  line-printer
   daemon lpd  to spool the file  for printing.  For example,  to print the
   name of your system, use the command:

       cat /etc/uucpname | pr | lpr -B

   The option -B suppresses the printing of a banner page.

   You can also print the output  of the text-formatting command nroff on a
   line  printer,  assuming  that  your  line  printer understands  how  to
   backspace.  For  example, the manual  pages included with  COHERENT were
   formatted with  nroff. To print the  text of this Lexicon  entry on your
   line printer, type:

       man printer | lpr -B

Epson-Compatible Printers
   The command epson massages text into  a form that uses some of the text-
   formatting features  of the Epson MX-80 printer  and clones thereof.  It
   is especially to  be used with text that has  been formatted with nroff:
   it turns  nroff's character-backspace-character sequence  into the Epson
   escape  sequences for  emphasized text  and  italics.  epson  writes its
   formatted output to the standard output, from which you can pipe it to a
   spooler or other program.

   For example,  to print this manual page  on an Epson-compatible printer,
   type:

       man printer | epson | lpr -B

Laser Printers with PCL
   The Hewlett-Packard  LaserJet, and  its clones, use  the Hewlett-Packard
   Control Language (HPCL) to control their behavior.  Note that some laser
   printers, such as the Apple LaserWriter, use PostScript instead of HPCL;
   these printers are described below.

   The command hp prepares files to  be printed on a HPCL printer.  (Please
   do  not confuse  this with  the device  /dev/hp.) You  should use  it to
   prepare  simple text,  such as  program listings,  for printing  on your
   laser printer.

   Like  the command  epson, hp  massages the output  of nroff  into escape
   sequences used by a printer --  in this case, escape sequences used by a
   printer that's running  the Hewlett-Packard Page Control Language (PCL).
   For example, to print this manual page on your PCL printer, type:

       man printer | hp | hpr -B

   The command hpr spools files to be printed on a laser printer.  It works
   like  the command  lpr,  except that  it  includes a  number of  special
   features;  for  example, you  can  use it  to  download LaserJet  ``soft
   fonts'' into your printer.

PostScript Printers
   Some  laser printers  use PostScript  instead of  HPCL to  control their
   behavior.  These printers expect their input to a program written in the
   PostScript language;  if you send them ordinary  text, they simply hang.
   To print  ordinary text  on a PostScript  printer use the  command prps,
   which is  a PostScript version of the COHERENT  command pr. It paginates
   text, draws a box around the page, and prints a simple header at the top
   of each  page.  For example, to  print this manual page  on a PostScript
   printer, use the command:

       man printer | prps | hpr -B

   Note that to  print on a PostScript printer, you  must use the -B option
   to the  command hpr. If you  do not, hpr will attempt  to print a banner
   page in ordinary text on your printer, and your printer will hang.

The lp Printing System

Versions  of COHERENT  beginnning  with release  4.2 also  include the  MLP
spooler, which  is an implementation of the System-V  lp family of printing
commands (hereafter called lp).

lp is  considerably more sophisticated  than the lpr  commands.  It permits
you to have  multiple printers of the same type  (instead of just one laser
printer and  one line  printer, as  under lpr), which  can be  plugged into
serial  or parallel  ports.  It  supports  prioritization of  printing jobs
(that is,  you can give  some users or  some types of  jobs higher priority
than others),  lets each user  set a default  printer for his  jobs, allows
users to  reprint their jobs  easily, and allows  applications to customize
their  output  to take  advantage  of special  printer  features.  It  even
supports local printing -- that is,  it will format and print output onto a
printer that is plugged into a terminal's auxiliary port.

lp's commands resemble those used by  UNIX System V to control printing, so
this  system can  work more  easily  with third-party  applications.  Note,
however, that  the MLP implementation  of lp does differ  in some important
respects  from the  System-V original;  therefore, users  who have  used lp
under UNIX should pay close attention to the following descriptions.

lp consists of the following commands:

cancel    Cancel the printing of a job
chreq     Change priority, lifetime, or printer for a job
lp        Spool one or more files for printing
lpadmin   Administer the print-spooler system
lpsched   Print jobs spooled with command lp; turn on printer daemon
lpshut    Stop the printer daemon
lpstat    Give the status of printer or print request
pclfont   Prepare a PCL font for downloading via MLP
reprint   Reprint a spooled print job
route     Let a user change his default printer

Each of these commands is described in its own Lexicon entry.

lp uses the following directories:

/usr/spool/mlp/backend
                    This directory  holds the programs and  scripts used to
                    manage printers.
/usr/spool/mlp/queue
                    This directory holds all print requests.
/usr/spool/mlp/route
                    This  directory  holds  files  that  name  each  user's
                    default printer.

lp's behavior is set by the contents of the following files:

/usr/spool/mlp/controls
                    This  file holds  lp's configuration  data  base.  This
                    data base links a printer by name to the device through
                    which it  is accessed, and to  the configuration script
                    (if  any)  with  which  its  input  is  massaged.   For
                    information on how  to modify it, see the Lexicon entry
                    for controls.
/usr/spool/mlp/log  This file logs lp's activity.
/usr/spool/mlp/status
                    This file gives the status of each defined printer.

To use  lp, you must first  use the command lpadmin  to build a description
file for each class of printer that you have plugged into your system.  The
description  file   names  the  class   of  printer  (e.g.,   ``epson''  or
``laserjet'')  and  gives the information  lp needs to  manipulate input to
the printer.  For  example, a script may include a  stty command to set the
port into a special mode, and  one or more commands for filtering the input
so it will print properly.  A  backend script can invoke commands like prps
or  epson  to process  text  for printing.   lp  can perform  sophisticated
filtration;  for example,  it  can correctly  handle  PostScript code  that
prints images  or bar codes.   See the Lexicon  entry for lpadmin  for more
details on these scripts.

You must then  use lpadmin to link a given  printer, by name, to the device
through which it is accessed.  You must have first identified the port into
which each printer is plugged,  as described above.  These links are stored
in  file  /usr/spool/mlp/controls. If  you  have  prepared a  configuration
script for this printer's type, then  you must link it to the given printer
as well.  For example, if you  have prepared a configuration script for all
PostScript printers and named it postscript, then you must link that script
to every  PostScript printer whose  input you want  to be massaged  in this
manner.   Unlike  the lpr  printing  system,  lp lets  you  attach to  your
computer more than one printer of each type.

One last  point: each ``printer''  should identify a  given physical device
plus a  given means of accessing  it.  Thus, one physical  printer can have
more than one  name if you plan to access  it in more than one manner.  See
the Lexicon entry for lpadmin for more information on this topic.

Note that if a printer is a ``local printer'' -- that is, a printer plugged
into the auxiliary port of the terminal that the user is using, the termcap
description for  that terminal must  define the variables  PS (print start)
and PN (print end).  Each printer's description file is stored in directory
/usr/spool/mlp/backend.

You can use the command route to assign a default printer to each user.  If
the user  has set a default  printer for himself and if he  does not name a
printer on  the lp command line,  the output goes to  that default printer.
If the user  has not set a default printer  for himself and does not name a
printer on  his lp command  line, the output  goes to the  system's default
printer.   This feature  is  an extension  to  the version  of  lp that  is
implemented by UNIX System V.

To spool a  job for printing, use the command  lp. A job consists either of
one or  more files, or of  text read from the  standard input.  lp prefaces
the  job with  a header  that  describes where  and how  the job  is  to be
printed, then copies  it into directory /usr/spool/mlp/queue. The name that
lp gives the  spooled job reflects its status, that  is, the order in which
it should  be printed relative to  other jobs that user  has spooled.  This
allows each user to give a priority to the jobs that he has spooled.

Each job resides in the spooling directory until the printer daemon lpsched
reads it and  prints it.  lpsched selects jobs for  printing based on their
relative priority, as  shown in their names.  It finds  where the job is to
be printed  by reading its header;  then it opens the  description file for
that printer and  follows its directions for printing the  job.  To turn on
the daemon,  use the  command lpsched  by itself; to  turn it off,  use the
command   lpshut.  If   the   spooler  is   shut  down,   jobs  remain   in
/usr/spool/mlp/queue until  you reawaken the daemon  by issuing the command
lpsched.

To  see what  files are  being printed  where, use  the command  lpstat. To
cancel a printing request, use the command cancel.

A  job remains  ``alive'' in  /usr/spool/mlp/queue  until its  ``life'' has
expired;  the  life  is set  in  its  header.   There  are three  types  of
``lifetime'': temporary, in which a job survives two hours from the time of
spooling; short-term,  in which a job survives 48  hours; and long-term, in
which a  job survives 72 hours.   The default is short-term.   When a job's
life expires,  lpsched removes  it.  A  user can use  the command  chreq to
change a  job's lifetime or  priority; or redirect  it from one  printer to
another.  While  a job  lives in  the spool directory,  a user can  use the
command reprint to reprint it.  He can also use the command route to change
his default printer.

Note  that you  should be  very  careful that  jobs that  include sensitive
information -- e.g., the payroll checks  or your resume -- do not linger in
spool directory,  where other users  can reprint them.   For information on
resetting a job's lifetime, see the Lexicon entries for chreq and MLP_LIFE.
You can change the  default definitions of temporary, short-term, and long-
term  by  editing  controls.  See   its  entry  in  the  Lexicon  for  more
information.  Caveat utilitor!

The following environmental variables affect lp's default behavior:

MLP_COPIES     The number of copies to print.
MLP_FORMLEN    The number of lines on the page to be printed.
MLP_LIFE       The ``lifespan'' of a spooled file.
MLP_PRIORITY   The default priority to give each spooled file.
MLP_SPOOL      Set  a number  of user-specific variable,  such as  title of
               document, type of document, and data base.

These variables can be set either by a user, or embedded in a script.  Each
is detailed in its own Lexicon entry.

See Also

Administering COHERENT,
hpr,
lp,
lp [device driver],
lpr,
lpsched

Notes

When you  link /dev/lp or /dev/hp  to a device, it normally  is linked to a
``cooked'' device, e.g.,  /dev/hp. This works correctly for character-based
output, such as text (or PostScript files); however, if you are downloading
binary data to  the printer, such as graphics or  fonts, be sure to use the
``raw''  device,  e.g.,  /dev/rhp.  Passing  binary information  through  a
``cooked'' device will garble the data and distort the resulting image.

Some COHERENT  4.2 customers have experienced  printing problems, including
no printing, slow printing, or printing  stops after a line or two.  To fix
this, one needs to do the following steps in exact order;

1. Edit file /etc/conf/install_conf/keeplist.

2. Change the last line so that it reads as follows:

       echo '-I SHMMNI:SEMMNI:NMSQID:LPWAIT:LPTIME:LPTEST'

3. Type the following command to build a new COHERENT kernel:

       /etc/conf/bin/idmkcoh -o /testcoh

4. Shutdown and reboot with the new kernel.

5. Log in as the superuser root.

6. Set the  kernel variables that  control discipline of  the printer.  The
   driver  uses  a  hybrid  busy-wait/timeout  discipline,  to  efficiently
   support  in a  multi-tasking  environment a  variety  of printers  whose
   buffers come in a multiplicity of sizes.

   The variable LPWAIT sets the time  for which the processor waits for the
   printer  to accept  the next  character.   If the  printer is  not ready
   within the  LPWAIT period, the processor  then resumes normal processing
   for the number of ticks set by the kernel variable LPTIME. Thus, setting
   LPWAIT to an  extremely large number (e.g., 1,000) and  LPTIME to a very
   small number (e.g., one) results in  a fast printer, but leaves very few
   cpu cycles available for anything else.  Conversely, setting LPWAIT to a
   small  number (e.g.,  50)  and LPTIME  to  a large  number (e.g.,  five)
   results in  efficient multi-tasking but  also results in  a slow printer
   unless the printer  itself contains a buffer (as is  normal with all but
   the least  expensive printers).   By default, LPWAIT  is set to  400 and
   LPTIME to four.  We recommend that you set LPWAIT to no less than 50 and
   no more than 1,000 and LPTIME to no less than one.

   The variable LPTEST determines wether the device driver checks to see if
   the printer  is in an  ``on-line'' condition before it  uses the device.
   If your  printer does not  support this signal,  you must set  LPTEST to
   zero.

   To  reset   the  values  of  LPWAIT,  LPTIME,   and  LPTEST,  edit  file
   /etc/conf/mtune  and set  the parameters  LPWAIT_SPEC,  LPTIME_SPEC, and
   LPTEST_SPEC  to  the  values  that  you  want.   Then  use  the  command
   /etc/conf/bin/idmkcoh  to  build  a new  kernel.   For  details on  this
   command, see its entry in the Lexicon.  One word of caution to the wary:
   be sure to name your new kernel something innocuous, such as cohtest, to
   ensure that you do not clobber your current working kernel.

7. Reboot the new kernel and try printing again.

8. If your  printer still exhibits  problems, try increasing  or decreasing
   the values  of LPTIME and  LPWAIT. Remember, each  time you build  a new
   kernel kernel,  you must reboot in  order for the new  variables to take
   effect.

The MLP  printer spooler  is distributed  under license from  Magnetic Data
Operations, 9400B Two Notch Road, Columbia, SC 29223.

The message

    cannot open device /dev/lp

from lpr means either that the printer is not turned on, or that the device
/dev/lp  is  not  linked to  the  correct  parallel-port  device.  Use  the
directions  given above  to find  and  link the  correct device.   The same
applies when you receive this message from hpr.