Annotation of researchv10dc/vol2/lp/lp.ms, revision 1.1

1.1     ! root        1: .so ../ADM/mac
        !             2: .XX lp 603 "A Guide to the Lp Printer Spooler"
        !             3: .nr dP 1
        !             4: .nr dV 1.5p
        !             5: .ND
        !             6: .TL
        !             7: A Guide to the Lp
        !             8: Printer Spooler
        !             9: .AU
        !            10: P. Glick
        !            11: .AI
        !            12: AT&T Bell Laboratories
        !            13: Murray Hill, New Jersey 07974
        !            14: .AB
        !            15: .PP
        !            16: .I Lp
        !            17: is a collection of programs used to provide an easy-to-use
        !            18: interface for printing a variety of document types on a variety
        !            19: of printers.
        !            20: .I Lp
        !            21: is meant to be the glue that connects various document language
        !            22: translators and printer communication programs together so that
        !            23: the users may have a consistent view of printers.
        !            24: Most of the glue
        !            25: is shell script, which can be easily modified.
        !            26: The user need not
        !            27: specify options to get sensible output in most cases.
        !            28: .I Lp
        !            29: is described here
        !            30: so that others may make additions and changes.
        !            31: Only the shell scripts, or glue, are described here.
        !            32: .AE
        !            33: .2C
        !            34: .NH
        !            35: Introduction
        !            36: .PP
        !            37: .I Lp
        !            38: is used to format and print data on a variety of output devices.
        !            39: The need for
        !            40: .I lp
        !            41: was rooted in the inability of other printer spoolers to do simple
        !            42: tasks without a great deal of user specification of options.
        !            43: At the time
        !            44: .I lp
        !            45: was written, there were several printer
        !            46: languages, such as ImPress and P\s-2OST\s+2S\s-2CRIPT\s+2 and
        !            47: an internally developed printer that would accept
        !            48: .I troff
        !            49: output.
        !            50: A great deal of what underlies
        !            51: .I lp
        !            52: is taken from other systems.
        !            53: The important features of this system are that most of the programs
        !            54: are easily modified shell scripts and the user need not
        !            55: fuss with the large amount of underlying software developed by others.
        !            56: .I Lp
        !            57: runs under several flavors of the
        !            58: .UX
        !            59: Operating System
        !            60: and uses both Datakit and Ethernet to transport data between machines.
        !            61: .PP
        !            62: Text, graphics, and formatted text files are appropriately processed and
        !            63: placed into a spool directory from which they are taken to be printed.
        !            64: Additional functions include checking the status of a printer queue
        !            65: and removing jobs from the printer queue.
        !            66: .PP
        !            67: All files associated with
        !            68: .I lp
        !            69: reside in the spool directory
        !            70: (usually \f(CW/usr/spool/lp\fP),
        !            71: except for the
        !            72: .I lp
        !            73: command itself which usually resides in \f(CW/usr/bin\fP.
        !            74: The spool directory is defined within the
        !            75: .I lp
        !            76: command by the shell variable \f(CWLPSPOOL\fP.
        !            77: In the remainder of this document, file names may be specified
        !            78: with this shell variable as their root.
        !            79: .NH
        !            80: Usage
        !            81: .PP
        !            82: .I Lp
        !            83: requires that an output device be specified
        !            84: before it will process input.
        !            85: This can be done in any of three ways described here in increasing order
        !            86: of precedence.
        !            87: .SP .5
        !            88: .TA 5
        !            89: \(em   The file
        !            90: .CW $LPSPOOL/defdevice
        !            91: may contain the name of a default output device.
        !            92: This may not be practical for environments where
        !            93: there are many printers
        !            94: and the default device need not be specified.
        !            95: .SP .5
        !            96: \(em   The user's environment variable
        !            97: .CW LPDEST
        !            98: may be set to the name of the device to be used.
        !            99: This is often a more practical solution when there are several printers
        !           100: available.
        !           101: This overrides a
        !           102: .CW defdevice
        !           103: specification.
        !           104: .SP .5
        !           105: \(em   The
        !           106: .CW "-d printer"
        !           107: option to the
        !           108: .I lp
        !           109: command specifies
        !           110: .I printer
        !           111: as the device to which output should be directed, overriding the
        !           112: previous two specifications.
        !           113: .PP
        !           114: If
        !           115: .I printer
        !           116: is
        !           117: .CW ? ,
        !           118: a list of printers and other information in the
        !           119: .CW devices
        !           120: file is printed, as shown in Figure 1.
        !           121: .1C
        !           122: .KF
        !           123: .P1 20n
        !           124: $ lp -d"?"
        !           125: device   location  host             class
        !           126: dp       2C-504    nj/astro/coma    post300+reverse
        !           127: imagen1  st8_fl1   nj/phone/sid     imagen/2.2+reverse
        !           128: po       2C-579    nj/astro/pipe    dumb
        !           129: ps2c364  2C-364    nj/phone/sid     post300+reverse
        !           130: ps71     2D-154    nj/phone/gauss   post300+reverse
        !           131: ps83     st8_fl3   nj/phone/gauss   post300+reverse
        !           132: psu      2C-501    nj/astro/coma    post300+reverse
        !           133:      .
        !           134:      .
        !           135:      .
        !           136: $
        !           137: .P2
        !           138: .ce
        !           139: \fBFigure 1.\fR  Sample listing of installed printers.
        !           140: .KE
        !           141: .SP
        !           142: .2C
        !           143: .PP
        !           144: Normal
        !           145: .I troff
        !           146: output can be printed with
        !           147: .P1
        !           148: $ troff -ms lp.ms | lp -ddp
        !           149: .P2
        !           150: .NE 3
        !           151: LaTex (and analogously Tex) documents are printed in two steps:
        !           152: .P1
        !           153: $ latex lp.tex
        !           154:      .
        !           155:      .
        !           156: $ lp -dpsu lp.dvi
        !           157:      .
        !           158:      .
        !           159: $
        !           160: .P2
        !           161: LaTeX
        !           162: produces a `.dvi' file and
        !           163: does not permit the use of a pipe
        !           164: connection to the standard input of
        !           165: .I lp .
        !           166: In both these cases I have explicitly specified a destination
        !           167: because my
        !           168: .CW LPDEST
        !           169: variable is set to a printer near my office, which I use infrequently.
        !           170: Although this doesn't make a great deal of sense, it is useful for
        !           171: the purpose of these examples.
        !           172: .PP
        !           173: To look at the status and queue of a device:
        !           174: .P1 0
        !           175: $ lp -dpsu -q
        !           176: status:
        !           177: %%[ status: idle ]%%
        !           178: sending file psu/29436.1
        !           179: %%[ status: busy; source: serial 25 ]%%
        !           180: 
        !           181: queue on nj/astro/coma:
        !           182: job            user    try     size
        !           183: gauss29436.1   pg      0       17454
        !           184: coma17565.1    ches    1       49995
        !           185: $
        !           186: .P2
        !           187: This command prints the status and queue on the local
        !           188: and remote hosts.
        !           189: The format of the status and queue printout is up to the administrator.
        !           190: .PP
        !           191: The job started above can be killed as follows
        !           192: (where the output is too long for the column, it has been folded at the \*(cr):
        !           193: .P1 0
        !           194: $ lp -dpsu -k gauss29436.1
        !           195: gauss29436.1 removed from psu queue\*(cr
        !           196: on nj/astro/coma
        !           197: .P2
        !           198: If you wish to kill a job on the queue but the job has begun to print,
        !           199: you then have to turn the printer off and on to kill the currently
        !           200: printing job.
        !           201: This may be fixed someday.
        !           202: .NH
        !           203: Options
        !           204: .PP
        !           205: There are options available to modify the way in which a job is handled.
        !           206: It is the job of the
        !           207: .I lp
        !           208: programs to convert the option settings so they can be used by each of the
        !           209: different translation and interface programs.
        !           210: Not all options are applicable to all printer environments.
        !           211: Table 1 lists the standard
        !           212: .I lp
        !           213: options, the shell variable settings and description of the options.
        !           214: .1C
        !           215: .KF
        !           216: .SP
        !           217: .TS
        !           218: center;
        !           219: c | c s s | c
        !           220: c | c c c | c
        !           221: lfCWw(.7i)| lfCWw(.6i) cfCWw(.4i) cfCWw(.6i)| lw(2.8i).
        !           222: =
        !           223: option shell variable  action
        !           224: \^     name    default set     \^
        !           225: _
        !           226: -D     DEBUG   N       -D      turn on debugging mode.
        !           227: -H     NOHEADER        N       1       suppress header page.
        !           228: -L     LAND    N       1       make long page dimension horizontal.
        !           229: -M \fImach\fP  LPMACHID        N       \fImach\fP      set the source machine name.
        !           230: -Q     QONLY   N       1       do not execute daemon; for debugging purposes.
        !           231: -c \fIn\fP     COPIES  N       \fIn\fP number of copies to be printed.
        !           232: -d \fIprinter\fP       LPDEST  U       \fIprinter\fP   set job destination; override other settings.
        !           233: -f \fIfont.pt\fP       FONT    N       \fIfont\fP      set font style and point size for printing.
        !           234:        POINT   N       \fIpt\fP
        !           235: -i \fIn\fP     IBIN    N       \fIn\fP T{
        !           236: select alternate paper tray.
        !           237: The argument given is dependent on the printer type,
        !           238: although some effort is made in the process files to make `2'
        !           239: an acceptable argument.
        !           240: T}
        !           241: -k     KILLFLAG        0       1       T{
        !           242: take non-option arguments as job numbers to be removed from queue.
        !           243: T}
        !           244: -l \fIn\fP     LINES   N       \fIn\fP T{
        !           245: for printed data, the number of lines per logical page.
        !           246: T}
        !           247: -m \fIf\fP     MAG     N       \fIf\fP T{
        !           248: magnify the image by a factor \fIf\fP.
        !           249: The factor should be a positive real number.
        !           250: T}
        !           251: -n \fIn\fP     NPAG    N       \fIn\fP T{
        !           252: put \fIn\fP logical pages on a single physical page.
        !           253: A simple algorithm is used to pack the pages.
        !           254: T}
        !           255: -o \fIlist\fP  OLIST   N       \fIlist\fP      T{
        !           256: print only those pages specified in the list.
        !           257: The list may be a sequence of numbers or ranges separated by commas.
        !           258: A range is a pair of numbers separated by a hyphen.
        !           259: T}
        !           260: -p \fIproc\fP  LPPROC  L       \fIproc\fP      T{
        !           261: use the preprocessor \fIproc\fP instead of the preprocessor given
        !           262: in the
        !           263: .CW devices
        !           264: file for this printer.
        !           265: T}
        !           266: -q     LPQ     N       1       T{
        !           267: print the status and queue.
        !           268: T}
        !           269: -r     REVERSE L       -       T{
        !           270: this toggles the
        !           271: .CW REVERSE
        !           272: flag changing whether or not page reversal should occur in preprocessing.
        !           273: Page reversal is needed if a printer delivers pages face up.
        !           274: The keyword
        !           275: .CW reverse
        !           276: can be placed in the
        !           277: .I lpclass
        !           278: field of the
        !           279: .CW devices
        !           280: file.
        !           281: If a document has already been processed this flag has no effect.
        !           282: T}
        !           283: -u \fIuser\fP  LPUSERID        U       \fIuser\fP      T{
        !           284: change the user id that appears on the cover page to \fIuser\fP.
        !           285: T}
        !           286: -x \fIoffset\fP        XOFF    N       \fIoffset\fP    T{
        !           287: move the image \fIoffset\fP inches to the right.
        !           288: A negative \fIoffset\fP will move the image to the left.
        !           289: The \fIoffset\fP may be any reasonable real number.
        !           290: T}
        !           291: -y \fIoffset\fP        YOFF    N       \fIoffset\fP    T{
        !           292: same as for \f(CW-x\fP except a positive offset will move the image down.
        !           293: T}
        !           294: _
        !           295: .T&
        !           296: l l cp-2 lp-2 s
        !           297: l l cfCWp-2 lp-2 s.
        !           298: .vs -2p
        !           299:                default setting definition
        !           300:                N       set to the null string (``'') initially in \fIlp\fP.
        !           301:                L       set from printer entry in \f(CWdevices\fP file.
        !           302:                U       set from the users environment.
        !           303: .vs +2p
        !           304: .TE
        !           305: .SP
        !           306: .ce
        !           307: \fBTable 1. \fILp\fR Option List
        !           308: .SP 4
        !           309: .KE
        !           310: .2C    
        !           311: .NH
        !           312: .CW devices
        !           313: file
        !           314: .PP
        !           315: The
        !           316: .CW devices
        !           317: file is found in the spool directory.
        !           318: Each line in the file is composed of 12 fields which describe the attributes
        !           319: of the printer and how it should be serviced.
        !           320: The following list gives the shell variable set, and a description of
        !           321: each of the attributes.
        !           322: .IP "\f(CWLPDEST\fP "
        !           323: is the name of the device as given to
        !           324: .I lp
        !           325: with the
        !           326: .CW -d
        !           327: option
        !           328: or as specified by the users shell environment variable
        !           329: .CW LPDEST
        !           330: or as specified by
        !           331: the file
        !           332: .CW $LPSPOOL/defdevice .
        !           333: This name is used in creating directories and log files that are associated with
        !           334: the printers operation.
        !           335: .IP "\f(CWLOC\fP "
        !           336: is only used to describe where the printer is located.
        !           337: .IP "\f(CWDEST_HOST\fP "
        !           338: is the host from which the files are printed.
        !           339: Files may be spooled on other machines before being transferred to the
        !           340: destination host.
        !           341: .IP "\f(CWOUT_DEV\fP "
        !           342: is the physical device name or network address needed by the printer daemon
        !           343: to connect to the printer.*
        !           344: .FS
        !           345: * This field depends on the requirements of the daemon and may contain a `\(en'
        !           346: if not required.
        !           347: .FE
        !           348: .IP "\f(CWSPEED\fP "
        !           349: is the baud rate setting for the port.*
        !           350: .IP "\f(CWLPCLASS\fP "
        !           351: is used to distinguish minor printer differences.
        !           352: For example, the keyword `reversal' is used by some of the preprocessors
        !           353: to reverse the order the pages are printed to accommodate different output
        !           354: trays (either face up or face down).
        !           355: .IP "\f(CWLPPROC\fP "
        !           356: specifies the default preprocessor to be used to convert input to a format
        !           357: which will be accepted by the device.
        !           358: The preprocessor is invoked by the spooler.
        !           359: .IP "\f(CWSPOOLER\fP "
        !           360: is the process used to invoke the preprocessor and its output in the local
        !           361: spool directory.
        !           362: .IP "\f(CWSTAT\fP "
        !           363: prints the status of the device (whatever that means!) and the list of jobs
        !           364: waiting on the queue for this device.
        !           365: The status information depends on what is available from the printer
        !           366: and interface software.
        !           367: The queue information has been changed several times to show information
        !           368: useful in tracking down problems.
        !           369: The scheduler is used to show the jobs in the order
        !           370: in which they will be printed.
        !           371: .IP "\f(CWKILL\fP "
        !           372: removes jobs from the queue.
        !           373: The jobs to be removed are given as arguments to the
        !           374: .I lp
        !           375: command.
        !           376: When possible, it should also abort the currently running job
        !           377: if it has been killed.
        !           378: .IP "\f(CWDAEMON\fP "
        !           379: is a process that is meant to run asynchronously to remove
        !           380: jobs from the queue.
        !           381: Jobs may either be passed on to another host or sent to the
        !           382: printing device.
        !           383: .I Lp
        !           384: always tries to start a daemon process when one is specified.
        !           385: .IP "\f(CWSCHED\fP "
        !           386: is used to present the job names to the daemon and stat programs
        !           387: in some order, e.g. first-in-first-out, smallest first.
        !           388: .NH
        !           389: Support programs
        !           390: .PP
        !           391: The following sections describe the basic function of the programs
        !           392: that are found in the subdirectories of
        !           393: .CW LPSPOOL .
        !           394: The programs in a specific directory vary the
        !           395: type of output device or networks that have to be dealt with or some
        !           396: special set of user requirements.
        !           397: .NH 2
        !           398: .CW process
        !           399: Files
        !           400: .PP
        !           401: The
        !           402: .CW generic
        !           403: preprocessor
        !           404: is the default preprocessor for most printers.
        !           405: It uses the
        !           406: .I file (1)
        !           407: command to determine the format of the input file.
        !           408: The appropriate preprocessor is then selected to transform the
        !           409: file to a format suitable for the printer.
        !           410: .PP
        !           411: Table 2 shows the names of programs that convert input formats (first column),
        !           412: to output formats (top row).
        !           413: .1C
        !           414: .KF
        !           415: .TS
        !           416: center box;
        !           417: c || c | c | c
        !           418: c || cI | cI | cI.
        !           419:        P\s-2OST\s+2S\s-2CRIPT\s+2      Impress T{
        !           420: Canon
        !           421: .br
        !           422: (obsolete)
        !           423: T}
        !           424: =
        !           425: text, listings ppost   daisimag        can
        !           426: _
        !           427: troff output   dpost   dimp    dcan
        !           428: _
        !           429: Latex output (.dvi files)      dvipost dviimp  \(em
        !           430: _
        !           431: bitmaps [see \fIbitfile\fR(9.5)]       bpost   bimp    bcan
        !           432: _
        !           433: Tektronix graphics     tpost   tekimag tcan
        !           434: .TE
        !           435: .ce
        !           436: \fBTable 2.\fP
        !           437: .SP 2
        !           438: .KE
        !           439: .2C
        !           440: .PP
        !           441: There are also several interface routines here used to send
        !           442: files to, e.g. the color P\s-2OST\s+2S\s-2CRIPT\s+2 printer
        !           443: and the
        !           444: .SM LINOTRONICS
        !           445: P\s-2OST\s+2S\s-2CRIPT\s+2 phototypesetter.
        !           446: .NH 2
        !           447: .CW spool
        !           448: Files
        !           449: .PP
        !           450: The generic spooler is responsible for executing the preprocessor
        !           451: and directing its output to a file in the printers queue.
        !           452: An additional file is created containing information such as the system name,
        !           453: user id, job number, and number of times this job was attempted.
        !           454: The format of the id file has been changed from time to time
        !           455: to assist with debugging.
        !           456: .PP
        !           457: Certain printer handling programs do not require separate preprocessing
        !           458: and spooling.
        !           459: For such circumstances a
        !           460: .CW nospool
        !           461: spooler is available which simply executes the preprocessing program.
        !           462: The processing and spooling functions are assumed by this program.
        !           463: .NH 2
        !           464: .CW stat
        !           465: Files
        !           466: .PP
        !           467: The function of these files is to present status information about the
        !           468: printer and its queue.
        !           469: Because
        !           470: .I lp
        !           471: often works over a network connection, the stat function is designed
        !           472: to return information about the local queue as well as the remote queue.
        !           473: The scheduler is used to print the queue in the order in which the jobs
        !           474: will be executed.
        !           475: The various commands in the
        !           476: .CW stat
        !           477: directory differ only in the means in which they access different networks.
        !           478: .NH 2
        !           479: .CW kill
        !           480: Files
        !           481: .PP
        !           482: These programs receive command line arguments passed to them by
        !           483: .I lp
        !           484: and remove the job and id files which match the arguments
        !           485: from the particular queue.
        !           486: .NH 2
        !           487: .CW daemon
        !           488: Files
        !           489: .PP
        !           490: The
        !           491: daemon is the last program invoked by
        !           492: .I lp
        !           493: if the \f(CW-Q\fP option has not been given.
        !           494: The daemon process is executed asynchronously
        !           495: with its standard output and standard error appended to
        !           496: the printer log file.
        !           497: The log file is described in a subsequent section.
        !           498: Because the daemon runs asynchronously, it must
        !           499: catch signals that could cause it to terminate abnormally.
        !           500: The daemon first checks to see that it is the only one running
        !           501: by using the
        !           502: .CW LOCK
        !           503: program found in the daemon directory.
        !           504: The daemon then executes the scheduler to obtain the name of the
        !           505: next job on the queue.
        !           506: .PP
        !           507: The processing of jobs may entail transfer to another host
        !           508: or transmission to a printer.
        !           509: The details of this are specific to the individual daemons.
        !           510: If a job is processed without error, it is removed from the queue.
        !           511: If a job does not succeed, the associated files may be
        !           512: moved to a printer specific directory in
        !           513: \f(CW$LPSPOOL/prob\fP.
        !           514: In either case, the daemon can make an entry in the printer's
        !           515: log file.
        !           516: Before exiting, the daemon should clean up lock files by calling
        !           517: .SM \fIUNLOCK\fP .
        !           518: .PP
        !           519: The
        !           520: .SM \fILOCK\fP
        !           521: command creates a
        !           522: .CW LOCK
        !           523: file in the printer's queue and makes a link to a file called
        !           524: .CW LINK .
        !           525: The locking mechanism could be improved but there have been very
        !           526: few failures.
        !           527: .PP
        !           528: Several non-standard daemon programs have been designed
        !           529: to suite various requirements and whims.
        !           530: One such program announces job completion and empty paper trays
        !           531: by causing icons to appear in peoples'
        !           532: .I vismon (9.1)
        !           533: window.
        !           534: Another, using a voice synthesizer, makes verbal announcements.
        !           535: Other daemons may be designed to taste.
        !           536: .NH 2
        !           537: .CW sched
        !           538: Files
        !           539: .PP
        !           540: The scheduler must decide which job files should be executed and
        !           541: in what order.
        !           542: The most commonly used scheduler algorithm is FIFO, which looks like this:
        !           543: .P1 0
        !           544: ls -tr $* | sed -n -e 's/.*  *//' \e
        !           545:   -e '/^[0-9][0-9]*\.[1-9][0-9]*$/p'
        !           546: .P2
        !           547: This lists all the job files in this printer's queue in modification
        !           548: time order.
        !           549: Jobs entering the queue have a dot (.) prepended to their name
        !           550: to keep the scheduler from selecting them before they are complete.
        !           551: .NH
        !           552: When Thing Go Wrong
        !           553: .NH 2
        !           554: .CW log
        !           555: Files
        !           556: .PP
        !           557: The log files for a particular
        !           558: .I printer
        !           559: appear in a subdirectory of the spool directory
        !           560: .CW log/printer .
        !           561: There are currently two types of log files that appear
        !           562: here.
        !           563: One is for the daemon to log errors and successful completions
        !           564: of jobs.
        !           565: These are named
        !           566: .I printer.day
        !           567: where day is the three letter abbreviation for the day of the week.
        !           568: These are overwritten once a week to avoid the need for regular
        !           569: cleanup.
        !           570: The other type of log file contains the status of the printer and
        !           571: is written by the program that communicates with the printer itself.
        !           572: These are named
        !           573: .I printer.st .
        !           574: These are overwritten with each new job and are saved in the
        !           575: .I prob
        !           576: directory along with the job under circumstances described below.
        !           577: When a printer does not appear to be functioning these files are the
        !           578: place to look first.
        !           579: .NH 2
        !           580: .I prob
        !           581: Files
        !           582: .PP
        !           583: When a job fails to produce output,
        !           584: the log files should be checked for any obvious problems.
        !           585: If none can be found, a directory with full read and write permissions
        !           586: should be created with the name of the printer in the
        !           587: .CW $LPSPOOL/prob
        !           588: directory.
        !           589: Subsequent failure of that job will cause the daemon to leave a
        !           590: copy of the job and the printer communication log in the
        !           591: printers
        !           592: .I prob
        !           593: directory.
        !           594: It is not uncommon for a printer to enter states from which
        !           595: it cannot be rescued except by manually resetting it.
        !           596: .NH 2
        !           597: Repairing Stuck Daemons
        !           598: .PP
        !           599: There are two failure conditions that occur which are not handled
        !           600: by the daemons.
        !           601: .PP
        !           602: One problem can only be described as the printer entering a
        !           603: comatose state.
        !           604: The printer does not respond to any messages sent to it.
        !           605: The daemon should recover from the reset and an error message
        !           606: will appear in the log files.
        !           607: .PP
        !           608: The second problem is more insidious.
        !           609: When communicating with a printer directly connected to Datakit,
        !           610: or when transferring files between a remote and local host over
        !           611: Datakit,
        !           612: the Datakit channel can become
        !           613: frozen and the I/O process hangs.
        !           614: The I/O process must be killed and another must be allowed to start
        !           615: up.
        !           616: The ultimate cure for this problem lies in another domain.
        !           617: .......
        !           618: .NH
        !           619: Interprocessor Communication
        !           620: .PP
        !           621: When a Tenth Edition
        !           622: .UX
        !           623: System is first being set up as a printer host,
        !           624: two files need to be edited.
        !           625: (Sample lines are shown in Figure 2.)
        !           626: .CW /usr/ipc/lib/serv.local
        !           627: needs to define the
        !           628: .I lp
        !           629: service.
        !           630: Authorization lines need to be added to
        !           631: .CW /usr/ipc/lib/auth.local ,
        !           632: permitting certain machines
        !           633: (in this case any machine on the
        !           634: .CW alpha
        !           635: or
        !           636: .CW beta
        !           637: Datakit nodes) to use the
        !           638: .I lp
        !           639: service as the user
        !           640: .CW daemon
        !           641: on this machine.
        !           642: The function of all these lines is explained in more detail in
        !           643: |reference(latest ipc presotto).
        !           644: .1C
        !           645: .KF
        !           646: .P1 10n
        !           647: /usr/ipc/lib/serv.local:
        !           648: .sp .3
        !           649: #service        actions
        !           650: lp              v9auth+args+cmd(/usr/bin/lp)
        !           651: 
        !           652: /usr/ipc/lib/auth.local:
        !           653: .sp .3
        !           654: #service       remote-hosts            rem-uid  local-uid
        !           655: lp             dk!nj/(alpha|beta)/.*   .*       daemon
        !           656: .P2
        !           657: .SP
        !           658: .ce
        !           659: \fBFigure 2.\fR  IPC configuration lines
        !           660: .KE
        !           661: .2C
        !           662: .PP
        !           663: The use of
        !           664: .I lp
        !           665: over Ethernet
        !           666: is either more complicated or more restricted in the way
        !           667: .I lp
        !           668: can be used.
        !           669: Because
        !           670: .I lp
        !           671: does not run with special setuid permissions, users must have
        !           672: permission to execute the command remotely.
        !           673: Otherwise, a special program
        !           674: would have to be written to handle the I/O setup for the
        !           675: .I lp
        !           676: program.
        !           677: .NH
        !           678: Acknowledgements
        !           679: .PP
        !           680: Special thanks to Rich Drechsler for supplying and maintaining all
        !           681: the P\s-2OST\s+2S\s-2CRIPT\s+2 translation and interface programs,
        !           682: without which
        !           683: .I lp
        !           684: would be an empty shell.
        !           685: Howard Trickey provided the
        !           686: T\s-2E\s+2X
        !           687: to P\s-2OST\s+2S\s-2CRIPT\s+2
        !           688: translation program.
        !           689: .NH
        !           690: References
        !           691: .LP
        !           692: |reference_placement

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.