[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference kernel::unix_printing

Title:Printing from UNIX
Moderator:KERNEL::COFFEYJ
Created:Thu Dec 17 1992
Last Modified:Thu Jun 05 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:956
Total number of notes:2876

910.0. "Draft of Multivendor Printing System Reference" by BOOKIE::PANGAKIS (Tara DTN 381-2433) Thu Feb 13 1997 18:49

    Here's a draft of the content to be included in a .HLP
    file I mentioned in Note #895.
    
    (I am developing an online reference guide for Field Systems Engineers
    about multivendor print systems.  THe goal is to lower the incidence of
    routine printer support calls being escalated above the frontline by
    providing information to help support personnel understand, diagnose,
    and solve printing problems on multiple operating systems.)
    
    I'd appreciate any comments on accuracy and appropriateness.
    
    My goal was to present frequently asked questions and provides links to
    basic information from that.  

Frequently Encountered Problems
===============================

BSD UNIX Frequently Encountered Problems

Want to see what others are encountering?  Check out the following
Notes file: KERNEL::UNIX_PRINTING

These are common questions/problems you may encounter in the field.

Printer Status Message is "Waiting for lock on /dev/tty##"

    The DIGITAL UNIX print system is unable to get the lock for the
    terminal  line in use.

    The lock file resides in the /usr/spool/lpd# directory, (# is the
    number associated with the printer, check the /etc/printcap file 
    [link to printcap topic] to find out what the number is for your 
    printer). 

    The easiest way to solve the problem is to reboot the
    system.  This has the effect of re-initializing the print system.
    If this can't be done, disable all printers, kill off all the 
    lpd daemons, enable/start all printers, and re-start the lpd daemon.
    [link to daemon]

Printer Status Message is "Sleeping for 15 seconds before retrying"

    This problem will occur if there is no "if" or "of" filter listed
    in the /etc/printcap file.

    If no filtering is desired, add at least an 'if' entry:

       :if=/usr/lib/lpdfilters/xf:\

Error In Error Log is that lpd Can't Find Filter

    After printing, these errors appear in the file /usr/adm/lp2err:

     /usr/lib/lpd: lp2: /usr/lib/lpdfilters/ln03rof: not found
     /usr/lib/lpd: lp2: Output filter [link to filter popup] to dev malfunctioned (2)
     /usr/lib/lpd: lp2: <date> Job 63 aborted

    The lpd daemon can't find the /usr/lib/lpdfilters/<filter> file. The
    printer does not work although the files and associated
    permissions are correct on the /usr/lib/lpdfilters/<filter> file.

    The permissions on the '/' directory had been set to a mode of
    666.  This can occur if the lprsetup program had been run to 
    delete a remote printer when your current working directory was /.

    Change the permissions on '/' to 755 and the printer will work.

Printer defined correctly in the /etc/printcap file does not work correctly

    Check the /etc/printcap file and verify that no extra <TAB> or <SPACE> 
    character follow the \ (continuation character) at the end of any line.

    Also, ensure that comments (line beginning with #) are only
    in the first line(s) of the /etc/printcap file.

Can't Print to Remote Printer on a Windows NT Server

    On the Windows NT system, make sure that TCP/IP Print Services are
    installed.

    On the Digital UNIX system, make sure there is an entry for the
    Windows NT system in the /etc/hosts file.  Make sure you can use
    the ping command to see if the Windows NT system responds.

    If all of the above steps have been completed successfully, but 
    you get an error from the lpc status command [link to lpc topic] 
    create an error log for your printcap using lprsetup.

    Then, go to /usr/adm and examine the lperr file to determine
    where the error originates.

Configure a NIC in a DECLaser Printer for TCP/IP or LAT Protocol Connections?

    Install the Network Interface Card.

    Install the Network Interface Card software.

    Configure the Network Interface Card's Internet Protocol address.
	
    Choose the type of installation:
	
	 A NIC-resident installation, lpdinst, requires you to
	 configure the printer one time.

	 A host-resident installation, nicinst, requires you to repeat
	 the configuration procedure on every host from which you want
	 to print.

    Make the /etc/printcap file entry.
	
	 The lpdinst command creates the /usr/nic directory and copies
	 some files.  Then run the lprsetup [link to lprsetup] program to 
	 make the /etc/printcap file entry. 

	 The nicinst command also creates the /usr/nic directory
	 then runs a script that prompts you for information.  Your
	 responses make the /etc/printcap file entry.

     Run Nsconfig
	
	 Edit the /usr/nic/nicprint.conf file to include any
	 additional parameters that you want the NIC NVRAM configured
	 with, such as the default gateway Internet Protocol address, 
	 and the subnet mask.

Configure an Hewlett-Packard Network Printer

    Put the hpnpf print filter in /usr/lbin.  It should have the
    following attributes:

    -rwxr-xr-x   1 bin      bin        72147 Jul 27 15:32 /usr/lbin/hpnpf

    Create an executable shell script called /usr/lbin/hpnpf.of that
    contains the following:

	 #!/bin/csh -f
	 /usr/lbin/hpnpf -x hplaser -N
	 #
	 # -x printername - Send the file to printername (ip name or dotted address)
	 # -N            - Translate new-line to carriage return/linefeed.
     
	 The script should have the following attributes:
     
	 -rwxr-xr-x   1 bin      bin          188 Jul 27 16:02 /usr/lbin/hpnpf.of

    Create the following files using the 'touch' command:

	 -rw-r--r--   1 daemon   daemon         0 Jul 27 15:25 /var/adm/lphpacct
	 -rw-r--r--   1 daemon   daemon         0 Jul 27 15:26 /var/adm/lphperr
	 -rw-rw-rw-   1 daemon   daemon         0 Jul 27 15:27 /var/spool/lphp/null

	 Be sure to set permissions, ownership, and group as shown.

    Add the following entry to the /etc/printcap file:

	 hplaser:\
		 :af=/var/adm/lphpacct:\
		 :if=/usr/lbin/hpnpf.of:\
		 :lf=/var/adm/lphperr:\
		 :lp=/var/spool/lphp/null:\
		 :mx#0:\
		 :pl#66:\
		 :pw#80:\
		 :sd=/usr/var/spool/lphp:

    You should now be able to print using the lpr command:

	 # lpr -Phplaser /file

Configure a LAT printer

    Run the latsetup program if this is an initial LAT setup or 
    you want to add LAT lines.  

    If you want to use an existing lat tty line, you need to comment
    it out of the /etc/inittab line.  Then run "init q" to get it to
    re-read the inittab file.

	 # file /dev/tty0w
	 /dev/tty0w:     character special (5/30) LAT #0  terminal #30

    Map the LAT tty line with the latcp command:

	 # latcp -A -p tty0w -H TERMINALSERVERNAME -R PORTNAME

    Run the lprsetup [link to lprsetup topic] program and specify the 
    connection type of "LAT", for example, ct=LAT.

    Now, try printing: 

	 # lpr -Pprintqueuename somefilename 

    Add the LAT startup/configuration lines to the LAT startup script.
    
Use the Serial or Parallel port

    Verify if you are using the serial or the parallel port on the
    machine:
    
    For a text printer try:

	cat /etc/motd > /dev/lp0

    For a PostScript printer try:

	cat /etc/motd | /usr/lbin/ln03rof > /dev/lp0

    If you can cat a file to the printer, then you need to debug the
    /etc/printcap file.  If not, then you check your connections.

    For the serial port, enter the file /dev/tty00 or tty01 command and 
    look for the one that says terminal #.... on the far right.  This is 
    the one that should be used when running lprsetup program [link to
    lprsetup topic].

Add Escape Sequences Using Printcap Filters

    If your original /etc/printcap file entry is:

	 lp|lp0|0:\
		:lf=/usr/adm/lperr:\
		:lp=:\
		:rm=remsys:\
		:rp=text:\
		:sd=/usr/spool/lpd:

    Add the escape sequences you wish to add in a file.  

    You can verify the escape sequence is in the file with the od
    command.

    Create a second /etc/printcap file entry by using the lprsetup program
    [link to lprsetup] and select printer type unknown.  Then modify it:

	     lp1|1|addesc:\
		 :lf=/usr/adm/lp1err:\
		 :lp=/dev/null:\
		 :mx#0:\
		 :of=/usr/lbin/addesc:\
		 :sd=/usr/spool/lpd1:\
		 :xf=/usr/lbin/xf:

    Create the /usr/lbin/addesc file filter [link to filter]:

	 #! /bin/csh
	 /bin/cat [/escape] - | lpr -Plp0

    Make the file filter you just created executable with the chmod
    command.

	 # chmod 755 /usr/lbin/addesc

Connect HP4si Printer Network Printer

    The lpd in the built-in LAN-interface supports two queues, one for
    PostScript data "raw" and the other for ASCII data text.

    If you use the PostScript queue to print ASCII data from an UNIX
    system, you'll miss <CR> and only the first line prints.  To print
    text, use the queue named text by modifying the :rp= line in the
    /etc/printcap file.

BSD UNIX

A UNIX Little Background

The UNIX operating system was originally developed by AT&T (now UNIX 
Software Labs) in the early 1970s.  Because UNIX was able to run on 
many different vendor's hardware platforms, this encouraged developers to 
modify UNIX and distribute it as their own:

. USL's System V

. Berkeley Standard Distribution (BSD) from the University of California, 
  Berkeley 

. Xenix (based on BSD) and sold by the Santa Cruz Organization (SCO) 
  a Microsoft affiliate

More recently, UNIX developers tried to combine the different versions
back into a more standard one, but there are still variants:

. System V Release 4 (SVR4), which was developed by AT&T and 
  Sun Microsystems, merged features from BSD and SVR3.

  This adds about two dozen BSD commands to the basic UNIX command set.  
  Sun changed the name of its software from SunOS to Solaris.  (Solaris 1.0
  works like BSD and Solaris 2.0 works like SVR4.)

. The Open Software Foundation was formed to create OSF/1, 
  based mostly on BSD.  

  Digital's OSF/1 product is now called DIGITAL UNIX.  IBM's AIX 
  is also related to OSF/1.

. Linux, a free version of UNIX, was developed by Linus Torvalds 
  in Finland in 1992, and now widely available on the Internet.

  Linux is popular because it works well, even on a small PC (such as a 
  386 PC with 4 megabytes of memory and a 40 megabyte disk.)

Some UNIX Things You Should Know

Just in case you need a UNIX refresher while troubleshooting 
printer problems, these are some things you should review.

What kind of system are you working on?

All major vendors now use the BSD spooling system, the AT&T spooling system,
or a combination of both.

[POPUP Table]
===========================================================================
Operating Systems Printing Software
System    Printing System

Solaris   System V with some extensions
HP-UX     System V with some extensions
SunOS     BSD
OSF/1     BSD plus a System V front end
===========================================================================

If you are trying to determine what kind of system you're using,
check to see which scheduler is present (lpd or lpsched) rather
than looking at the printing commands.  (HP-UX, for example, provides
an lpr command but uses the System V printing system.)

What shell are you working with?

Next, you should determine which shell you have.  A shell is a program 
that waits for you to enter a command and then executes it.  The popular 
shells fall into two groups:

� Bourne (displays a $ prompt)

� C (displays a % prompt)

. Linux systems usually come with the BASH (Bourne Again Shell) shell, a 
  Bourne-style shell.  

What commands do you need to use?

Most UNIX systems have online manual (man) pages covering the commands.

Commands work mostly on files [link to Files popup].  In many cases,  
you will have to use commands from both System V and BSD [link to
Comparison table].

POPUP Files
============================================================================
There are four types of files:

Ordinary
Can be text files, data files, command files, and executable files.

Directories     
References (or holds) other files.  Each directory is a subdirectory of 
root directory.

Special device files    
Files that control the physical aspects of the machine.

Links   
Allow the same file to accessed under different names in different 
locations.
=============================================================================

[POPUP Table]
============================================================================
Comparison of System V and BSD Print Systems

System V     BSD                    Function
lp           lpr                    Submits jobs for printing
lpsched      lpd                    Printing daemon
lpshut       -                      Stops printing daemon
lpstat       lpq                    Checks queue status
cancel       lprm                   Removes jobs from queue
lpmove       -                      Moves jobs among queues
lpadmin      /etc/printcap          Configures the printing systems
accept       lpc enable             Enables queueing
reject       lpc disable            Disables queueing
enable       lpc start              Starts printing
disable      lpc stop               Stops printing
-            lpc topq               Re-orders jobs in the queue
=============================================================================

Printing Process Overview

The print facilities provided by BSD are limited (as opposed to System
V), but they extend well to large networks.

All access to printers is controlled by the lpd daemon [link to daemon 
popup] and the lpr [link to the lpr topic] program.  

When the lpr program is executed, it gathers the data to be printed
and information how to print it.  There are three ways to specify
how the information is printed:

. Command line arguments to lpr
. Environment variables of the process which executes lpr
. System environment

If a -Pprinter argument is passed to lpr, printer becomes the
destination.  If not, the environment is checked to see if
a variable named PRINTER is defined.  Or, the job is printed
on the default printer for that system.

As soon as lpr knows what printer to use, it looks the printer up
in the systems printer information database the /etc/printcap [link
to printcap topic] file.  This file tells lpr where print jobs should
be placed, usually /var/spool/[printername] and is called the spool
directory.

lpr creates in the spool directory for the job:

. cf[jobnumber] file that contains reference and handling information
  for the job

. df[jobnumber] file contains the data to be printed

When lpd receives notification that there's something to print, it 
checks /etc/printcap [link to printcap topic] to determine whether the
print job is local or remote.  If it's local, lpd makes sure the
printer daemon is operating on the appropriate queue and creates one
(a copy of itself) if there isn't.  If it's remote, lpd opens a
connection to the remote machine and transfers both the control and
data files and deletes the local copies.

When the job is ready to print, lpd creates a series of pipes between
the spool file to the printing hardware.  In between, lpd places a 
filter [link to filter popup] process that can review and edit the 
contents of the data stream before it reaches the printer.  

[POPUP]
===========================================================================
Daemon
 
A daemon is a background process that performs a single task.  

You can check to see if the lpd daemon is running on DIGITAL UNIX
by entering:

ps -a | grep lpd

Or, you can check by looking for the file /dev/printer which is
created when lpd starts.
===========================================================================

[POPUP]
===========================================================================
Filter

Filter processes can perform various formatting tasks. 
===========================================================================

printcap

Every printer accessible from a particular machine must be described
in /etc/printcap:  [Code hotspotted graphic]

The format of the printcap file is a simplified version of the /etc/termcap
[link to termcap topic] database format.

Click on the code for a description.

#
# Apple LaserWriter
# 

anchor-lw|ses|ses printer:\
    :lp=:sd=/var/spool/anchor-lw:rm=anchor:rp=anchor-lw:\
    :lf=/var/adm/lpd=errs:


. The first item in each entry is a list of the names for the printer,
  separated by: |

. Configuration settings are separated by colons, each in the form
  of "xx=string", "xx", or "xx#number," where xx is the two-character
  parameter name and string and numbers are assigned to it.  When no
  value is assigned, the variable is Boolean and indicates TRUE.  The
  null string is acceptable.

. Entries may be continued from line to line by ending intermediate
  lines with a: \  

. "anchor-lw", "ses", and "ses printer" are all names for the same
  printer.  Included, typically, are three forms of the name:

  . Short name (no more that 4 characters, easy to type like "ses")

  . Full name (specifies type of printer and owner like "anchor-lw")

  . Descriptive name (other information, like "ses printer")

. The error log file may be shared by all printers.  When a log entry is
  made, the name of the problem printer will be included.



All jobs submitted to print without a specific destination are routed
to the printer lp so one of your printers needs to have lp
as name.

Most printcap variables fall into one of five categories:

File and directory specifications
---------------------------------

Each printer should have its own spool directory.  A spool directory
is needed even if the printer being described is on another machine. 
All spool directories should be in the same parent directory (usually
/var/spool) and should have the same name as the full name of the
printer.  When you install a new printer, you must create the spool
directory, with permission as 775 and both owner and group-owner set
to pseudo-user "daemon."

The spool directory contains two status files:

. Lock

The lock file is used to stop multiple invocations of lpd on a single
queue and hold information about the active job.  The permission bits
on the lock file are manipulated by lpc to enable or disable spooling
and printing on the printer.

. Status

The status file has a one-line description of the printer state which
is maintained by lpd daemon [link to daemon topic] and used by the lpq
command [link to lpq topic].

If you want to keep track of how much is being printed, enable
accounting by specifying an accounting information file with
the "af" variable.

Remote access information
=========================

Usually, you want to access a printer from more than one machine 
in your network.  A single machine should be designated as responsible
for communicating with the printer.  This allows lpd to queue jobs
in order and it gives you a single place to look for errors.

Remote machines (machines that are not directly connected to
the printer) have a simple /etc/printcap file entry that tells where
to send the job.

The "rm" variable specifies the machine where jobs should be sent and
the "rp" variable gives the name of the printer.

Printing filters
================

The main purpose of a print filter [link to filter popup]
is to provide the ability to print raw UNIX text files.  The 
secondary function of a print filter is to provide some printer 
feature selection, usually paper tray selection, and landscape printing.

Character-only printers don't need to be concerned with filters.  Laser
printers usually come with the printer's software.

The default filter /usr/lib/lpf just:

. Copies input to output

. Fixes up nonprinting sequences

. Writes up an accounting record, if needed

[POPUP Filter]
==========================================================================
Filters are usually shell scripts that call a series of translation
programs.  A filter accesps the print job on standard input, translates
it to a format appropriate for the printer, and send the result to the
standard output.

If the user does not specify a filter when executing lpr,
either the input filter (if) or output filter (of) is used.

If an if entry occurs in the /etc/printcap file, without an of entry,
it will send one job to the printer and exit.

If an of entry occurs, without an if entry, lpd will call the filter
program once and send all the jobs in the queue.

EXAMPLE

#!/bin/csh -f
/usr/local/bin/textps S* | /usr/local/bin/psreverse

In this example, the first program, textps, looks at the input
and decides if it is PostScript and if not, converts it.  It gets
all the filter arguments from S* and generates accounting records
from them.  The second program, psreverse, reverses the order of the pages
so that they come out in a correct stack.
==========================================================================

Communication settings
======================

Printers are usually connected to serial ports.  Communications are
set on the printer's host machine.

Three settings are controlled through the /etc/printcap file:

. Baud rate

The baud rate is controlled by the "br" variable; "br#9600" sets the
baud rate to 9600 baud.

. Flag bits

The flag bits set parity, flow control, duplex, buffering, and
mechanical delays for the communication link.  Setting these
parameters correctly includes looking up the meaning of each bit in
the tty man page and adding up (in octal) the values for all the bits
you want to set or clear.

The "fc" variable specifies those bits that should be turned off
and the "fs" variable specifies those bits that should be turned on.

If you're using a built-in serial port on a Sun machine, use the eeprom
command to set the hardware flow correctly.

[POPUP Table]

===========================================================================
Flag bits for a serial printer

Name   Octal value   Description
FF1    0040000       Form feed delay (2 seconds)
CR1    0010000       Carriage return delay (0.08 second)
CR2    0020000       Carriage return delay (0.16 second)
TAB1   0002000       Tab delay (dependent on amount of motion)
NL1    0000400       Newline delay (dependent on current column)
NL2    0001000       Newline delay (0.1 second)
EVENP  0000200       Even parity allowed on input and generated on output
ODDP   0000100       Odd parity allowed on input and generated on output
RAW    0000040       Pass all characters from printer to filter immediately
CRMOD  0000020       Output linefeed as "carriage-return linefeed"
ECHO   0000010       Echo (full duplex)
CBREAK 0000002       Pass characters from printer to filter immediately
TANDEM 0000001       Automatic flow control
===========================================================================


. Local mode bits

The local mode bits configure the serial driver.

The "xc" variable specifies those bits that should be turned off
and the "xs" variable specifies those bits that should be turned on.

[POPUP Table]
===========================================================================
Local mode bits for a serial printer

Name      Octal value   Description
LLITOUT   000040        Suppress output translations
LDECCTQ   040000        Only CTRL/Q restarts output after CTRL/S
LCRTBS    000001        Backspace on erase rather than echoing erase
===========================================================================

Page information
================

Some filters need to know the size of the output page so they can do
cropping and line folding correctly.

For character printers, the "pl" and "pw" variables specify the page
length in lines and the page width in characters.  For high-resolution
printers, the "py" and "px" specify the page length in lines and the
page width in pixels.

Miscellaneous Printcap Variables
================================

Other printcap variables specify additional features.

[POPUP table]
===========================================================================
Miscellaneous /etc/printcap variables

Name   Type   Meaning                                     Default
ff     string String that causes printer for form feed    CTRL/L
fo     bool   Output form feed when device is opened?     No
mc     num    Maximum number of copies allowed for job    0 (unlimited)
mx     num    Maximum file size of job (in blocks)        0 (unlimited)
sc     bool   Suppress multiple copies?                   No
sf     bool   Suppress form feeds?                        No
sh     bool   Suppress printing of burst page header?     No
===========================================================================

See also:

If you have access to the Internet, check out: 

Sample printcap entries: http://ftp.digital.com/pub/DEC/dec-faq/ultrix-printcap
Accessing printer software: http://www.printers.digital.com/sofwar/prt_sofwar.html

Use your system's man pages to find out more about printcap variables.
and each terminal mode bit.

Extensions

Extra variables can be included in the /etc/printcap file for print
filters to use.  This can be useful if a printer needs more information
than the base system provides.


/etc/termcap

source: Termcap and Terminfo
	John Strang, Tim O'Reilly and Linda Mui

Terminals differ depending on the manufacturer.  Applications with
screen-handling features like text editors need to know about the
differences.

The termcap terminal databases are UNIX's solution to the difficulty
of supporting a wide variety of terminals without writing special
drivers for each one.  The first version of termcap was written by
Bill Joy in the late 1970's while he wrote the vi text editor.  He
developed a set of generic commands, called termcap (short for
terminal capabilities) to manipulate the screen instead of hard-coding
the control codes in two parts:

. Database describing the terminal features

. Subroutine library that allows programs to query the database and make use
  of the capability

If a program is designed to termcap, it:

. Queries an environment variable named TERM to figure the terminal type.

. Looks up the definition in the terminal database.

. Reads the definition of any capabilities it plans to use into
  external variables.

The terminfo database is the UNIX System V equivalent to termcap. 
Terminfo is a compiled database while termcap is an ASCII text file.
Terminfo improves efficiency, but is not as easy to examine or
experiment with.

Some terminals (such as Hewlett-Packard terminals) have attached printers
and many have printer ports.  These printers are local to the terminal and
have no relation to the UNIX system printer.

[POPUP Table]
===========================================================================
Terminals with Local Printers

Terminfo   Termcap       Description 
mc0=       ps=           Print screen contens on auxiliary printer
mc5=       po=           Turn the printer on
mc4=       pf=           Turn the printer off
mc5p=      pO=           Turn the printer on for #1 bytes (#1 < 255)
mc5i       5i            Printer won't echo on the screen (not in BSD 4.3)
===========================================================================

Where to Look For Errors

If you have problems debugging a remote printer connection, check:

. System log file on the machine hosting the printer for permission
  problem messages
  
. System log file on the sending machine for name resolution and permission
  problems

. The print daemon log file on the printing machine

. The print daemon log file on the sending machine

. The printer log file on the printing machine

. The printer log file on the sending machine

When setting up remote printers, remember that on the requesting 
machine there must be:

. A queue for the job to go to on the requesting machine
. A way to decide where to send the job
. Method of sending the job to the remote machine

On the printing machine, there must be:

. A place to queue the job
. Permission to allow the job to be printed
. A way to output to the printer

Network interfaces

UNIX supports a variety of physical networks, including Ethernet, token
ring, and modem-based systems.  Each of the machine's connections to a
network is referred to as a network interface.  

Digital
=======

RapidPrint 200 Network Interface for Printers

. Supports printing from a variety of hosts.

. Costs less than relying on a high-performance network printer.

. Provides network connectivity for existing hosts, applications, and printers. 

RapidPrint 500 Micro Server

. Allows users to share the same printer across the network from a 
  variety of hosts and over different network protocols.

. Shares widely dispersed resources in the enterprise. 

. Service printing requests from Ethernet-connected hosts running 
  IPX, TCP/IP, AppleTalk/EtherTalk, NetBIOS/NetBEUI and LAT. 
  
. Provides network connectivity for your existing hosts, applications and
  printers, linking legacy systems with modern client/server
  environments. 

LATprint ThinWire Ethernet Direct Connection Interface

. Provides cost-effective direct network connection for printers 
  having serial ports, and allows these printers to be shared by 
  any system or server in the local area network (LAN).

. Through server-based print services, LATprint-connected printers are
  available to every desktop in your network, regardless of system type.

If you have access to the Internet, check out: 

Digital print servers and network interfaces:
http://www.printers.digital.com/products/prt_products.html

Emulex
======

Emulex Network Systems is a designer and manufacturer of both software
and hardware based network access products, supplying high-performance
communications solutions for managing the flow of time-critical data
between machines and peripheral equipment. 

The Emulex printer server family features five models:
NETJet, NETQue, NETQue Mate and NETQue Pro2 for the Ethernet environment,
and NETQue Token Ring for Token Ring LANs.  Their complete network
printing family offers internal and external, one, two, and three port
printer servers. 

If you have access to the Internet, check out: 

Emulex home page: http://www.emulex.com

Hewlett Packard
===============

HP is the world's leading supplier of hardcopy products that set the
standard for technology, performance and reliability. HP's
market-leading products include LaserJet and DeskJet printers,
DesignJet large-format printers and plotters, ScanJet scanners,
OfficeJet printer-fax-copiers, CopyJet color printer-copiers and HP
Fax facsimile machines.

For example, the HP JetDirect EX Plus print server employs a new two-way
communication technology to let users monitor the status of the
DeskJet 870C printer from their PCs instead of having to go to the
printer. In this way, users know if the printer is out of paper or
ink, if the memory is full or if ink pens need realignment, among
other useful information. HP's graphical Tool Box software, which
comes with the printer, makes installation and daily printer operation
easy.

The DeskJet 870C series, introduced in August 1996, is a family of
color inkjet printers that offer the fastest printing in their class
(8 ppm black, 4 ppm color); excellent black- and color-print quality;
and the largest professional font collection available in a personal
color printer. Included are the DeskJet 870Cse and 870Cxi printers.

If you have access to the Internet, check out: 

Hewlett-Packard page: http://www.hp.com/rnd/home.htm

Printxchange
 
Printxchange is a distributed printing system for UNIX which is based
on the Palladium architecture originally conceived at MIT Project
Athena.  Palladium was based on the ISO 10175 Document Printing
Application (DPA) standard which Digital was key in developing with
Xerox.

Printxchange is a client-server, distributed print system based on ISO
10175, POSIX 1387.4 and X/Open Print System Interoperability
Specification (PSIS). The goal is to manage jobs and printers from
anywhere on the network regardless of the make and brand of the
printers.

If you have access to the Internet, check out: 

http://www.xerox.com/xps/products/px/


Eclipse

     ***  Need more info on this product ***




Queue Setup and Management Examples

In setting up a printing configuration, consider the following:

Put only one printer on each machine
====================================

When a printer runs into problems and needs to be manipulated, you'll
only have to deal with one set of processes.

All printing facilities shouldn't be tied to one machine; if that machine
breaks down, then all printing does too.

Distributing the printing load across several machines minimizes the
printing impact on each machine's performance.

Use file size limits appropriately
==================================

The "mx" printcap variable lets you set a limit on the amount of data that
can be spooled at once.  By setting a limit on line printers, you can
prevent naive users from printing binary files by mistake.  An
mx#0 entry is necessary to enable large jobs.

Use printer accounting
======================

Enable printer accounting even if you don't plan to charge for printer
use and you'll be able to see who is using the printer.

Use banner pages only when necessary
====================================

The printing system prefaces each job with a page showing information
associated with each job.

It's a waste of paper if you don't need it on a small system, so
disable it by setting the Boolean printcap variable "sh" to true.
Provide recycling bins for used paper too!

Provide Previewers
==================

To prevent printing of documents that contain small errors in formatting
(necessitating re-printing), provide previewers like ghostscript [link
to popup] that allows users to see how the printed output will look on their
screen before they print it.

Configuring a Printer 

To add a printer to your system:

Create a device special file by using MAKEDEV

 For printers attached by parallel interfaces, use the following format:
 MAKEDEV lp #

 For printers attached by serial interfaces, use the following format:
 MAKEDEV tty #

If the printer is connected to the system by a serial line, edit the 
/etc/inittab file and set the action field to off
to prevent logins on the printer line. 

Add the printer entry to the /etc/printcap file. 

This includes the following information: 
Name(s) of the printer or print queue
Type of printer
Device special file for the printer's connection to the system
Spooling directory

A printer can have more than one entry in the /etc/printcap file 
to define multiple queues, each with different characteristics.  That's 
why the entries in printcap are sometimes referred to as printer queues 
rather than printers.

Create a spooling directory. For example:
# cd /var/spool
# mkdir lpd1
# chmod 775 lpd1
# chown daemon lpd1
# chgrp daemon lpd1

The spooling directory or spooling queue is where files are stored as
they wait to be printed. Each printer must have a unique spooling
directory.

Start the printing daemon lpd.  (This may be set up automatically by
the installation.)

DIGITAL UNIX systems provide the lprsetup program to add and remove printers and
modify printer characteristics.  For example, you may want to print
from a DIGITAL UNIX system to a remote printer on a Windows NT Server.

[POPUP Example in Secondary window]
===============================================================================
Digital UNIX Printer Setup Program
Command  < add modify delete exit view quit help >: add
Adding printer entry, type '?' for help.
Enter printer name to add [0] : 
For more information on the specific printer types
Enter `printer?'
Enter the FULL name of one of the following printer types:
cp382d    dl1152w   dl510ka   dl5100w   ep1050+   fx80      fx1050    hpIIP
hpIIIP    hpIIID    hpIV      hp4M      ibmpro    la50      la70      la75
la84      la86      la88      la88c     la90      la280     la324     la380
la380cb   la380k    la424     lf01r     lg02      lg06      lg12      lg31
lj250     ln03      ln03ja    ln03r     ln03s     ln05      ln05ja    ln05r
ln06      ln06r     ln07      ln07r     ln08      ln08r     ln09      ln10ja
ln14      ln82r     nec290    xf        remote    unknown

or press RETURN for [unknown] : remote
Enter printer synonym: wntprinter
Enter printer synonym: 
Set spooler directory 'sd' [/usr/spool/lpd] ?  
Set printer error log file 'lf' [/usr/adm/lperr] ?  
Set remote system name 'rm' [] ?  wntsys
Set remote system printer name 'rp' [] ?  sys_print
Enter the name of the printcap symbol you wish to modify.  Other        
valid entries are:                                                      
	'q'     to quit (no more changes)                               
	'p'     to print the symbols you have specified so far          
	'l'     to list all of the possible symbols and defaults        
The names of the printcap symbols are:                                  

 af  br  cf  ct  df  dn  du  fc  ff  fo  fs  gf  ic  if  lf  lo 
 lp  mc  mx  nc  nf  of  op  os  pl  pp  ps  pw  px  py  rf  rm 
 rp  rs  rw  sb  sc  sd  sf  sh  st  tf  tr  ts  uv  vf  xc  xf 
 xs  ya  yd  yj  yp  ys  yt  Da  Dl  It  Lf  Lu  Ml  Nu  Or  Ot 
 Ps  Sd  Si  Ss  Ul  Xf 

Enter symbol name: q

	Printer #0 
	----------
Symbol  type  value
------  ----  -----
  lf    STR    /usr/adm/lperr
  lp    STR    
  rm    STR    wntsys
  rp    STR    sys_print
  sd    STR    /usr/spool/lpd

Are these the final values for printer 0 ? [y] y
Adding comments to printcap file for new printer, type '?' for help.
Do you want to add comments to the printcap file [n] ? : n
Set up activity is complete for this printer.
Verify that the printer works properly by using
the lpr(1) command to send files to the printer.

Command  < add modify delete exit view quit help >:exit 
==============================================================================


Configuring a Printer with CDE Printer Configuration

DIGITAL UNIX Version 4.0 systems with graphics capability will load
and configure the Common Desktop Environment (CDE) automatically at
boot time.  This application is used primarily to configure printers,
but not to control them on a daily basis (lpc is used for that
purpose).

With CDE, you can:

Add a printer
Modify a printer
Select a printer for the system default printer
Deconfigure a printer

If you have access to the Internet, check out: 

http://speede.mko.dec.com/unix_40_docs/SysAdmin/sysadmin_2.html

Spooling to an lpd System from an lpd System

Add a /etc/printcap file entry on the remote machine (client).

     rpr1|lp|8-6|Printer called pr1 on server:\
         :lp=:rm=server:rp=pr1:sd=/var/sppol/rpr1:mx#0:

Create the spool directory on the remote machine (client):

     # mkdir /var/spool/rpr1
     # chown daemon /var/spool/rpr1
     # chgrp daemon /var/spool/rpr1
     # chmod 755 /var/spool/rpr1

On the local machine (server), make sure that the client is listed in
the /etc/hosts.equiv or /etc/hosts.lpd (gives access only for
printing) files.

Verify that you can print:

     # lpr -Ppr1 /etc/printcap
     # lpq -Ppr1

Enable printing on the client:

     # lpc enable rpr1
     # lpc start rpr1
     # lpr -Prpr1  /etc/printcap
     # lpq -Prpr1

Managing a DIGITAL UNIX Print System

The print system on Digital UNIX is a combination of the UNIX System
V print system and the BSD UNIX print system. 

Testing the Print System
========================

The lptest command generates a ripple test pattern of 
printable ASCII characters to standard output. It can be used 
by anyone to test terminals and printers.

The format for the lptest command is:
lptest [length [count]]

. length specifies the length of the output line; default is 
79 characters.

. count specifies the number of output lines; default is 
200 lines.

When count is specified, length must also be specified.

To send the test pattern to a printer, you can redirect standard output

# lptest > /dev/tty02
# lptest | lpr - -P2

The following is an example of the lptest command.

# lptest 45 10
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM
"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN
#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO
$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP
%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ
&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR
'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS
()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST
)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU
*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV
#

Controlling the Print System
============================

The following example shows some typical lpc [link to lpc] commands 
and the resulting lpc response.

# lpc stat
lp:
     printer is on device '/dev/tty00' speed 4800
     queuing is enabled
     printing is enabled
     no entries
     no daemon present
# lpc
lpc> disable lp
lp:
     queuing disabled
lpc> stat
lp:
     printer is on device '/dev/tty00' speed 4800
     queuing is disabled
     printing is enabled
     no entries
     no daemon present
lpc> q
#

Controlling the Print Environment

lpr

The lpr commands puts the file on a list to be printed.

EXAMPLE
=======

# lpr -P myfile.lis 


lpq

The lpq command lets you examine the queue of jobs waiting to be
printed.

The lpq command invoked without any arguments reports on any requests
currently in the queue.  The -P flag can be used to specify a
particular printer; otherwise, the default line printer is used (or
the value of the PRINTER environment variable).

It shows the status of all active printers and find out the request
ID, also known as job number, of what you've printed.

EXAMPLE
=======

# lpq myfile
Rank    Owner   Job    Files    Total   Size
1st     katina  12     myfile   2224895 bytes


lprm

The lprm command lets you delete jobs.  It removes the request to
print something.

EXAMPLE
=======

# lprm 12
dfA0121iecc dequeued


lpc

The lpc command is used by the system administrator to control the
operation of the line printer system.  For each line printer
configured in the /etc/printcap file, the lpc command may be used to:

. Enable or disable queueing for a particular printer
. Enable or disable printing on a particular printer
. Remove all jobs
. Move a job
. Manipulate the lpd daemon
. Get printer status information

[POPUP Table]
============================================================================
Help        Prints a short description of each command specified in the argu-
	    ment list or, when no arguments are supplied, a list of the
	    recognized commands.
Abort       Terminates an active spooling daemon running on the local host,
	    and then disables printing. This prevents new daemons from being
	    started by lpr for the specified printers.
Clean       Removes any temporary files, data files, and control files that
	    cannot be printed (files that do not form a complete printer job)
	    from the specified printer queue(s) on the local machine.
Disable     Turns the specified printer queues off. This prevents new printer
	    jobs from being entered into the queue by lpr.
Down        Turns the specified printer queue off, disables printing, and
	    puts a message in the printer status file. The message does not
	    need to be quoted because remaining arguments are treated the
	    same as echo.
Enable      Enables spooling on the local queue for the listed printers.
	    This allows lpr to put new jobs in the spool queue.
Exit        Exit from lpc.
Quit        Quit from lpc.
Restart     Attempts to start a new printer daemon. This is useful when some
	    abnormal condition causes the daemon to terminate unexpectedly
	    and leave jobs in the queue.  lpq reports that there is no daemon
	    present when this condition occurs.  When a daemon is stuck, you
	    must first kill it and then restart.
Start       Enables printing and starts a spooling daemon for the listed
	    printers.
Status      Displays the status of daemons and queues on the local machine.
	    When printer name parameters are not supplied, information about
	    all printers is provided.
Stop        Stops a spooling daemon after the current job has completed and
	    disables printing.
Topq        Places jobs in the order listed at the top of the printer queue.
Up          Enables all printing and starts a new printer daemon. Cancels the
	    effect of the down command.
============================================================================

This command cannot be used across a network.

lprsetup

The lprsetup command provides an interactive easy-to-use facility for
administrating the line printers on your system.  The lprsetup program
contains on-line help and default answers to questions about adding,
deleting, or changing the characteristics of any of the line printers
on your system. Whenever a question is asked, the default selection is
given in brackets [ ] .  You can press Return in response to the
question to accept the default, or enter an alternate value for the
given parameter.

The program knows about all of the possible symbols in the
/etc/printcap file.  After you have entered a printer pecification,
and have verified that it is correct, lprsetup then creates the
spooling directory, links the output filter, and creates an
/etc/printcap entry for the new printer.

If the printer is connected to your system, you must specify the
printer device name which is in the lp printcap entry.

With Digital UNIX Version 4.0, printconfig replaces lprsetup.

SYSTEM V UNIX SYSTEMS

System V Frequently Encountered Problems

Want to see what others are encountering?  Check out the following
Notes file: KERNEL::UNIX_PRINTING

These are common questions/problems you may encounter in the field.

Configure Spooling on Solaris
    
    To configure spooling from Solaris to a remote printer, specify
    the remote printer as server!printer:

          # lpsystem -t bsd server
          server has been added
          # lpadmin -p rpr1 -s server!pr1 -I and -T unknown
          # accept rpr1

Spooling from HP-UX to an lpd Printer

    HP-UX has added some of the functionality of lpd to the lpsched
    daemon:

         # /usr/lib/lpshut
         # /usr/lib/lpadmin -rpr1  -mrmodel -v/dev/null -ormserver
           -orppr1 -ob3
         # /usr/lib/accept rpr1
         # /usr/lib/enable rpr1
         # /usr/lib/lpsched

    Add the client the the server's hosts.equiv or hosts.lpd file.

Spooling from an lpd System to lpsched on HP-UX

    HP-UX provides the ability to accept jobs from lpr/lpd systems by
    providing a rlpdaemon that gets started at boot time.  It accepts
    jobs from hosts listed in hosts.equiv or /usr/spool/lp/.rhosts.
    
Printing Process Overview

The System V printing system was not designed for network printing and
has not scaled well; vendors who currently use it have add numerous
changes.

Using the standard system, when a user wants to print something, he
must either use the program lp or a command that invokes lp:

. The lp command makes a copy of the data to be printed and pc
  and places it in a file or set of files in the spool [link to spool
  popup].  The spool directory is usually /var/spool/lp/request/dest
  where dest is the name by which lp knows the printer.

  The files are named xxxn, where n is a job number assigned by lp.

  lp checks the LPDEST environment variable if the -d option is not
  used to determine where to print the file; if none is set lp queues
  the data to the default printer set by the administrator (with
  the lpadmin -d command).

[POPUP]
===========================================================================
Destination

A destination (usually a printer) has a name up to 14 alphanumeric
characters.  It may be belong to a class (a group of destinations that
serve a similar purpose).
===========================================================================

. The lpsched daemon [link to daemon popup] takes the files placed in
  the spool directory and sends them to the correct device, when it is
  available.

. The lpsched [link to lpsched command topic] daemon executes an
  interface program that formats the data and outputs it to the printer.

Solaris puts some of the lp commands normally found in the /usr/lib in
the /usr/sbin directory.  Some of the files normally found in
/usr/spool/lp are found in /etc/lp.  lpsched is located in
/usr/lib/lp.  Logs are in /var/lp/logs.

Queue Setup and Management Examples

Build lp

    To build lp, create a login on the system called "lp" and make
    sure the directory /usr/spool/lp does not exist. 

Add a New Printer

    To add a new printer, execute:

          /usr/lib/lpadmin [link to lpadmin topic] -pprinter -vdevice { -eprinter | -mmodel
             | -iinterface } [ -cclas ...] [{ -l | -h }]

       To specify a printer called pr1 connected to /dev/tty06 in
       class pr with interface programs for dumb printers enter:

           /usr/lib/lpadmin -ppr1 -v/dev/tty06 -mdumb -cpr

Set the System Default Destination

    To set the system default destination to class pr:

           /usr/lib/lpadmin -dpr

Remove A Printer

    Remove printer pr1 from class pr and adds it to class fast:

           /usr/lib/lpadmin -ppr1 -rpr -cfast

    To removes printer pr1:

          /usr/lib/lpadmin -xpr1
    
Controlling the Print Environment

lpadmin

The lpadmin command is used to tell the printing system about the
local printer configuration depending on what flags [link to lpadmin
popup table] are set.

It creates text files in /usr/spool/lp.

Most lpadmin commands will not work when lpsched is running, so
lpsched must be stopped with the lpshut command before lpadmin is
used.  (Solaris however requires lpsched to be running.)

HP-UX allows you to specify programs that return status information
and cancel print jobs.

Solaris requires you to specify what type of input your device handles
with the -I option.  Solaris stores interface programs in the
/etc/lp/interfaces directory.

lp will not accept requests for a new printer until you use the accept
command.  (Some versions of Solaris default to accepting jobs when you
first install a printer with lpadmin.)

[POPUP table]
======================================================================
lpadmin flags

Flag        Functions
-ddest      Makes dest the system default
-xdest      Removes dest from the printing system
-pprinter   Specifies the printer
-cclass     Adds printer to class
-rclass     Removes printer from class
-edest      Copies interface program from dest for printer
-iinterface Makes interface the interface program for printer
-mmodel     Makes printer use the interface program for model
-h          Indicates that printer is hardwired
-l          Indicates the printer is a login terminal
-vfile      Appends output for printer to file
======================================================================

lpsystem

Solaris uses the lpsystem command to manipulate the printing
permissions.

Before you can send or receive jobs, you must enable lpsystem
using the -t option to specify the type of printing the remote machine
has:

. For systems that accept jobs from the lpd command (all BSD and
  HP-UX) use: bsd

. For machines running Solaris, use: s5

lpshut

The lpshut command turns off the print spooler.
    
lpsched

  The lpched daemon keeps a log of each file it processes and records
  errors in /usr/spool/lp/log. The log file is the first place you
  should look to diagnose the problem.

  To stop lpsched (to run lpadmin, for example), use the lpshut command. 
  While lpsched is not running, no jobs will be printed, though lp may
  still queue jobs.  To restart the daemon, use the lpsched command.

  The /usr/spool/lp/SCHEDLOCK file is created to ensure that only one copy
  of lpsched is running. SCHEDLOCK must be removed by hand before
  lpsched can be started again.

cancel

The cancel command allows jobs that are queued or being printed to be
canceled.

EXAMPLE
=======

# cancel 576 (cancels job 576)
# cancel pr1 (cancels job currently printing on pr1)

reject

The reject command tells lp to stop queuing jobs.

EXAMPLE
=======

# /usr/lib/reject -r"pr1 will be down until Saturday" pr1

accept

The accept command tells lp to begin accepting printing jobs.  New
printers are added with lpadmin are configured to reject by default.

EXAMPLE
=======

# accept rpr1

disable

The disable command tells lpsched to stop sending jobs to a printer
but does not stop lp from queuing jobs.

EXAMPLE
=======

# /usr/lib/disable -r"Down for five minutes" pr1

enable

The enable command tells printer to begin printing again.

EXAMPLE
=======

# /usr/lib/enable pr1

lpmove

The lpmove command move jobs queued for one printer or class to another
printer.

EXAMPLE
=======

# /usr/lib/lpmove pr1-324 pr1-325 pr2 (moves jobs 324 and 325 to the
queue for printer pr2)

# /usr/lib/lpmove pr1 pr2 (moves all the jobs on pr1 to pr2)

lpmove cannot be used when lpsched is running.

lpstat

The lpstat command show the status of all parts of the queueing
system, depending on which flags [link to popup table] you specify.

EXAMPLE
=======

% lpstat -ppr1
pr1 is now printing pr-111. enabled since Jan 1 12:15

[POPUP Table]
===========================================================================
lpstat flags

Flag        Function
-r          Shows the status of the lpsched daemon
-d          Shows the default destination
-cclass     Lists the members of class
-oarg       Shows the status output requests for arg
-uuser      Shows the status of jobs submitted by user
-pprinter   Lists the status of printer
-vprinter   Lists the output device associated with printer
-adest      Shows the acceptance status of dest
-s          Shows a summary of status information
-t          Shows all status information
===========================================================================

Interface programs

An interface program:

. Takes information from a file that lpsched specifies.

. Formats the information.

. Sends the formatted information to its the standard output.

It is also responsible for:

. Setting the correct modes on the output device.

. Generating headers and trailers

Interface programs are usuallly shell scripts.

The lpadmin flag -e, -m, or -i [link to popup table] is used to tell the
queuing system which printer interface program to use.  The printer
interface program [link to printer interface topic] is responsible for
formatting jobs before they are sent to the printer.

[POPUP Table]
===========================================================================
Ways to Specify Interface Program

-eprinter  Printer is the name of an existing printer.  This is useful
           if you are adding a printer that is exactly like an
           existing one.

-mmodel    With this option, model is a type of device.  Look in the
           /usr/spool/lp/model directory to see which models are
           supported.

-iinterface Specifies the full path name of the program to be used as
            interface script.
===========================================================================

The interface program for each printer is located in the
/usr/spool/lp/interface/printer directory.

Users can create their interface programs and specify them with the -i
flag.  These programs should have the pseudo-user lp and group owner
bin and mode of 644.

lpsched calls interface programs with these arguments

  jobid user title copies options files

[POPUP Table]
===========================================================================

jobid is the job identification
user is the user who printed it
title is option, specified by user
copies is the number of copies to print
options are user-supplied
files are the full pathnames of files to print
===========================================================================

The interface program gets its standard input from /dev/null and both
standard output and error are specified by the lpadmin -v command.

Unlike BSD, where there are different interface programs for different
file formats, System V requires interface programs to handle all the
kinds of data the printer can accept.

An interface program should exit with 0 on successful completion and
an integer (1-127) if an error occurs.  If a serious error happens,
the interface program should disable the printer.

POPUPS (Glossary terms)

Spooler

A spooler is a system that receives print jobs, stores them,
prioritizes them, and sends them sequentially to the printer.

A print spooler stores print requests in memory, allocating them to 
printers.  This allows several print requests to be stored in RAM 
simultaneously, freeing the users who originate the print requests to 
go on with their work.

dpi

Most recent printers are bitmap devices, meaning that the output
is dots.  A printer's dpi is the number of dots per inch.

PDL

Most printers accept input in one or more Page Description Languages
that specify the images to be placed on the page.  They are device
and resolution-independent.

bitmap

A set of data that specifies which dots are filled in (or what
color each dot is, in the case of color).

RIP

A RIP (Raster Image Processor) system accepts documents in one
or more PDL and converts them to a bitmap format.

PostScript

PostScript is the most common PDL format on UNIX systems.
Designed by and licensed from Adobe Systems Incorporated, almost
all page layout programs can generate PostSCript and many printers
can accept PostScript directly.

HPGL

HPGL is the Hewlett-Packard Graphics language, another PDL.  Most
CAD applications can generate HPGL and many large-format output
devices understand it.

PCL

Printer Command Language is HP's alternative to PostScript.

QuickDraw

QuickDraw is a graphics language used on Apple Macintosh systems.

roff

roff is not a PDL but a text formatting language.

Transcript

Transcript is a set of filters written by Adobe that translates some
common formats (such as text) to PostScript.

NeWSPrint

NeWSPrint is a RIP package from Sun that includes translation from some
common formats to PostScript and includes a screen viewer.

JetDirect

JetDirect from Hewlett-Packard allows you to send jobs via TCP/IP to
Hewlett-Packard printers on the network.

ghostscript

ghostscript is a freely-distributed PostScript interpreter that allows you
to view PostScript files on your screen.

CAP and K-Spool

CAP (Columbia AppleTalk Package) and K-Spool (from Xinet) allow you to
accept print jobs form Macintosh computers and to print to AppleTalk
printers from your UNIX queue.


Want more information?  See the UNIX System Administration Handbook,
Second Edition by Evi Nemeth, Garth Synder, Scott Seebass, Trent R.
Hein, Prentice Hall PTR Englewood Cliffs, New Jersey 07632
T.RTitleUserPersonal
Name
DateLines