Chapter 9. Administering Printers

One of the basic peripheral devices used by almost all workstations and servers is a printer. This chapter deals with installing and maintaining a printer with your IRIS workstation or server. Most computing facilities use printers regularly. Your IRIS supports many industry-standard printers.

The most convenient way for you to install a printer on your IRIS is to use the graphical System Manager. This method of adding a printer is described in the Personal System Administration Guide. If you have a non-graphical workstation or server, you can use this chapter for instructions on how to administer your printing system using IRIX shell commands. In this chapter, the terms ``workstation'' and ``server'' are used interchangeably, because the interface described here is identical across all Silicon Graphics products.

The lp system allows information to be printed and is one of the main utilities that users need on a regular basis. This chapter discusses:

Adding a Printer

To send print requests to your printer, you must first add your printer by registering it with the line printer (lp) spooler. The printer should be registered with the lp spooler of the computer to which the printer is directly connected (hardwired), and also with the lp spooler of any computer accessing the printer through a network. The procedures for registering a printer with lp vary, depending on whether the printer is hardwired or accessed across a network; these procedures are described in the next sections.

Registering Parallel and SCSI Printers

There are several different types of printers you can connect to your system. In this chapter, printers are divided into three groups. The first group is parallel and SCSI printers. The second are serial printers and the third group is printers of any type connected to other systems. The printer hardware documentation should tell you whether your printer is a parallel or serial printer.

If you need to create the devices to use your parallel port or ports (some systems, such as CHALLENGE and Onyx series have multiple parallel ports), log in as root and use the commands:

cd /dev 
./MAKEDEV plp 

The MAKEDEV script will determine the number of parallel ports on your system (there is always at least one) and make the correct devices for all available ports.

The parallel interface port on the back of your workstation or server is clearly labeled. The special file /dev/plp refers to the parallel printer interface and port. Some larger servers and workstations can have multiple parallel ports. There is one parallel port on each IO4 board on CHALLENGE and Onyx systems. If you have four IO4 boards, you have four parallel ports.

If you have more than one parallel port on your system, the device files that refer to the ports are named according to the board slot in which the CPU board is installed. For example, if you have an IO4 board in slot 2 and another in slot 4, the device files for the parallel ports will be /dev/plp2 and /dev/plp4. One of these devices (the parallel port attached to the board designated as the primary board) will be linked to the default /dev/plp. Each parallel port on the back of your system is clearly labeled.

Parallel and SCSI printers are installed with the same procedure, but to different ports. Your SCSI printer hardware documentation should detail the cabling requirements for SCSI interface. Most printers can be installed using the graphical System Manager and the procedures described in the Personal System Administration Guide. The procedure below is for those systems without access to the System Manager.

To register printers connected directly to your computer via the parallel or SCSI ports, follow these steps:

  1. Become the superuser with the su(1M) command.

  2. To stop the print spooler, type:

    /usr/lib/lpshut 
    

  3. Assuming you have a raster printer attached to the parallel port, use the mkcentpr(1M) utility to install the printer in the lp system:

    mkcentpr 
    

    The mkcentpr utility is an interactive script that will prompt you for all necessary information about your printer. You should be prepared to specify the device file for the parallel port (/dev/plp unless you have multiple CPU boards installed) and other specific information. Consult the mkcentpr(1M) reference page for complete information about mkcentpr syntax.

  4. To set up this printer as the default printer, type:

    /usr/lib/lpadmin -dprinter-name 
    

  5. To restart the print spooler, type:

    /usr/lib/lpsched 
    

Your printer is now registered with the lp system and is ready for printing.

Registering Serial Printers

If you have a graphics system, the best way to add a serial printer is to use the System Manager provided with the Operating System. Servers and other non-graphics users use the lpadmin(1M) command. To add a printer to port 2 on your system, perform the following steps:

  1. To stop all printer activity on your system for the duration of this procedure, give the command:

    lpshut
    

  2. To define the printer interface for the new device, give the following command:

    lpadmin -p printer-name -m model -v /dev/ttyd2 
    

    where model is a type of printer listed in the /var/spool/lp/model file.

  3. To make the new printer the default destination for your lp(1) print jobs, give the command:

    lpadmin -d printer-name To enable the printer to receive requests, give the command:
    enable printer-name 
    

  4. To enable lp to process requests for this printer, give the command:

    /usr/lib/accept printer-name 
    

  5. Finally, restart printer activity on your system with the command:

    /usr/lib/lpsched 
    

Registering Network Printers

The most convenient way for graphical workstation users to add a network printer is to use the graphical System Manager. The Print Manager utility is described in detail in the Personal System Administration Guide.

To configure a printer for use across a network using IRIX shell commands, follow these steps:

  1. Log in as the superuser to the workstation with the attached printer.

  2. Replace remote_workstation in the command below with the name of the workstation that needs access to the printer. Type:

    addclient remote_workstation 
    

    addclient grants permission for the specified remote_workstation to access printers across the network. It is important to realize that by giving this command, you are allowing anyone on the remote machine who has access to the lp account there to have the privileges of the lp account on your system.

    If you want all remote workstations to be able to use printers on your system, type:

    addclient -a 
    


    Note: Printers must be configured on the system to which they are attached before remote workstations can configure them successfully across the network.


  3. Both workstations must be able to communicate across the network. For additional information on network communications, see Chapter 15, “Understanding Silicon Graphics' Networking Products.”

  4. On the local workstation, become superuser.

  5. To stop the spooler, type the command:

    /usr/lib/lpshut 
    

  6. On the local workstation, add the printer to the lp spooler with the script mknetpr:

    mknetpr printer hostname netprinter 
    

    printer is the local name you want for the remote printer and should be no more than 14 characters long. hostname is the name of the workstation or server the remote printer is on, and netprinter is the name of the printer on that workstation or server.

  7. To set up this printer as the default printer, type this command on the local workstation:

    /usr/lib/lpadmin -dprinter-name 
    

  8. Restart the spooler with this command:

    /usr/lib/lpsched 
    

Removing Printers

Under some circumstances, you may want to remove one or more printers from the lp system. The rmprinter(1M) utility allows you to remove a specified printer. The preset(1M) utility allows you to reset your entire lp system to the way it was when you received your workstation from Silicon Graphics, Inc. To remove a specified printer, follow these steps:

  1. Become the superuser.

  2. Remove the printer by entering the command below. Replace printer-name with the name of the printer you wish to remove:

    rmprinter printer-name 
    

Your printer is now removed from the lp system.

To remove all printers on your system, use the preset command.


Caution: Use preset with extreme care: it removes all printer configuration information.


  1. Become the superuser.

  2. Type:

    preset 
    

Your lp system is now completely reset and all printers are removed.

Using the lp Spooler

The Line Printer (lp) Spooling Utilities are a set of eleven commands that allow you to spool a file that you want to print. Spooling is a technique that temporarily stores data until it is ready to be processed (in this case, by your printer). For lp spooling, a file (or group of files) to be printed is stored in a queue until a printer becomes available. When the printer is ready, the next file in the queue is printed.

lp spooling allows you to use your workstation without waiting for your file to print. lp spooling also lets you share printers among many users. The flow of printing throughout your system is regulated by the lp Spooling Utilities.

The lp Spooling Utilities allow:

  • Customizing your system so that it will spool to a pool of printers. (These printers need not be the same type.)

  • Grouping printers together into logical classes to maximize throughput.

  • Queueing print requests, thus allowing a print request (job) to be processed by the next available printer.

  • Canceling print requests, so that an unnecessary job will not be printed.

  • Starting and stopping lp from processing print requests.

  • Changing printer configurations.

  • Reporting the status of the lp scheduler.

  • Restarting any printing that was not completed when the system was powered down.

  • Moving print requests and queues from one printer or class of printers to another.

The eleven lp spooling commands are divided into two categories: user commands for general use of the lp system; and administrative commands for system configuration and maintenance.

lp Terms and Conventions

These terms represent important concepts used in this document:

printer 

A logical name that points to an interface file, which represents a physical device, that is, the actual printer.

class 

The name given to an ordered list of one or more printers. A printer may be assigned to more than one class, but need not be a member of any class.

destination 

The place an lp request is sent to await printing. The destination may be a specific printer or a class of printers. An output request sent to a specific printer will be printed only by that printer; a request sent to a class of printers will be printed by the first available printer in its class.

lp User Commands

The commands described in this section allow all users on your workstations and your network to access the printing facilities. Your users should use the lp and cancel commands most frequently, the lpstat command occasionally, and the enable and disable commands infrequently, if ever.

User Command Summary

This section describes the five basic lp commands.

lp 

Routes jobs to a destination and places them in a queue. The destination may be either a single printer or a class of printers.

cancel 

Cancels output requests.

disable 

Prevents a printer from printing jobs in the queue.

enable 

Allows a printer to print jobs in the queue.

lpstat  

Reports the status of many aspects of the lp spooling system.

lp: Make an Output Request

The lp command routes a job request to a destination where it is placed in a queue to await printing. The destination may be a single printer or a class of printers. If you do not specify a destination, the request is routed to the default destination. For information on how to set the default printer destination, see “Changing the Default Printer Destination”

The form of the lp command is:

lp [options] filenames 

Every time an lp request is made, a ``request-ID'' is assigned to the job, and a record of the request is sent to you. The request-ID has this form:

destination-seqnum 

destination is the printer or class of printers to which the job has been routed. seqnum is an arbitrary sequence number assigned to the job by the lp system.

lp has three options which are particularly useful: - n, -d, and -c.

Use -n to print more than one copy of a document:

lp -nnumber 

number is the number of copies to print. Note that there is no space between -n and number.

Use -d to specify a printer or class of printers other than the default printer (assuming your system has more than one printer defined):

lp -ddestination filenames

Finally, use -c (for copy) to ensure that the edits that you make to your files once you have issued a print request do not show up in the printed output:

lp -c filenames 

You can combine these command options in any order. For a complete list of lp options, see the lp(1) reference page. Some example uses of the lp command are shown here:

lp myfile 
request id is myprinter-12 (1 file) 
lp < myfile 
request id is myprinter-13 (standard input)
cat myfile | lp 
request id is myprinter-14 (standard input)
lp -n3 -dfoo -c myfile 
request id is foo-15 (1 file) 

To request a printout, you can use the lp command several different ways. The first three examples above perform identical functions, sending a simple print request to the default printer. The fourth example prints three copies on printer foo and creates a copy of the file for the printer to process, ensuring that if changes are made to the file after the print request, the original file will be printed.

cancel: Stop a Print Request

The cancel command removes a job from the queue. You can cancel a job either before or after it starts printing, but you can cancel only one at a time.

Any user can cancel any other user's job. If you cancel another user's print request, mail is sent to that user. Once you cancel a job, you can request that it be printed again only with the lp command:

cancel printer-name

cancel request-ID 

Using the printer name cancels the job currently being printed. Using the request-ID cancels the specified job whether or not it is currently being printed, as shown below:

cancel myprinter 
request "myprinter-16" cancelled 
cancel myprinter-17 
request "myprinter-17" cancelled 

Issuing a cancel command does not work when the job is being printed on a remote workstation. To cancel a print job on a remote system, log in to the remote system and issue the cancel command.

disable: Stop Printer from Processing Requests

The disable command prevents the printer from printing jobs in the queue. Possible reasons for disabling the printer include malfunctioning hardware, paper jams, running out of paper, or end-of-day shutdowns. If a printer is busy at the time it is disabled, the request it was printing is reprinted in its entirety when you re-enable the printer.

You can send job requests to a printer that has been disabled. The jobs are put on the queue but are not printed until the printer is enabled.

To disable a printer, type:

disable [-c] [-r"reason"] printer(s) 

The -c option cancels the request currently being printed and disables the printer. This is useful if the current request causes the printer to behave abnormally.

The -r option lets you tell other users why you disabled a printer. reason is a character string and must be enclosed in double quotes (" "). This string is reported to anyone trying to use the disabled printer or to anyone issuing the lpstat(1M) command.

enable: Allow Printer to Process Requests

The enable command permits a printer that has been disabled to begin printing jobs from the queue. The example below demonstrates the enable command. To enable a printer, type:

enable printer(s) 
disable -r"paper jam" myprinter 
printer "myprinter" now disabled 
enable myprinter 
printer "myprinter" now enabled 

lpstat: Report lp Status

The lpstat command gives you a report on the status of various aspects of the lp system. To check lp status, type:

lpstat [options]

The most useful option is -t, which gives a complete report on the status of the lp system. For a complete list of options, see the lpstat(1) reference page. The following example demonstrates the lpstat command:

lpstat -t 

scheduler is running 
system default destination: myprinter 
members of class foo: 
myprinter 
device for myprinter: /dev/plp 
myprinter accepting requests since Jul 31 21:40 
foo accepting requests since Jul 30 12:23 
printer myprinter now printing foo-18 
enabled since Aug 5 15:34 
foo-18 mylogin 3156 Aug 7 17:11 on myprinter 

Administrative Commands

This section summarizes the commands that are used to administer the lp system. To execute the administrative commands, you must be logged in as either root (that is, the superuser) or as lp. Inexperienced users should not use the lp administrative commands.

Administrative Command Summary

lpsched 

Starts the lp scheduler.

lpshut 

Stops the lp scheduler.

reject 

Prevents jobs from queueing at a particular destination.

accept 

Permits job requests to queue at a particular destination.

lpmove 

Moves printer requests from one destination to another.

lpadmin 

Configures the lp system.

lpsched : Start the lp Scheduler

The lpsched command starts the lp scheduler. lp prints jobs only when the scheduler is running. lpsched is executed automatically each time the computer is booted.

Every time lpsched is executed, it creates a file called SCHEDLOCK in /var/spool/lp. As long as this file exists, the system will not allow another scheduler to run. When the scheduler is stopped under normal conditions, SCHEDLOCK is automatically removed. If the scheduler stops abnormally, you must remove SCHEDLOCK before you use the lpsched command. You may need to use this procedure to restart the scheduler after the system shuts down abnormally.

To start the lp scheduler, type:

/usr/lib/lpsched 

There is no response from the system to acknowledge the lpsched command; to verify that the scheduler is running, use lpstat.

lpshut: Stop the lp Scheduler

The lpshut command stops the lp scheduler and ends all printing activity. All requests that are being printed when you issue the lpshut command are reprinted in their entirety when the scheduler is restarted.

To stop the lp scheduler, type:

/usr/lib/lpshut 

reject: Prevent Print Requests

The reject command stops lp from routing requests to a destination queue. For example, if a printer has been removed for repairs, or has received too many requests, you may wish to prevent new jobs from being queued at that destination.

If the printer is enabled, all requests that are in the queue when you issue the reject command are printed.

The reject command takes the form:

/usr/lib/reject [-r"reason"] destination 

The -r option lets you tell other users why print requests are being rejected. reason is a character string and is enclosed in double quotes (" "). This string is reported to anyone trying to use lp to send requests to the specified destination.

accept : Allow Print Requests

The accept command allows job requests to be placed in a queue at the named printer(s) or class(es) of printers. As shown in the example below, accept allows a printer to receive job requests and reject disables printing:

/usr/lib/accept myprinter 
destination "myprinter" now accepting requests 
/usr/lib/reject -r"printer broken" myprinter 
destination "myprinter" is no longer accepting requests 

lpmove: Move a Request to Another Printer

The lpmove command moves print requests from one destination to another. For example, if you have a printer removed for repairs, you may want to move all jobs pending on the queue to a destination with a working printer. You may also use lpmove to move specific requests from one destination to another, but only after you have halted the scheduler with the lpshut command. lpmove automatically rejects job requests re-routed to a destination without a printer. The lpmove command takes two forms:

/usr/lib/lpmove dest1 dest2 
/usr/lib/lpmove request(s) destination 

dest1, dest2, and destination are printers or classes of printers. request is a specific request-ID.

In the first form of the command, all requests are moved from dest1 to dest2. After the move, the printer or printers at dest1 will not accept requests until you issue an accept command. All re-routed requests are renamed dest2-nnn, where nnn is a new sequence number in the queue for destination dest2. In the second form, which you may issue only after you stop the scheduler, the re-routed requests are renamed destination-nnn. When you restart the scheduler, the original destinations will still accept new requests. The three commands in the example below demonstrate the usage of the lpmove command:

/usr/lib/lpmove myprinter yourprinter 
lpshut 
/usr/lib/lpmove foo-19 foo-20 yourprinter 

After the third command, you see the message:

total of 2 requests moved to yourprinter 

lpadmin: Configure Printers

The lpadmin command has two primary uses: adding new printers to the system and changing printer classes and destinations. Silicon Graphics has some routines to automatically add some of the printers supported for use with the workstation. These commands include mkPS(1M), mkcentpr(1M), and mknetpr(1M). These should be used whenever possible. For a list of supported printers, see the file /var/spool/lp/model.

Unlike most IRIX commands, lpadmin requires an option. The lpadmin command takes three forms:

lpadmin -ddestination 
lpadmin -xdestination 
lpadmin -pprinter [options] 

The -d option sets the system default destination. The destination must already be installed when you issue the command.

The -x option removes the specified destination from the lp system. This form of the lpadmin command will not work while the scheduler is running.

You cannot remove a destination (printer or class) if it has pending requests; you must first either remove all requests with the cancel command or move them to other destinations with lpmove.

Removing the last remaining member of a class deletes that class from lp. Removal of a class, however, does not imply the removal of printers assigned to that class.

The -p form of the lpadmin command has two options that let you reassign printers to different classes. With these options, the lpadmin command takes the form:

lpadmin -pprinter [-cclass] [-rclass] 

The -c option assigns a printer to the specified class; the -r option removes a printer from the specified class.

/usr/lib/lpadmin -xmyprinter 
/usr/lib/lpadmin -dmyprinter -rfoo -cboo 

The -p options will not work while the scheduler is running. For a complete list of options, see the lpadmin (1M) reference page. After creating a printer, you may need to edit the interface file: /var/spool /lp/interface/printername. The interface file controls such things as printer baud rate, log file site, and existence of banners.

Maintaining the lp System

This section contains procedures for changing your default printer, clearing printer log files, and printing over a network.

Changing the Default Printer Destination

The lp command determines a request's destination by checking for a -d option on the command line. If -d is not present, it checks to see if the environment variable LPDEST is set. If LPDEST is not set, then the request is routed to the default destination.

The system default destination can be a printer or a printer class.You can set it by using the lpadmin command with the -d option. The system default must be set by the user. A destination must already exist on the lp system before you can designate it as the default destination.

Setting the environment variable LPDEST allows a user to have a default destination other than the system default.

Clearing Out log Files

A log file keeps a record of all printing activity on a given printer. Each printer keeps a log file, located in /var/spool/lp/transcript/log. You can change the name of the file by editing /var/spool/interface/printername and changing the value of the LOGFILE variable.

Each file contains a running list of processed jobs, each of which includes the following:

  • the logname of the user who made the request

  • the request ID

  • the name of the printer that processed the request

  • the date and time the printing started

Any lpsched error messages that occur are also recorded.

If there are a lot of lp requests for a given printer, that printer's log file will soon get very large. You can manually remove the contents of these files from time to time, or you can set up the computer to do it for you automatically at regular intervals.

Included in /var/spool/lp/etc/lib is a shell script log.rotate that automatically rotates (cleans out) your printers' log files once per day at 4:12 a.m. To set up the script for your printer(s), you must edit log.rotate and /var/spool/cron/crontabs/root in the following manner:

  1. Become the superuser and change directories to /var/spool/lp/etc/lib:

    cd /var/spool/lp/etc/lib 
    

  2. In the file log.rotate, remove the comment marker (#) from the following line:

    # printers="PRINTER1 PRINTER2" 
    

    In place of PRINTER1 and PRINTER2, put the names of any parallel-interface (that is, color) printers and any remote printers. Any number of printers may be included. If you have no color or remote printers, use two double quotes to make a null string (" ") in place of the printer names.

  3. In the file log.rotate, remove the comment marker (#) from the following line:

    # LocalPS="PRINTER1" 
    

    In place of PRINTER1, put the names of any hardwired (that is, connected to the serial port) printers.

  4. Change directories to /var/spool/cron/crontabs:

    cd /var/spool/cron/crontabs 
    

  5. Edit root by removing the comment marker (#) from the line containing log.rotate.

  6. Write and exit from the file. The lp log will be rotated by the script log.rotate, which is called by the cron daemon.

  7. For more information about using cron to automate tasks, see “Automating Tasks with at(1), batch(1), and cron(1M)”.

Printing Over the Network

Remote printing on the workstation or server allows you to send print jobs over the network with the same commands you use to send jobs to a printer connected directly to your workstation. This is accomplished by giving a remote printer a local name so that the local lp scheduler is ``fooled'' into thinking it is sending the request to a local printer. After the local workstation's lp spooler queues the print request, it is sent across the network to the remote workstation or server, where it is processed by that workstation's lp spooler. As a result of this, you cannot accurately determine the status of a remote print request by using the lpstat command on the local workstation.

This section covers two aspects of remote printing:

  • checking the status of remote print requests

  • canceling remote print requests

Checking Remote Printer Status

When you send a print request across the network to a remote workstation, the local lp system always reports that the request is being printed, regardless of its actual status in the remote workstation's lp system. To check the true status, you must remotely access (using rsh or rlogin) the workstation whose printer is processing the job. The remote lp scheduler changes the request ID of any job sent to it over the net to reflect the actual name of the printer and gives it a new sequence number corresponding to its place in the remote queue. To determine a specific job's status, look in the remote printer's log file (that is, the log file on the remote workstation) with the tail command. The example below uses rsh to access the remote workstation:

rsh host tail logpath

host is the name of the remote workstation. logpath is the pathname of the remote printer's log file.

Canceling Remote Print Requests

Once you know the remote printer status, you can use the cancel command on the remote workstation to cancel any jobs on the printer's queue. You must cancel a remote print job from the remote workstation once it has been sent over the network by the local lp system.

Troubleshooting Your Printing System

If you send a print request to a printer with lp, psroff, or imprint and do not receive any output, you should use the checklists below to make sure your system is ready for printing. Use these lists as a supplement to the troubleshooting information in the manufacturer's hardware manual.

Hardware Troubleshooting Checklist

Use the following list of questions to determine if your printer hardware is working as designed:

  • Is the printer turned on?

    Printers do not always indicate clearly if they are turned on. Make sure the printer is plugged into the power socket and the power switch is on.

  • Does the printer have paper?

    Frequently, printers run out of paper in a high-volume situation.

  • Is there a paper jam?

    Make sure the entire paper pathway is clear of sheets or fragments of paper. Refer to your printer hardware documentation before attempting to put any unusual paper or other media through your printer.

  • Is the printer set to the correct baud?

    Be sure the baud rate of the printer matches that of the serial port.

  • Is the serial cable attached correctly?

    Often, reseating the serial cable where it connects to the printer will restore correct operation.

  • Is the correct cable being used?

    The usage of the pins in serial cables varies somewhat in different applications. Cables designed for specific hardware may or may not function correctly with different hardware. Check your workstation Owner's Guide and the documentation supplied with your printer and cable to determine if the cable is correct for your hardware.

Software Troubleshooting Checklist

The lp scheduler is the program in charge of spooling your files to the printer, and it is invoked whenever you use the lp, psroff, or imprint print commands. The scheduler can be in a number of states, and each printer registered with lp can be in a number of states as well.

To check on the complete status of the lp system, type:

lpstat -t 

This gives you a complete description of the status of lp. You may also want to examine the contents of the file /var/spool/lp/log. Use the information you find to answer the following questions:

  • Is your printer registered with lp?

    If you do not see the name of your printer in the list of information produced by lpstat, then you must register your printer with lp.

  • Is the printer enabled?

    If your printer is not enabled, the lpstat listing will contain this line:

    printer yourprinter disabled since...
    

    In order to enable the printer, type:

    enable yourprinter 
    

    lp sometimes disables a printer automatically if it is unable to send a file to a remote printer, so a disabled printer often indicates a hardware problem, such as a host that is not communicating with the network.

  • Is the printer accepting requests?

    If the printer is not accepting requests, the lpstat listing will contain this line:

    yourprinter not accepting requests since...
    

    You must execute the accept command for that printer destination. Become the superuser (with su) and type:

    /usr/lib/accept yourprinter 
    

  • Is the lp scheduler running?

    If the scheduler is not running, the lpstat listing will contain the message:

    scheduler is not running 
    

    To restart the lp scheduler, become superuser (with su) and type:

    /usr/lib/lpsched 
    

  • Did you specify the right printer?

    If your system has more than one printer, and you wish to send a job to a printer other than the default, remember to use the -d option:

    lp -dotherprinter 
    psroff -dotherprinter 
    

Troubleshooting Network Printers

If you are having trouble with a printer you are accessing over a network, you should check the status of the lp scheduler on your workstation and the printer's host workstation.

Emergency Measures

If none of the above procedures works, there are several ``last resort'' procedures:

  1. Stop the lp scheduler and then restart it. As root, type the following sequence of commands:

    /usr/lib/lpshut 
    

    Then kill any jobs running as lp. You can identify these processes with the command:

    ps -fu lp

    Then give the command:

    /usr/lib/lpsched 
    

  2. Remove the offending printer destination from the lp scheduler, and then register it again. Before you can do this you must either cancel any print requests going to the printer or move them to another print destination (if you have more than one).

  3. As an absolute last resort, remove all printers from the lp system, reboot the computer, and register them all once again.

lp Error Messages

This section provides a description of the error messages that are associated with lp commands. The following variables are used in the error messages:

file(s) 

Indicates the file or files that are to be printed.

dest 

Indicates the name of the destination printer.

printer-id 

Indicates the request identification number of the printout. For example, myprinter-46 is the printer name followed by the request identification number.

printer-name  

Indicates the name of the printer.

program-name  

Indicates the program name that was executed.

user 

Indicates the user who requested the printout.

These messages can be found in the printer log files if you miss them on the system console. Following each message is an explanation of the probable cause of the error and the corrective action to take. If you are not able to correct all the error conditions you encounter, call your service representative for assistance.

  • dest is an illegal destination name

    The dest you used is not a valid destination name. Use the lpstat -p command to list valid destination names.

  • file is a directory

    The file name you typed is a directory and cannot be printed.

  • xx is not a request id or a printer

    The argument you used with the cancel command is not a valid request identification number or a printer name. Use the lpstat -t command to view a list of all the printers and requests waiting to get printed.

  • xx is not a request

    The request identification number you used with the lpmove command is not a valid request identification number. To find out what requests are valid, use the lpstat -u command.

  • xx not a request id or a destination

    You used an invalid request identification number or destination with the lpstat command. To find out what is valid, use the lpstat -t command.

  • dest not accepting requests since date

    Requests to the printer that you are trying to use have been stopped by the reject command.

  • Can't access FIFO

    The named pipe file /var/spool/lp/FIFO is incorrect. The mode should be 600 with the owner lp and the group lp.

  • lp Administrator not in password file

    You must have an entry in the /etc/passwd file for lp, and you must belong to the group lp.

  • destination ``printer-name'' unknown

    Use the accept command to enable the printer so that it will accept requests.

  • can't access file ``xx''

    The mode could be wrong on your directory or the file that you are trying to access.

  • can't create class ``xx''- existing printer name

    The class name you are trying to use has already been given to a printer. You need to use another name or remove the printer to use the class name.

  • can't create new acceptance status file

    The mode may be wrong on the /var/spool/lp directory. It should be 755 with the owner lp and the group lp.

  • can't create new class file

    The mode may be wrong on the /var/spool/lp directory. It should be 755 with the owner lp and the group lp.

  • can't create new interface program

    The mode may be wrong on the /var/spool/lp/interface directory. It should be 755 with the owner lp and the group lp.

  • can't create new member file

    The mode may be wrong on the /var/spool/lp/member directory. It should be 755 with the owner lp and the group lp.

  • can't create new printer status file

    The mode may be wrong on the /var/spool/lp/pstatus. It should be 644 with the owner lp and the group lp.

  • can't create new request directory

    The mode may be wrong on the /var/spool/lp/request directory. It should be 755 with the owner lp and the group lp.

  • can't create ``printer-name'' -- existing class name

    The printer name you are trying to use has already been used as a class name. You need to assign another name for the printer.

  • can't create new output queue

    The mode on the file /var/spool/lp/seqfile is incorrect. It should be 644, and the mode on the directory should be 755. The owner and the group should be lp. You can correct this by typing the command at a later time.

  • can't create new sequence number file

    The mode on the file /var/spool/lp/seqfile is incorrect. The mode of the file should be 644, and the mode of the directory should be 755. The owner and the group should be lp. You can correct this by typing the command at a later time.

  • can't create request file xx

    The mode on the file /var/spool/lp/request/printer-name/r-id is incorrect. Printer-name is the name of the printer such as dqp10, and r-id is the request identification number. The mode of the file should be 444, and the mode of the directory should be 755. The owner and the group should be lp. You can correct this by typing the command at a later time.

  • can't fork

    You either have several processes running and are not allowed to run any more, or the system has all the processes running that it can handle. You must rerun this command later.

  • can't lock acceptance status

    This is a temporary file in /var/spool/lp that prevents more than one lp request from being taken at any one time. You must rerun this command later.

  • can't lock output queue

    The file /var/spool/lp/QSTATLOCK prevents more than one lp request from being printed on a printer at one time. You must rerun this command later.

  • can't lock printer status

    The temporary file /var/spool/lp/PSTATLOCK prevents more than one lp request from being printed on a printer at one time. You must rerun this command later.

  • can't lock sequence number file

    The file /var/spool/lp/SEQLOCK prevents more than one lp request from getting the next printer-id (request identification) number at one time. You must rerun this command later.

  • can't move request printer-id

    Printer-id is the request identification number that cannot be moved. You will probably have to change the modes on the files and directories in /var/spool/lp/request. Also, after you shut down the lp scheduler, you must manually move the request from the disabled printer directory to the new destination.

  • can't open class file

    The lp program is trying to access the list of classes for printers. One reason it may not be able to open the class file is that the system could have the maximum number of files open that are allowed at any time. You can correct this by typing the command at a later time.

  • can't open member file

    The lp program is trying to access the list of members in the directory /var/spool/lp/member. The system could have the maximum number of files open that are allowed at any time. You can correct this by typing the command at a later time.

  • can't open xx file in MEMBER directory

    There are a number of reasons why file xx in the /var/spool/lp/member directory cannot be opened. The mode on the file could be incorrect; it should be 644. The system could have the maximum number of files open that are allowed at any time; you can correct this by typing the command at a later time.

  • can't open xx file in class directory

    If file xx cannot be opened, it's possible that the mode on the file or directory is incorrect. The file mode should be 644, and the directory mode should be 755. Another possibility is that the system has the maximum number of files open that are allowed at any time. The latter problem can be corrected by typing the command at a later time.

  • can't open xx

    You cannot print on printer xx because the mode is incorrect on the /dev/tty file. The mode should be 622.

  • can't open FIFO

    The mode on the named pipe file /var/spool/lp/FIFO may be incorrect. It should be 600. Or, the system could have the maximum number of files open that are allowed at any time. You can correct the latter problem by typing the command at a later time.

  • can't open MEMBER directory

    The mode on the directory /var/spool/lp/member could be incorrect. It should be 755. Another possibility is that the system could have the maximum number of files open that are allowed at any time. If this is the case, try typing the command at a later time.

  • can't open acceptance status file

    The mode on the file /var/spool/lp/qstatus may not be correct; it should be 644. Another possibility is that the system could have the maximum number of files open that are allowed at any time. You can correct the latter problem by typing the command at a later time.

  • can't open default destination file

    Check the mode on the file /var/spool/lp/default; it should be 644. If the mode is correct, it could be that the system has the maximum number of files open that are allowed at any one time. You can correct this by trying the command at a later time.

  • can't open file filename

    You incorrectly typed the filename or you don't have the correct modes set. If you are the owner, the mode should be at least 400.

  • can't open output queue

    Check the mode on the file /var/spool/lp/outputq; it should be 644. This error message could also be generated if the system has the maximum number of files open that are allowed at any one time. Try entering the command at a later time.

  • can't open printer status file

    The mode on the file /var/spool/lp/pstatus is incorrect; it should be 644. This message is also generated if the system has the maximum number of files open that are allowed at any one time. You can correct this by trying the command at a later time.

  • can't open request directory

    The mode on the directory /var/spool/lp/request is incorrect; it should be 655. The system may also have the maximum number of files open that are allowed at any one time. You can correct this by trying the command at a later time.

  • can't open request file xx

    The mode on the file /var/spool/lp/member/request/xx is incorrect. The mode should be 644. The system may also have the maximum number of files open that are allowed at any one time. You can correct this by trying the lpmove command at a later time.

  • can't open system default destination file

    The mode on the file /var/spool/lp/default is incorrect. The mode should be 644. The system may also have the maximum number of files open that are allowed at any one time. You can correct this by trying the command again at a later time.

  • can't open temporary output queue

    The mode on the file /var/spool/lp/outputq is incorrect. The mode should be 644. The system may also have the maximum number of files open that are allowed at any one time. You can correct this by trying the command at a later time.

  • can't proceed -- scheduler running

    Many of the lpadmin command options cannot be executed while the scheduler is running. Stop the scheduler using the lpshut command and then try invoking the command again.

  • can't read current directory

    The lp and lpadmin commands cannot read the directory containing the file to be printed. The directory name may be incorrect or you do not have read permission on that directory.

  • can't remove class file

    The mode may be wrong on the /var/spool/lp/class. It should be 755. The owner and the group should be lp. The file in that directory may also have the wrong mode; it should be 644.

  • can't remove printer

    The mode may be wrong on the /var/spool/lp/member directory. It should be 755, and the files in that directory should be 644. Both the directory and the files should be owned by lp and the group should be lp.

  • can't remove request directory

    The mode may be wrong on the /var/spool/lp/request directory. It should be 755 and should be owned by lp, and the group should be lp. The directory may still have pending requests to be printed, which must be removed before the directory can be removed.

  • can't set user id to lp Administrator's user id

    The lpsched and lpadmin commands can be used only when you are logged in as lp or root.

  • can't unlink old output queue

    The lpsched program cannot remove the old output queue. You must remove it manually by using the command

    rm /var/spool/lp/outputq 
    

  • can't write to xx

    The lpadmin command cannot write to device xx. The mode is probably wrong on the /dev/ttyxx or /dev/plp file. It should be 622 and owned by lp.

  • cannot create temp file filename

    The system may be out of free space on the /var file system. Use the command

    df /var 
    

    to determine the number of free blocks. Several hundred blocks are required to insure that the system performs correctly.

  • class xx has disappeared!

    Class xx was probably removed after the scheduler was started. The system may be out of free space on the /var file system. To find out, use the following command:

    df /var 
    

    Use the lpshut command to stop the scheduler and restore the class from a backup.

  • class xx non-existent

    The class xx may have been removed because the system is out of free space on the /var file system. To find out how much free space is available, use the following command:

    df /var 
    

    The class will probably have to be restored from a backup.

  • class directory has disappeared!

    The /var/spool/lp/class directory has been removed. The system may be out of free space on /var; use the df /var command to find out. The class directory contains all the data for each printer class. To restore this directory, get these files and directory from a backup.

  • corrupted member file

    The /var/spool/lp/member directory has a corrupted file in it. You should restore the directory from backup.

  • default destination dest non-existent

    Either the default destination is not assigned or the printer dest has been removed. Use the lpadmin command to set up a default destination or set your LPDEST environment variable to the value of the destination.

  • destination dest has disappeared!

    A destination printer, dest, has been removed after lpsched was started. Use the lpadmin command to remove the printer.

  • destination printer no longer accepting requests

    The printer has been disabled using the reject command. Use the accept command to re-enable the printer.

  • destination dest non-existent

    The destination printer you specified as an argument to the accept or lpadmin command is not a valid destination name, or it has been removed after the scheduler was started.

  • destination printer was already accepting requests

    The destination printer was previously enabled. Once a printer is accepting requests, any further accept commands are ignored.

  • destination printer already not accepting requests

    A reject command was already sent to the printer. Use the accept command to allow the printer to start accepting requests again.

  • destination printer-name is not accepting requests – move in progress ...

    The printer has been disabled by the reject command, and requests are being moved from the disabled printer to another printer. The printer can be enabled again by the accept command.

  • destinations are identical

    When using the lpmove command, you need to specify a printer to move the print requests from and a different printer to move the requests to.

  • disabled by scheduler: login terminal

    The login terminal has been disabled by the lp scheduler. Use the enable command to re-enable the printer.

  • error in printer request printer-id

    Printer-id is the actual request identification number. An error has likely occurred in the printer. Check the printer, and reset it if needed.

  • illegal keyletter xx

    An invalid option, xx, was used. See the reference page for the correct options.

  • keyletters -xx and -yy are contradictory

    This combination of options to the lpadmin program cannot be used together.

  • keyletter xx requires a value

    The option xx requires an argument. For example, in the command line:

    lpadmin -m model 
    

    the argument to the -m option is the name of a model interface program.

  • keyletters -e, -i, and -m are mutually exclusive

    These options to the lpadmin command cannot be used together. Refer to the reference page for more information on usage.

  • lp: xx

    In this message the variable xx could be one of several arguments. Typically, it is a message telling you the default destination is not assigned.

  • member directory has disappeared!

    The /var/spool/lp/member directory has been removed. The system is probably out of free disk space in the /var file system. You need to clean up the /var file system, and then install the lp commands or retrieve them from a backup.

  • model xx non-existent

    The name that you are using for a model interface program is not valid. A list of valid models is in the /var/spool/lp/model directory.

  • new printers require -v and either -e, -i, or -m

    A printer must have an interface program, and this is specified by -e, -i, or -m options. The -v option specifies the device file for the printer. For more information on these options, refer to the lpadmin reference page.

  • no destinations specified

    There are no destination printers specified. Use the lpadmin command to set one up.

  • no printers specified

    There are no printers specified. Use the lpadmin command to set one up.

  • non-existent printer xx in PSTATUS

    A printer with the name xx is in the /var/spool/lp/pstatus file but no longer exists. Use the lpadmin command to remove the printer.

  • non-existent printer printer-name in class xx

    The printer that you are trying to address in class xx has been removed from that class.

  • out of memory

    Implies the system is in trouble. The message implies that there is not enough memory to contain the text to be printed.

  • printer printer-name already in class xx

    The printer you are trying to move to class xx is already in that class. You cannot move a printer to a class that it is already in.

  • printer printer-name has disappeared!

    The printer has been removed, and the enable command cannot find it. The printer was most likely removed after the workstation was rebooted or after the scheduler was started.

  • printer printer-name non-existent

    Printer-name is the name of a printer that has been removed after the scheduler has been started. You must use the command:

    lpadmin -xprinter-name 
    

  • printer status entry for printer has disappeared

    The /var/spool/lp/pstatus file must have been corrupted. You need to resubmit the printer request.

  • printer printer-name was not busy

    The printer is not printing a request at this time. Either the request you wanted to cancel is finished printing or you have specified the wrong printer.

  • request printer-id non-existent

    You are attempting to cancel a request that does not exist. You may have given the wrong printer name or wrong request id number or the request may have finished printing.

  • request not accepted

    The request was not accepted by lp. The scheduler may not be running. Use the lpstat -t command to find out more information.

  • requests still queued for printer-name -- use lpmove

    Printer-name is the printer that still has requests waiting to get printed. You need to use the lpmove command to get those requests moved to another printer.

  • scheduler is still running -- can't proceed

    You cannot perform this command while the scheduler is running. You need to use the lpshut command first.

  • spool directory non-existent

    The directory /var/spool has been removed. You need to use the mkdir command to restore the directory. This has probably removed some of the necessary lp files. You may have to reinstall the lp commands.

  • standard input is empty

    You specified an invalid file name either by incorrectly typing a name or by specifying a nonexistent file. Nothing will be printed on the printers from this request.

  • this command for use only by lp Administrators

    This command is restricted to someone logged in as root or lp.

  • too many options for interface program

    The lp command called the appropriate interface program with too many arguments. For more information on the options and arguments that can be used with the lp command, refer to the lp reference page.

Printer Cable Pin Signal Tables

Your workstation or server has one or more serial ports and one or more parallel ports. The serial ports on your system are either DB-9 format or Mini-DIN8. The parallel port is the industry standard 25-pin parallel port. For your use in determining correct cabling, the following sections provide pin signal tables for the serial and parallel ports on your system.

Parallel Port Pin Signal Table

The parallel port on your system uses industry standard parallel printer cables to connect to common printers. It is recommended that you use a parallel cable no longer than 10 feet. Using a parallel hookup usually results in faster printing from your system. Also, because serial ports are generally more in demand for modems, terminals, and other peripheral devices, using the parallel port, when possible, saves a serial port for other uses.

Table 9-2 shows the parallel port pin signal table for IRIS systems:

Table 9-1. Parallel Port Pins and Signals

Pin

Signal

1

STB

2

DATA1

3

DATA2

4

DATA3

5

DATA4

6

DATA5

7

DATA6

8

DATA7

9

DATA8

10

ACK

11

BUSY

12

PE

13

ONLINE

14

PR/SC

15

FAULT

16

RESET

17

NO INK

18

NC*

19-25

Signal Ground

*NC stands for "no connect," meaning the wire is not used.

Serial Port Pin Signal Tables

The serial port on your workstation or server is either a DB-9 (9 pin) or a Mini-DIN8 port. In either case, the port is clearly labeled as a serial port. Consult your hardware Owner's Guide to determine which kind of port your system has. There are 2 basic printer cable configurations for the DB-9 serial ports and one for the Mini-DIN8 serial port. Depending on the cables used some serial functionality may be sacrificed due to unconnected wires in the cable. Note that the pinout of the DB-9 connectors is different than that of the full size DIN connectors that may be next to them. These DIN connectors also have different pinouts than the Mini-DIN8 connectors used on some systems and documented in this section. The DB-9 and full size DIN connectors are connected to the same internal port hardware.

DB-9 Connector Cabling

For most serial printers, you should use the following cable. This cable uses the normal 3-wire connection and be used as a /dev/ttyd* device. Table 9-2 shows typical DB-9 serial cabling:

Table 9-2. DB-9 Serial Cable

Function

DB-9-Male

DB25-Male

TXD

1

nc*

RXD

2

3

 

3

2

 

4

nc

 

5

nc

 

6

nc

GND

7

7

DCD**

8

20

 

9

nc

*nc stands for "no connect," meaning the wire is not used.

** DCD is only used with /dev/ttym* devices if the system must notice when the printer powers off. Normally it is not used.


Note: Do not use a cable designed for an IBM PC/AT® compatible 9-pin connector. It does not work correctly with your workstation.

For printers using RTS/CTS hardware flow control, the following pin-out allows ``full flow control.'' This cable is required to implement /dev/ttyf* devices. This cable also supports /dev/ttym* devices. Table 9-3 illustrates the correct pin-out for these devices:

Table 9-3. DB-9 RTS/CTS Flow Control Cable

Function

DB-9-Male

DB25-Male

 

1

nc

TXD

2

2

RXD

3

3

RTS*

4

4

CTS*

5

5

 

6

nc

GND

7

7

DCD

8

8

DTR

9

20

* RTS and CTS are ignored (optional) if using /dev/ttym* but required if using /dev/ttyf*


Note: This cable can be used with a null modem adapter for printers, however it is recommended that you use this cable exclusively for modem connections. The IBM PC/AT to modem cable (``off the shelf cables'') does not work properly with your workstation. For additional information, see the serial(7) reference page.


Mini-DIN8 Connector Cabling

Many workstations and servers use the Mini-DIN8 serial port. Check your hardware Owner's Guide to see if your system supports this type of connection. Note that the pinout of these Mini-DIN8 connectors is different than that of the DIN connectors on larger systems. These larger systems also have DB-9 connectors that are connected to the same internal port hardware.

For most serial printers you should use a commercially available cable, "Macintosh SE® to Imagewriter1®." This cable uses the normal 3-wire connection and is used as a /dev/ttyd* device. Table 9-4 shows the pin configuration:

Table 9-4. Mini-DIN8 Serial Cable

Function

Mini-DIN8-Male

DB25-Male

 

1

nc

TXD

2

nc

GND

3

3

RXD

4

7

 

5

2

DCD*

6

nc

GND

7

20

 

8

7

* /dev/ttym* devices should be used with this cable only if the system must notice when the terminal or printer is powered off.


Note: A Macintosh SE cable also has some other pins connected, but they can be ignored.


Configuring and Troubleshooting the BSD LPR Spooler System

Silicon Graphics does not support configuring the BSD lpr print spooler locally (you cannot have the printer physically connected to a Silicon Graphics system). If you want to use the system as a print server, you will need to refer to “Adding a Printer”.

The purpose of this section is to show by example how to configure any Silicon Graphics computing system so that you will be able to submit and print your files on the BSD print server.

The BSD lpr print spooler will allow you to access printers that are attached to other systems on the network. Please be sure to check the other systems, or contact the System Administrator, to verify the type of spooling system those systems are using. Generally speaking, if a system has an /etc/printcap file configured, it is using the BSD lpr print spooling system.


Note: Do not use the Printer Tool (accessed through the System toolchest or from the System Manager menu) to configure a BSD lpr spooling system. Also, do not use the mknetpr(1M) command for configuring a network printer. These utilities support only the System V LP Spooling System.

Please verify that the System Administrator of the print server includes your hostname in their /etc/hosts.equiv file, and that your IP address and hostname appear in their /etc/hosts file. You will need to add the print servers IP address and hostname to your /etc/hosts file. If your files (documents) do not print once you have configured the BSD print spooler, please see “Troubleshooting the BSD LPR Spooling System”. The troubleshooting section will take you to the point where you can see a copy of your document on the print server. If the document disappears from the server's queue without printing, contact the System Administrator of that system for further assistance.

Verifying Installation of the BSD LPR Subsystem

Enter the following command to verify that the BSD lpr print spooling system was properly installed:

versions long | grep eoe2.sw.bsdlpr 

Your output should be:

eoe2.sw.bsdlpr etc/init.d/lpd eoe2.sw.bsdlpr etc/printcap eoe2.sw.bsdlpr etc/rc0.d/K26lpd eoe2.sw.bsdlpr etc/rc2.d/S61lpd eoe2.sw.bsdlpr usr/bsd/lpq eoe2.sw.bsdlpr usr/bsd/lpr eoe2.sw.bsdlpr usr/bsd/lprm eoe2.sw.bsdlpr usr/bsd/lptest eoe2.sw.bsdlpr usr/etc/lpc eoe2.sw.bsdlpr usr/etc/lpd eoe2.sw.bsdlpr usr/etc/pac eoe2.sw.bsdlpr usr/lib/lpf eoe2.sw.bsdlpr usr/spool/lpd

The BSD spooler is not loaded by default. Check to see if the subsystem is installed. If not, then refer to the Software Installation Administrator's Guide and/or your release notes. Most users will have to use the inst(1M) command and then select the manual option to install this subsystem.

Please use the versions command (versions long | grep lpr) to verify that you have the entire subsystem loaded. Loading only the /etc/printcap file is not sufficient.

After you verify that the eoe2.sw.bdslpr subsystem is properly installed, you will need to edit the /etc/printcap file to configure the lpr spooling system. There are no tools to perform this function, so you will need to edit the file manually. The remainder of this article will take you through this process. Please ensure that you format the entries correctly. The /etc/printcap file expects information in a format similar to the /etc/termcap file.

Configuring the Printcap File

Before you begin editing the /etc/printcap file, login to your system as root.


Note: The printcap file is very sensitive to syntax errors. The name field must begin at the first character on a line of the /etc/printcap file. The printer names must be separated by pipe symbols (the vertical bar “|”). The name line must be terminated with a colon followed by a backslash (“:\”). Make sure that there are no spaces, tabs, or any other character after the backslash.

The definition lines must begin with a tab character followed by a colon (:), followed by the field you are defining, followed by an equal sign. The definition line must end with a colon. See “Printcap Examples”.

There is only one name and three definition fields that must be defined. They are:

name 

This field should contain all the names the printer will be accessed as. It should include lp because, by default, lpr looks for lp in the name field of the /etc/printcap file. The names are separated with pipe symbols.

:rm 

Remote machine name. This is the name of the system that has the printer physically connected to it.

:rp 

Remote printer name. This is the name of the remote printer on the remote system that you are trying to access.

:sd 

Spool directory. This is the name of your local spool directory. If you don't use the default directory, /usr/spool/lpd, you will need to create the directory by using the mkdir(1M) command.

Printcap Examples

Following are two examples that will help you to edit the /etc/printcap file. The first example will show you how to configure the printer configuration file in two lines. The second example will show you how to configure each option of the printcap file on separate lines. There will be explanations of both examples.

Printcap Example 1

lp|sleepy|sleepyprinter:\ 
:lp=:\:rm=snowwhite.story.land:rp=doc:sd=/usr/spool/lpd:

This example can access the printer by the following names:

lp 
sleepy 
sleepyprinter

The remote system (where the printer is physically attached) is called: snowwhite.story.land

The name of the printer on the print server (remote system) is called: doc

The local spool directory is called /usr/spool/lpd

Printcap Example 2

lp|sleepy|sleepyprinter:\
 :lp=:\
 :rm=snowwhite.story.land:\
 :rp=doc:\
 :sd=/usr/spool/lpd:

This example can access the printer by the following names:

lp 
sleepy
sleepyprinter

The remote system (where the printer is physically attached) is called: snowwhite.story.land

The name of the printer on the print server (remote system) is called: doc

The local spool directory is called /usr/spool/lpd

Using the lpr Command to Print

Now that you have the /etc/printcap file configured, make sure that the daemon is running. Enter the following command:

ps -ef | grep lpd 

Your system should return something similar to:

root 195 1 0 11:06:04 ? 0:00 /usr/etc/lpd 
root 1293 753 2 13:20:39 ttyq6 0:00 grep lpd

The /usr/etc/lpd path at the end of the line indicates that the daemon is running. If only one line was returned (grep lpd), then start the lpd daemon by entering the following command:

/usr/etc/lpd 

Now if you type, ps -ef | grep lpd, you should see 2 lines returned to you.

As shown in “Printcap Examples” above, note that the printer could be accessed by three names; lp, sleepy and sleepyprinter. By default, the lpr command will look for the field, lp, in the /etc/printcap file. If this is not the first name in the name field, then you will need to do one of two things:

Whenever you enter the lpr command you must use the -P option to specify a printer name other than lp.

lpr -Psleepyprinter filename 

Alternately, in your shell you can set the environment variable PRINTER to the name of the printer you wish to use.

In the C shell:

setenv PRINTER sleepy 

In the Bourne shell:

PRINTER=sleepy; export PRINTER 

Now you can enter the command:

lpr filename 

After submitting your request to the printer, you can see if your job has made it to the print spooling queue by entering the following command:

lpq 

Your system should return something similar to:

lp is ready and printing 
Rank Owner Job Files Total Size 
1st nina 113 filename 851 bytes

Troubleshooting the BSD LPR Spooling System

If your print request does not make it to the queue, then:

  • Check for error messages.

  • Double-check the command that you entered.

  • Try submitting the /etc/group file to the queue.

The file you submitted may not be in the proper format for the printer to print your request.

If your print request makes it to the queue and never gets to the print server, then:

  • Do you have the print servers IP address and hostname in the /etc/hosts file?

  • Does the print server name match the name in the /etc/hosts file? Do they match the hostname of the print server?

  • Did you get this error message? Waiting for remote queue to be enabled.

This usually means that your hostname is not in the print servers /etc/hosts.equiv file. If your print request disappears from the queue, and doesn't print or prints incorrect information, then:

  1. Become root and enter the commands:

    /usr/etc/lpc stop lp (or your printername) 
    lpr /etc/group 
    cd /usr/spool/lpd (or your spool directory) 
    ls -l 
    

    Your system should return something similar to:

    -rw-rw---- 1 root lp 69 Aug 23 14:02 cfA117tls 
    -rw-rw---- 1 root lp 227 Aug 23 14:02 dfA117tls 
    -rwxr----- 1 root lp 0 Aug 23 14:01 lock 
    -rw-rw-r-- 1 root lp 25 Aug 23 14:46 status
    

  2. Check the contents of the control file with the following command:

    cat cfA117tls 
    

    Your system should return something similar to:

    Htls H the hostname that sent the print request 
    Proot P the person who sent the request 
    Jgroup J the jobname 
    Ctls C class/hostname 
    Lroot L the person who sent the request 
    fdfA117tls f name of the file to print 
    UdfA117tls U name of the file to remove after printing 
    

    N/etc/group N the original file name
    

  3. Check the copy of the print file.

    We recommend that you use the more(1) command just in case your test file is not as short as the /etc/group file. The df file should look exactly like the file you attempted to print. In this case the file dfA117tls should be exactly the same as the /etc/group file.

    more dfA117tls 
    

    The system should return something similar to:

    sys::0:root,bin,sys,adm 
    root::0:root 
    daemon::1:root,daemon 
    bin::2:root,bin,daemon 
    adm::3:root,adm,daemon 
    mail::4:root 
    uucp::5:uucp 
    rje::8:rje,shqer 
    lp::9: 
    nuucp::10:nuucp 
    user::20: 
    other::995: 
    demos:*:997: 
    guest:*:998:
    

Now that you have verified that the request is properly spooling on the local system, check the print server. First, you may need to contact the system administrator of the print server. You will need the root password, and once you enter the stop command on their system no one will see their print request print. It will just remain in the queue. Make sure that there are no requests in the queue that are currently printing. It would be ideal if there were no requests currently in the queue.

  1. On the print server log in as root and enter the command:

    /usr/etc/lpc stop lp 
    

  2. On the local system enter the command:

    /usr/etc/lpc start lp 
    

  3. On the print server, cd to the spool directory.

    If you do not know where the spool directory is, cat(1) or more(1) the /etc/printcap file and look at what is set in the sd: variable.

  4. On the print server (after step 6), enter the following command:

    ls -l 
    

    The print server should return something similar to:

    -rw-r----x 1 root 4 Aug 15 10:27 .seq 
    -rw-rw---- 1 root 69 Aug 23 14:02 cfA117tls.csd.sgi.com 
    -rw-rw---- 1 root 227 Aug 23 14:02 dfA117tls 
    -rwxr------ 1 root 0 Aug 23 14:01 lock 
    -rw-rw-r-- 1 root 25 Aug 23 14:46 status
    

  5. Check the contents of the control file.

    cat cfA117tls.csd.sgi.com 
    

    The print server should return something similar to:

    Htls H the hostname that sent the print request 
    Proot P the person who sent the request 
    Jgroup J the jobname 
    Ctls C class/hostname 
    Lroot L the person who sent the request 
    fdfA117tls f name of the file to print 
    UdfA117tls U name of the file to remove after printing
    N/etc/group N the original file name
    

  6. Examine the df* file by entering the following command:

    more dfA117tls 
    

    The system should return something similar to:

    sys::0:root,bin,sys,adm 
    root::0:root 
    daemon::1:root,daemon 
    bin::2:root,bin,daemon 
    adm::3:root,adm,daemon 
    mail::4:root 
    uucp::5:uucp 
    rje::8:rje,shqer 
    lp::9: 
    nuucp::10:nuucp 
    user::20:
    other::995: 
    demos:*:997: 
    guest:*:998:
    

    The df file should look exactly like the file you attempted to print. In this case the print servers dfA117tls file should be exactly the same as the dfA117tls file that was on your system.

  7. On the print server enter the following command:

    /usr/etc/lpc start lp 
    

    Your file should now print on the printer. It should look exactly like the output of the more command. If it doesn't then contact the System Administrator of the print server.