COHERENT manpages
This page displays the COHERENT manpage for controls [Data base for the lp print spooler].
List of available manpages
Index
controls -- System Administration Data base for the lp print spooler /usr/spool/mlp/controls The file /usr/spool/mlp/controls is the data base for the print spooler lp. The superuser root can modify this file, either with a text editor or (to a more limited extent) with the command lpadmin. The format of controls is simple. Every blank line is ignored. All text after the pound sign `#' is also ignored; you can use this feature to embed comments in the file. The rest of the file consists of commands, each of which has the format command=arguments. The following describes the commands that you can embed in controls: default=printer This command sets the default printer, that is, the printer on which jobs are printed when the user does not specify a printer on the lp command line. docopies=status This command controls how lp prints multiple copies. If it is set to on, then multiple copies are generated by invoking the printer's control script for each time; if it is set to off, then multiple copies are printed by telling the control script to do it. The difference in the two methods is that the former gives you more accurate information about the status of the job. If you wish to print many copies and you want to monitor the job's progress, then set docopies to on. feed=status The command localfeed tells lp whether to insert a formfeed character between printing jobs sent to printers other than local printers. Setting it to on tells lp to output a formfeed character; setting it to off (or deleting it) tells it not to do so. localfeed=status The command localfeed tells lp whether to insert a formfeed character between printing jobs sent to a local printer. (A local printer is one plugged into the auxiliary port of a terminal.) Setting it to on tells lp to output a formfeed character; setting it to off (or deleting it) tells it not to do so. logroll=hours This command sets the time, in hours, at which the log file log is renamed log.o and a fresh log file is begun. This is done so the log file does not grow without bounds. The default value is 168 hours (one week). longlife=hours Set, in hours, the ``life-expectancy'' of a file with a lifetime of L. The default is three days (72 hours). printer=name,device,script This command defines a printer. lp accesses a printer by its name; it cannot access a printer unless you name it in a printer command. name names the printer. You can name a printer anything you like, so long as it is one word. device names the device into which it is plugged. script names the file in directory /usr/spool/mlp/backend that tells how to massage the text being passed to the printer. You can write or modify each script in that directory, and name each script whatever you like. Note that one physical printer can have multiple names, each using a different script; and one script can be shared by multiple physical printers. The command printer = linenlq, /dev/lpt2, pannlq names a printer linelq that is plugged into port /dev/lpt2, and whose input is filtered through the contents of script /usr/spool/mlp/backend/pannlq. The command printer = linepr, /dev/lpt2, linepr names a printer linepr that is plugged into /dev/lpt2, and whose input is filtered through the contents of script /usr/spool/mlp/backend/linepr. Note that these examples both name the same physical device. They differ in the scripts they use to massage their input; this will be described in detail below. Finally, a printer can direct its output to any device, serial or parallel, even /dev/null. For example: printer=disk,/dev/null,disk As will be shown below, the script disk writes its output into a temporary file, so you can examine it without wasting a piece of paper. The format of a printer-control script is described below. You do not have to include a printer-control script in a printer command; if you do not include one, the printer daemon lpsched uses the command cat by default. shortlife=hours Set, in days, the ``life-expectancy'' of a file with a lifetime of S. The default is 48 hours (two days). templife=hours Set, in minutes, the ``life-expectancy'' of a file with a lifetime of T. The default is two hours. Printer Control Scripts A printer-control script massages the text being handed to a given printer. The printer daemon lpsched redirects the output of the script (and therefore, of every command within the script) to the device named on the appropriate printer command named in the file /usr/spool/mlp/controls. For example, consider the command printer = linenlq, /dev/lpt2, pannlq This command names a printer linenlq, declares that it is plugged into port /dev/lpq2, and requests that lpsched massage input to the printer through script /usr/spool/mlp/backend/pannlq. When lpsched processes a request that is directed to printer linelq, it pipes the text of the job into script pannlq, and redirects the output of pannlq to device /dev/lpt2. It is important to remember that a printer-control script is not restricted to a few commands that the spooler understands. Each is a true shell script that can use any or all COHERENT commands to process text. The limits of what a script can do are set only by your imagination. Consider the following examples. In the discussion, above, of the command printer, two scripts were mentioned: pannlq and linepr. Both send their output to the same physical printer, but they process the input text in different ways. The following gives the contents of linepr: # filter the input through pr pr # throw a page at the end echo "\f\c" This script filters its input through the COHERENT command pr, which paginates the text and puts a header on it. It then echoes a formfeed character, to force the printer to throw a blank page at the end of the job. As in other shell scripts, a pound sign `#' introduces a comment and blank lines are ignored. The following gives the contents of script pannlq: # turn on near-letter-quality printing echo "\021\033n" pr # turn off near-letter-quality printing echo "\021\033P" This script resembles the first, except that it includes commands to echo the magic strings that turn on and turn off near-letter-quality printing on this printer. This is one small example of the flexibility you can employ in devising a script As with other shell scripts, you can modify the behavior of a printer- control script by setting environmental variables. For example, consider the following variation on the script linepr: if [ $HEADER ]; then pr -h "$HEADER" else pr fi # throw a page at the end echo "\f\c" If you have exported the environmental variable HEADER, then this script prints it at the top of each page; otherwise, it prints the default header. You can use the same technique to do other work, such as force the printing of a banner page. The lp spooler reserves for its own use the environmental variables MLP_COPIES, MLP_FORMLEN, MLP_LIFE, MLP_PRIORITY, MLP_SPOOL. Your scripts can also use these variables. For more information on what each does, see its entry in the Lexicon. When lpsched uses a printer-control script, it passes it three arguments: respectively, the sequence number of the print job (which identifies the job uniquely); the name of the user; and the number of copies being printed. You can use this information to control the printing of output; for example, consider the following: for i in `from 1 to $3` do pr -h "User $2 - Copy $i of $3" done echo "\f\c" Note, too, that just as each physical printer can be accessed in different ways via different scripts, so too the same script can be used by multiple physical printers. If you had multiple Panasonic printers plugged into your system, you could use the above script with each of them to massage their input appropriately. One last example. As noted above, the output of a printer-control script can be directed to any device, not just a port. (It can also be redirected to non-existent ports, so be careful when you enter your print commands.) You can use this feature to redirect formatted text into files or other interesting places. Consider the following printer command: printer=disk,/dev/null,disk This creates a ``printer'' named disk. The text filtered through file disk is redirected to /dev/null. The contents of script disk show what this device is up to: tee /tmp/D$$ This script uses the COHERENT command tee to redirect its input both to the standard output (which in the case of printer disk is thrown away) and into a file in directory tmp. You can use this command to save input for further examination later. This discussion just scratches the surface of what you can do with the lp print spooler and its control scripts. For more information, see the Lexicon entries for printer and lp. See Also Administering COHERENT, lp, lpadmin, MLP_COPIES, MLP_FORMLEN, MLP_LIFE, MLP_PRIORITY, MLP_SPOOL, printer