|
|
Print Devices & Queues
To configure a local printer, a print and queue device need to be created.
- A print device is needed to connect the print driver to the physical port the printer is attached to. A printer is configured by using the smit makprt command.
- A queue (alias virtual printer) is a set of attributes that define a specific software view of a real printer. A virtual printer’s view refers only to the high-level data stream – ASCII or PostScript, that the printer understands. It does not include any information about how the printer hardware is attached or the protocol used for transferring data to or from the printer. Printer queues are configured by using the smit mkvirprt command.
DTR – flow control
DTR=YES or ON
- If the printer configuration has DTR set to YES, the DTR pin on the printer must be mapped to the DCD pin on the RS/6000.
- The print driver checks to see if DCD is high before data can be sent down to the printer port. If an attempt to print directly (ls > /dev/lp1) to a port that doesn’t have DTR mapped to DCD, the command will hang until DCD goes HIGH.
- If DTR is mapped to DCD but the printer is turned off, DTR and DCD are low. No transmission of data is generated by the driver until DCD goes high. DCD can only go high when the printer is turned on and the printer is in an online state.
- With the 128-port adapter, ALTPIN must be ENABLED via the /usr/lbin/tty/stty-cxma command.
DTR=NO or OFF
- If the printer configuration has DTR set to NO, the DCD pin on the RS/6000 is not monitored before data is sent down the printer port.
- When creating the proper pinouts for cabling to a printer, make sure that the CTS (pin 5) signal on the printer is pinned to the RTS signal on the RS/6000.
- The RS/6000 will not send data down the printer cable unless it believes that a device is powered on.
- If the RTS signal is low, no data will be sent to the printer cable and the following error message is shown: ksh:/dev/lp5: 0403-005 Cannot create the specified file.
- The printer will set CTS (pin 5) high, when it’s busy.
- If data is sent down the printer cable and nothing is printed, make sure that the DTR signal on the RS/6000 is connected to DSR on the printer. If the printer’s DSR signal is low, then some printers may not print the data it received from the host.
When configuring devices on the 8,16, and 64-port IBM async cards, remember that the lower the port number on that device, the higher the priority of that device being serviced. Therefore, make sure the devices that use more bandwidth or CPU cycles, are configured with the lower port numbers (0,1,2 vs 14,15,16).
Further, these adapters not only prioritize service by port on the adapter, they also prioritize by adapter. This means that every port on a higher-priority adapter will have their interrupts serviced before any port on a lower-priority adapter.
Spool directories
The following directories may need to be accessed to clean up aborted jobs:
- /var/spool/lpd/qdir : Accepts requests for print jobs
- /var/spool/lpd/stat : Status files for a print job. The backend communicates with the qdaemon through these files.
- /var/spool/lpd/spool : qdaemon requests are spooled here
The following directories are used to store virtual printer attributes:
- /var/spool/lpd/pio/burst : Stores header/trailer format page
- /var/spool/lpd/pio/predef : Default attributes
- /var/spool/lpd/pio/custom : ASCII virtual printer attributes
- /var/spool/lpd/pio/ddi : Digested virtual printer attributes
Remote Printing
To send print jobs to a remote print server, TCP/IP must be used. The flow of a print job is as follows…
- Job is initiated using lpr or enq
- The /etc/qdaemon on the local machine processes the job and passes the data to a the backend process /usr/lpd/rembak
- rembak transmits the job to the remote printer via TCP/IP
- On the remote server lpd, by monitoring port 515, receives and processes the job to the selected printer Multiple jobs submitted on a single command line to either a local or remote print queue is NOT supported. AIX is able to use remote queues with names longer than 7 characters in length. In order for this to work, you need to define the backend of the remote queue as follows:
backend = /usr/lpd/rembak -P <QueueName> -S <ServerName> -N
- The -P will work with queue names longer than 7 characters.
- The -N is needed to inhibit sending AIX-specific control information to a non-AIX remote host
- /usr/lib/lpd/aixshort indicates the remote server is another AIX machine.
- /usr/lib/lpd/aixlong indicates the remote server is another AIX machine. (For long-form output)
- /usr/lib/lpd/bsdshort indicates the remote server is BSD4.3 or Linux lpq printer queue
- /usr/lib/lpd/bsdlong indicates the remote server is BSD4.3 or Linux lpq printer queue (For long-form output)
cancel
Terminates one or more print jobs, even if the job is currently being printed.
Examples | What it does |
cancel 280 | Cancels the print job 280 |
cancel laser | Cancels all jobs associated with the queue laser if user is root or all jobs submitted to that queue from the user who issues the cancel command. |
chque
Changes the name of a printer queue in the /etc/qconfig file. Queue names can only be up to seven characters long.
Examples | What it does |
chque -q lp0 -n laser | Changes the print queue name from lp0 to laser |
chque -q lp0 -a discipline=sjn | Jobs submitted to printer queue named lp0 will now place short jobs at the start of the queue in preference to longer running jobs. The distinction between short and long jobs is the number of blocks of text that jobs consists of. This can be determined by reviewing the Blks field of the lpstat command. |
chquedev
Changes the name of the printer device associated with the printer queue in the /etc/qconfig file.
Flags:
- -d refers to the current name of the print device
- -n refers to the new name of the print device
- -q refers to the queue name associated with the print device
Example | What it does |
chquedev -dlp0 -qlaser -nlaser | Changes the name of print device from lp0 to laser for the queue laser |
chvirprt
Changes the virtual definition of a particular printer stream
Flags:
- -d refers to the current name of the print device
- -a refers to the attribute to change
- -q refers to the queue name associated with the print device
Example | What it does |
chvirprt -dlp1 -qlaser -a _q=1 | Changes the print quality attribute of the printer queue named laser from letter to draft mode. |
disable
Disable a printer queue
Examples | What it does |
disable laser | Brings the print queue laser off-line immediately. |
disable -c laser | The -c brings print queue laser off line without waiting for current job to finish printing. |
digest
Converts the ASCII form of the /etc/qconfig file into the binary version of the /etc/qconfig.bin file used by the qdaemon.
Every time a new virtual printer is added to the system, the /etc/qconfig file will get compiled by the qdaemon which updates this data file. If the date on the qconfig file is earlier than the date on the qconfig.bin file, the qconfig file will not be digested, even if it has just been modified.
Example | What it does |
/usr/lpd/digest /etc/qconfig /etc/qconfig.bin | Creates a new version of the /etc/qconfig.bin file |
enq
Administers the line printer subsystem
Examples | What it does |
enq sam* | Prints all the files starting with “sam” to the system printer |
enq -x 150 | Print job 150 is terminated immediately |
enq -X laser | All jobs on print queue laser will be terminated if you are the root user, else cancels all jobs submitted by that user |
enq -Plaser:lp0 sales.doc | Send the file sales.doc to the queue laser attached to the print device lp0 for printing |
enq -D -Plaser | Disables the queue laser after the current job has finished. qdaemon doesn’t send jobs to downed queues. Only applies to local queues. |
enq -G | qdaemon process is gracefully shutdown after all current running jobs have finished. This is the only clean way to bring the qdaemon process down. The kill command may cause problems, such as jobs hanging in the queue. If the qdaemon process is running under srcmstr, enq -G does not prevent qdaemon from being restarted automatically. You must use the chssys command (chssys -s qdaemon -O) to prevent the automatic restart of the qdaemon process. Only applies to local queues. |
enq -K -Plaser | Disables the queue laser and immediately terminates any job that is currently being printed. Print jobs remain in the queue and are rerun once the queue is re-enabled. Jobs currently being run are lost. Only applies to local queues. |
enq -U -Plaser | Enables the queue laser. Only applies to local queues. |
enable
Enable a printer queue
Example: enable laser
enscript
Takes a text file as input, converts it to PostScript format, and spools the file to a PostScript printer.
The ENSCRIPT environment variable can be used to specify PostScript defaults.
For example, ENSCRIPT=’-fTimes-Roman8′ sets the default body type size and font to 8 point Times Roman.
Examples | What it does |
enscript -dps feb3.notes | Prints the file feb3.notes to printer queue ps. The enscript command will translate all the ASCII text to PostScript and pass it off to the ps queue. |
enscript -r feb3.notes | Prints the feb3.notes file to the default printer |
lp
Sends requests to a printer. A queue’s state only goes to running if the queue device is actually a device file and can be opened for STDOUT. Only one job at a time can be submitted to a print queue.
Options | What it does |
-w | Writes a message on the requester’s terminal once the job has printed |
-m | Sends mail to the user who submitted the job once the job has printed |
-d | Name of the destination queue follows |
Examples | What it does |
lp -w /etc/motd | Prints the file /etc/motd to the default printer. |
lp -mdlaser /etc/motd | Sends the file /etc/motd to the laser queue for printing |
lpq
Examines the spooling area used by ‘lpd’ for printing files. Files are spooled to the /usr/spool/qdaemon directory until they have been successfully printed or canceled.
Example: lpq
lpr
Uses the spooling daemon (lpr) to queue and print files when those facilities become available.
lpr sends files to the system default printer or to the printer specified by the environment variable LPDEST. If the LPDEST variable has no value, the PRINTER variable is used. If this environmental variable is not set, then the system default printer is used.
If you are forced to kill the /usr/lpd/lpd daemon, remove the /etc/locks/lpd file before you start up the lpd process again. If you don’t, the error messages “lpd: errno = 17: Do not specify an existing file. lpd: (FATAL ERROR): 0781-196 lock file or duplicate daemon.” is generated:
The lpd daemon will not restart, until this lock file is removed. If the message pr:Server error: your host does not have line printer access or something similar to it is displayed after an lpr print request, then edit the /etc/hosts.lpd file and add the client node your making the print request from. You don’t have to restart the lpd daemon to reread this file.
Use the lpq command to inspect the status of a job.
Use the cancel command to delete a job.
Example | What it does |
lpr -s /oracle/marketdata.1992 | The -s option is used to link a file to the spooling directory, Rather than copying it, so that large files can be printed. |
lpstat
Displays printer queue status information. First printer listed by lpstat is your default queue. In other words, if no queue name is given when the LP command is executed, then the print job will be submitted to the default printer.
If the lpstat command hangs at a client machine, theres a good chance that the lpd daemon is not running on your print server.
- Execute the startsrc -s qdaemon command to start the lpd daemon.
- If this daemon fails to start, the lock file /etc/locks/lpd may be preventing this process from successfully starting. Delete this file and rerun startsrc -s qdaemon again.
Example | What it does |
lpstat | Displays print queue status |
lpstat -t | Displays Print queue status with more detail |
lpstat -plaser | Displays print queue status for the queue laser only |
lptest
Generates the line printer ripple test pattern
Example | What it does |
lptest 80 100 | pr -n | Prints 100 lines of 80 column test pattern to the default print queue – where each line is prefixed with a line number |
lsquedev
Lists the name of the printer queue attributes stored in the /etc/qconfig file
Example | What it does |
lsquedev -q ibm -d dlp0 | List the attributes for the queue ibm associated with the device lp0 |
lsvirprt
Displays the attributes for a virtual printer or printer queue
Examples | What it does |
lsvirprt -qlaser -dlp0 | Lists printer queue attributes and their values. The ‘q’ (queue) and ‘d’ (device) flags are required. |
lsvirprt -qlaser -dlp0 -a _K | Lists the condensed print attribute (_K) for the printer queue laser |
lssrc
List the status of a subsystem
Examples | What it does |
lssrc -g spooler | Display status of all the spooling daemons |
lssrc -a | List status of all subsystems |
Create another print queue to the same output device (multiple queues to one print device)
When you submit jobs to these queues remember the qdaemon redirects stdin,stdout, and stderr to the NULL device (/dev/null). If you wish to see any output from your job, you will need to redirect stdout and stderr of that job to a specific file or CRT.
Example | What it does |
mkquedev -d ksh1 -q bsh -a backend=/bin/ksh | Creates an additional printer queue to the ‘bshdev’ device named ‘ksh1’. |
pr
Paginate a file before printing it via the lp command. Separates files into pages with headers, footer margins and page numbers. It can also produce multicolumn output. Output of this command will default to the screen but is normally redirected to a file or line printer.
Example | What it does |
pr -l64 UserGuide.doc | lp | Paginates the UserGuide.doc to 64 lines per page and pipes the output to the system default printer. |
qpri
Set the priority of a print job. This command will only work with local print queues. If the job is ranked first in the queue, this command will only work once. If the first ranked job is changed a second time, the priority won’t change. Default priority is 15. Use the lpstat -t command to see print queue priority.
Examples | What it does |
qpri -#169 -a 4 | Lowers the priority of print job 169 to 4 from 15. If there are jobs with higher priority in the same print queue where job 169 resides, they will move ahead. |
qpri -#169 -a 20 | Raises the priority of print job 169 from 15 to 20. If there are jobs with higher priority in the same print queue where job 169 resides, they will move behind job 169. |
startsrc -s qdaemon
This command is used to start the spool daemon named qdaemon. By default, this daemon is started everytime the system reboots.
stopsrc -s qdaemon
This command Will stop the spool qdaemon. If the qdaemon is not running, all jobs submitted to the spooler will be queued. The job number for these print jobs will be marked ‘new’. Once the qdaemon is restarted those queued jobs will be given a job number.
Lock Files
Occasion you may get a message lpd: lock file or duplicate daemon.This can be caused if there is a problem with the lpd daemon.
When this happens
- Remove the file /etc/locks/lpd. This file should contain the Process ID (PID) for the currently running lpd daemon.
- Stop and start the print spooler.