# NAME # printcap - printer capability data base # # This file is for LPRng; LPRng finds this file mentioned in /etc/lpd.conf . # Make sure you have a correct /etc/lpd.conf file; you may still want to # copy/symlink this to /etc/printcap for other utilities, like Samba. ##### BUG ALERT # If we use 'lpq -a' or 'lpq -Pall' then we get things like # Host 'localhost' - cannot open connection to `aolw@localhost' - Connection refused # even though 'lpq -Paolw' knows to connect to rome instead. # It does not help if we have # all:all=aolw,p6lw,...: # defined; but we can use 'lpq -Pall@rome'. ##### BUG ALERT ##### BUG ALERT # Cannot use the tc= keyword, causes lp= setting to be lost... # ... because tc entries are processed AFTER others... why not before?? ##### BUG ALERT # nice-defaults: # :cf=: # :df=: # :gf=: # :nf=: # :rf=: # :tf=: # :vf=: # :control_filter=: # :direct_read@: # :fx=f: # :lpr_bounce@: # :of=: # :pl#66: # :pr=/usr/bin/pr: # :pw#132: # :translate_format=: # :xt@: # :sh: # :af=: # :as=: # :ae=: # :ar@: # :la@: # :ac=: # :ah@: # :bk@: # :bkf@: # :bqfilter: # :fd: # :lf=/usr/adm/lperr: # :longnumber@: # :mc#1: # :mi=100000: # :ml#300: # :mx#1000: # :ps=status: # :nw@: # :qq: # :sc: # :use_identifier: # :use_shorthost: # :fix_bad_job: # :fo@: # :fq@: # # Use ld (leader string) for CPI settings ?? # :ld=: # :lk@: # :nb#0: # :retry_econnrefused: # :retry_nolink: # :rs#300: # :rt#0: # :rw: # :save_on_error@: # :save_when_done@: # :send_failure_action=abort: # :sf: # :socket_linger#10: # # Use tr for formfeed when queue empty? # :tr=: # :forward_auth=: # :force_localhost@: # :use_auth=: # ----- #aolw|aolw-1|aolw-2|aolw-s|aolw-x|aolw-1-x|aolw-2-x|aolw-s-x|aolw-m: # :cm=MailRoom HP LaserJet (rm 728): # :sd=/var/spool/LPRng/aolw: # :lp=:rm=rome:rp=qaolw: #qaolw: # :cm=MailRoom HP LaserJet (rm 728) (via rome, aolw): # :sd=/var/spool/LPRng/qaolw: # :server:oh=rome,rome.maths.usyd.edu.au: # :lp=/dev/psaolw: # :sh:direct_read: # :if=/usr/sms/share/LPRng/etc/ifilter: ## Used to have ## :lp=qaolw@rome:bq=raw@aolw: ## while qaolw was a bounce queue to the lpd running in the JetDirect card r7lw|r7lw-1|r7lw-2|r7lw-s|r7lw-x|r7lw-1-x|r7lw-2-x|r7lw-s-x|r7lw-m|r7lw-u|aolw|aolw-1|aolw-2|aolw-s|aolw-x|aolw-1-x|aolw-2-x|aolw-s-x|aolw-m: :cm=MailRoom Ricoh MP7500 (rm 728): :sd=/var/spool/LPRng/r7lw: :lp=:rm=rome:rp=qr7lw: qr7lw: :cm=MailRoom Ricoh MP7500 (rm 728) (via rome, r7lw): :sd=/var/spool/LPRng/qr7lw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psr7lw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: #fylw|fylw-1|fylw-2|fylw-s|fylw-m: # :cm=1stYrOff HP LaserJet (restricted): # :sd=/var/spool/LPRng/fylw: # :lp=:rm=rome:rp=qfylw: #qfylw: # :cm=1stYrOff HP LaserJet (restricted) (via rome, fylw): # :sd=/var/spool/LPRng/qfylw: # :server:oh=rome,rome.maths.usyd.edu.au: # :lp=/dev/psfylw: # :sh:direct_read: # :if=/usr/sms/share/LPRng/etc/ifilter: lklw|lklw-1|lklw-2|lklw-s|lklw-x|lklw-1-x|lklw-2-x|lklw-s-x|lklw-m|fylw|fylw-1|fylw-2|fylw-s|fylw-m: :cm=Lucy Kyocera KM-4050 (rm 520, restricted): :sd=/var/spool/LPRng/lklw: :lp=:rm=rome:rp=qlklw: qlklw: :cm=Lucy Kyocera KM-4050 (rm 520, restricted) (via rome, lklw): :sd=/var/spool/LPRng/qlklw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/pslklw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: #brlw|brlw-1|brlw-2|brlw-s|brlw-m: # :cm=5th Floor HP LaserJet (rm 533): # :sd=/var/spool/LPRng/brlw: # :lp=:rm=rome:rp=qbrlw: #qbrlw: # :cm=5th Floor HP LaserJet (rm 533) (via rome, brlw): # :sd=/var/spool/LPRng/qbrlw: # :server:oh=rome,rome.maths.usyd.edu.au: # :lp=/dev/psbrlw: # :sh:direct_read: # :if=/usr/sms/share/LPRng/etc/ifilter: pglw|pglw-1|pglw-2|pglw-s|pglw-m: :cm=PostGrad HP printer/scanner (rm 807): :sd=/var/spool/LPRng/pglw: :lp=:rm=rome:rp=qpglw: qpglw: :cm=PostGrad HP printer/scanner (rm 807) (via rome, pglw): :sd=/var/spool/LPRng/qpglw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/pspglw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: r5lw|r5lw-1|r5lw-2|r5lw-s|r5lw-x|r5lw-1-x|r5lw-2-x|r5lw-s-x|r5lw-m|f5lw|f5lw-1|f5lw-2|f5lw-s|f5lw-m: :cm=5th Floor Ricoh MP6000 (rm 533): :sd=/var/spool/LPRng/r5lw: :lp=:rm=rome:rp=qr5lw: qr5lw: :cm=5th Floor Ricoh MP6000 (rm 533) (via rome, r5lw): :sd=/var/spool/LPRng/qr5lw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psr5lw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: otlw|otlw-1|otlw-2|otlw-s|otlw-m: :cm=Admin HP LaserJet (restricted): :sd=/var/spool/LPRng/otlw: :lp=:rm=rome:rp=qotlw: qotlw: :cm=Admin HP LaserJet (restricted, rm 524) (via rome, otlw): :sd=/var/spool/LPRng/qotlw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psotlw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: solw|solw-1|solw-2|solw-s|solw-m: :cm=Admin HP LaserJet (restricted): :sd=/var/spool/LPRng/solw: :lp=:rm=rome:rp=qsolw: qsolw: :cm=Admin HP LaserJet (restricted, rm 531) (via rome, solw): :sd=/var/spool/LPRng/qsolw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/pssolw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: rzlw|rzlw-1|rzlw-2|rzlw-s|rzlw-m: :cm=Admin HP LaserJet (restricted): :sd=/var/spool/LPRng/rzlw: :lp=:rm=rome:rp=qrzlw: qrzlw: :cm=Ruibin Zhang HP LaserJet (rm 722) (via rome, rzlw): :sd=/var/spool/LPRng/qrzlw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psrzlw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: djlw|djlw-1|djlw-2|djlw-s|djlw-m|salw: :cm=Admin HP LaserJet (restricted, rm 532): :sd=/var/spool/LPRng/djlw: :lp=:rm=rome:rp=qdjlw: qdjlw|qsalw: :cm=Admin HP LaserJet (restricted, rm 532) (via rome, djlw): :sd=/var/spool/LPRng/qdjlw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psdjlw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: mslw|mslw-1|mslw-2|mslw-s|mslw-m: :cm=Math Stats HP LaserJet (rm 826): :sd=/var/spool/LPRng/mslw: :lp=:rm=rome:rp=qmslw: qmslw: :cm=Math Stats HP LaserJet (rm 826) (via rome, mslw): :sd=/var/spool/LPRng/qmslw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psmslw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: p6lw|p6lw-1|p6lw-2|p6lw-s|p6lw-x|p6lw-1-x|p6lw-2-x|p6lw-s-x|p6lw-m: :cm=6th Floor HP LaserJet (rm 612): :sd=/var/spool/LPRng/p6lw: :lp=:rm=rome:rp=qp6lw: qp6lw: :cm=6th Floor HP LaserJet (rm 612) (via rome, p6lw): :sd=/var/spool/LPRng/qp6lw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psp6lw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: gllw|gllw-1|gllw-2|gllw-s|gllw-m: :cm=Gus Lehrer HP LaserJet (rm 813): :sd=/var/spool/LPRng/gllw: :lp=:rm=rome:rp=qgllw: qgllw: :cm=Gus Lehrer HP LaserJet (rm 813) (via rome, gllw): :sd=/var/spool/LPRng/qgllw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psgllw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: njlw|njlw-1|njlw-2|njlw-s|njlw-m: :cm=Nalini Joshi HP LaserJet (rm 720): :sd=/var/spool/LPRng/njlw: :lp=:rm=rome:rp=qnjlw: qnjlw: :cm=Nalini Joshi HP LaserJet (rm 720) (via rome, njlw): :sd=/var/spool/LPRng/qnjlw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psnjlw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: dclw|dclw-m: :cm=Donald Cartwright HP LaserJet (rm 620): :sd=/var/spool/LPRng/dclw: :lp=:rm=rome:rp=qdclw: qdclw: :cm=Donald Cartwright HP LaserJet (rm 620) (via rome, dclw): :sd=/var/spool/LPRng/qdclw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psdclw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: colw|colw-1|colw-2|colw-s|colw-m: :cm=Colour HP LaserJet (restricted, rm 612): :sd=/var/spool/LPRng/colw: :lp=:rm=rome:rp=qcolw: qcolw: :cm=Colour HP LaserJet (restricted, rm 612) (via rome, colw): :sd=/var/spool/LPRng/qcolw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/pscolw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: #rdlw|rdlw-1|rdlw-2|rdlw-s|rdlw-m: # :cm=Colour HP LaserJet (restricted, rm 826): # :sd=/var/spool/LPRng/rdlw: # :lp=:rm=rome:rp=qrdlw: #qrdlw: # :cm=Colour HP LaserJet (restricted, rm 826) (via rome, rdlw): # :sd=/var/spool/LPRng/qrdlw: # :server:oh=rome,rome.maths.usyd.edu.au: # :lp=/dev/psrdlw: # :sh:direct_read: # :if=/usr/sms/share/LPRng/etc/ifilter: #cps6: # :cm=HP1200 Colour PS printer in 612: # :sd=/var/spool/LPRng/cps6: # :lp=:rm=rome:rp=qcps6: #qcps6: # :cm=HP1200 Colour PS printer in 612 (via rome, x612 parallel port): # :sd=/var/spool/LPRng/qcps6: # :server:oh=rome,rome.maths.usyd.edu.au: # :lp=/dev/psx612: # :sh:direct_read: # :if=/usr/sms/share/LPRng/etc/ifilter: #cpr6: # :cm=Canon BJC7000 in 612: # :sd=/var/spool/LPRng/cpr6: # :lp=:rm=rome:rp=qcpr6: #qcpr6: # :cm=Canon BJC7000 in 612 (via rome, x612 parallel port): # :sd=/var/spool/LPRng/qcpr6: # :server:oh=rome,rome.maths.usyd.edu.au: # :lp=/dev/psx612: # :sh:direct_read: # :if=/usr/sms/share/LPRng/etc/ifilter: # ----- #ron|ron-h|ron-w|ron-h-w: # :cm=Ron's own Microline 380: # :lp=:rm=c640g:rp=ron: # ----- stlw|stlw-1|stlw-2|stlw-s|stlw-x|stlw-1-x|stlw-2-x|stlw-s-x|stlw-m|stlw-h: :cm=HP LaserJet in (lab) room 705: :sd=/var/spool/LPRng/stlw: :lp=:rm=rome:rp=qstlw: qstlw: :cm=HP LaserJet in (lab) room 705 (via rome, stlw): :sd=/var/spool/LPRng/qstlw: :server:oh=rome,rome.maths.usyd.edu.au: :lp=/dev/psstlw: :sh:direct_read: :if=/usr/sms/share/LPRng/etc/ifilter: # ----- #c610|c610-h|c610-w|c610-h-w: # :cm=Microline 391 in room 610: # :sd=/var/spool/LPRng/c610: # :lp=:rm=rome:rp=qc610: #qc610: # :cm=Microline 391 in room 610: # :sd=/var/spool/LPRng/qc610: # :server:oh=rome,rome.maths.usyd.edu.au: # :lp=/dev/psx610k: # :sh:direct_read: # :if=/usr/sms/share/LPRng/etc/ifilter: # ----- # # # SYNOPSIS # /etc/printcap database # # DESCRIPTION # The format of the LPNng printcap database was based on the termcap(5) data # base file format. Entries in the printcap Each entry in the data base is # used to define various options and values to control the printing and # spooling of print jobs. # # CAPABILITIES # The database is a simplified form of the termcap (5) database. Leading # whitespace on each line is discarded, and blank lines or lines which then # start with a comment character (#) are discarded. A line which does not # start with a colon (:) or bar (|) starts a printer entry definition. Lines # ending with a backslash (\) are assumed to continue to the next line; this # is for compatibility with other historical printcap file formats. Trailing # blanks and tabs (whitespace) for an option value are deleted unless the # last one is escaped with a backslash (``\''). # # A printer definition starts with a primary printer name, followed by zero # or more alternative printer names, followed by a set of keyword entries and # values. For example: # # #comment # # primary printer name # lp # #alternate names # |lp2|lp3 # |Example of a printer # :sd=/usr/spool/LPD/lp # :rw:lp=/dev/lp:mx#100 # include /etc/printcap/mainprintcap # # # The special printcap definition include will read the named file, which # must have an absolute pathname, as the next set of printcap entries. # # Keywords can be 1 to an indefinate number of characters long, and are case # sensitive. Values for keywords can be strings (:st=string:), signed # integer values using the C language notation, (:nu#12:max#-2:mask#0x1EF:), # or flags (:flag: to set to 1, :flag@: to clear to 0). Integer values must # be representable as 32 bit 2's complement numbers; care should be taken # with extremely large numbers. # # If the primary name of a printcap entry starts with a punctuation charac- # ter, then the entry may be referenced using the tc capability, but is # ignored otherwise. This allows common printcap information to be placed in # a single entry. # # # The special printcap entry oh (i.e. - only this host) may be used to select # a printcap entry for use by one or more hosts. The oh entry can be a list # of one or more host names or glob type of patterns. These patterns are # first applied to the host's fully qualified domain name, and then used to # to a lookup of an IP address. If either the glob match or the host has a # matching IP address then the printcap entry is selected for use. In # addition, the server flag indicates that only the LPD server is to use this # printcap entry. This allows client and server printcap information be to # be segragated in a simple manner. # # The following is a list of the keywords currently used by the LPRng # software. Many of these keywords are used only by the LPD server, others # are used by the client programs LPR, LPC, LPRM, PAC, as well as the server. # In the Use column in the table below, an A stands for all programs, D # stands for lpd, and R stands for the client programs such as LPR. # # Some of these entries can only appear or have an effect if they are in the # lpc.conf initialization file. See lpd.conf(5) for further details. # # ENTRIES BY ALPHABETICAL ORDER # # FL Use Type Default Description # Xf D str NULL output filter for format X (used by lpd) # ab D bool false always print banner, ignore lpr -h option # ac A str NULL allowed classes to be printed (default is all classes) # achk D bool false If TRUE LPD will check for a 'ACCEPT' reply to the initial # accounting information written to a filter at the start # of a job. # ae D str accounting format for end of job (see also af, la, ar # and Accounting) # af D str NULL name of accounting file or server (see also la, ar) # If the af field has the format |program, a filter will # be started and used for recording accounting information; # if the format is host%port, a tcp socket connection will # be made to the port on the host. The as and ae strings # will be printed to the specified destination. This # connection will be passed to filters as file descriptor 3. # The accounting file will not be created, it must exist for # LPD to append data to it. # ah D bool false auto-hold - job held until explicitly released # all A str NULL a list of all printers; (see ALL PRINTERS) # allow_duplicate_flags A bool false # allow duplicate command line flags; last overwrites earlier # allow_getenv A bool (compile time) # allows LPRng software to use the LPD_CONF environment variable # to specify the location of a configuration file. This is # for testing only. # allow_user_logging A bool false # if mail is requested using lpr -mhost%port,prot operations, # and the allow_user_logging flag is true, then job logging # information will be sent to host%port,prot. # ar D bool true write remote transfer accounting (if af, and as/ae set) # architecture A str (compile time) # architecture the software was compiled for. (Obsolete.) # as D str accounting format for start of job (see also af, la, ar # and Accounting) # be D str banner printing program for end (overrides bp, hl) # bk R bool false Berkeley-compatible: be strictly RFC-compliant # or more exactly, BSD LPR compatible when sending jobs. # bkf R bool false # use bk_filter_options and bk_of_filter_options when # invoking print filter. # bk_filter_options D str (see source code) # when bk flag set, options for non OF print filters # bk_of_filter_options D str (see source code) # when bk flag set, options for OF print filters # bl D str banner line - sent to banner printer program # default: $-'C:$-'n Job: $-'J Date: $-'t # expands to: Class:User Job: job Date: date # This is to force compatibility with vintage print filters # that require a non-standard banner string. Usually used with # :sb: option. # bp D str banner printing program (see hl) # (default: configuration variable default_banner_printer) # bq D str NULL specifies the next destination for jobs sent to this queue. # Job data files are first sent through any filters listed in # printcap entry before transfer. (See Bounce Queues) # br D num none if lp is a tty, set the baud rate (see ty) # break_classname_priority_link A flag false # Normally, lpr sets the priority to the first letter of the # class specified with -C. When non-zero, forces the class # and priority to be disjoint. # bs D str banner printing program for start (overrides bp, hl) # cd D str NULL control information directory for LPD server # cf D str NULL cifplot data filter # check_for_nonprintable R bool true # lpr checks f and p formats for printable files # Alias for xt # check_idle D str NULL # program to use to check for idle printer conditions before # processing jobs. # classname_length A num 31 # overrides the RFC1179 limitations on the control file # CLASS entry. Default is 31 characters. # cm A str NULL comment identifying printer (LPQ) # co D num 20 cost in dollars. Obsolete. # config_file A str /etc/lpd.conf:/usr/etc/lpd.conf # location of LPRng configuration information. Compile # time option only - see allow_getenv. # connect_grace A num 0 # time between jobs to allow printer recovery # connect_interval A num 10 # time between open or connection attempts # connect_timeout A num 10 # timeout value for connection or open # control_filter D str NULL # Filter for control file. Used when sending job to remote # spool queue. # db A str NULL LPD debug options when serving this queue. # See lf (log file) entry as well. # default_auth R str NULL # default client to server authentication type # used when specificially requested by user. # default_format R str f # default format for printing jobs # default_logger_port D str 2001 # default remote port for logging information # default_logger_protocol D str UDP # default protocol for logging information. TCP selects TCP/IP # default_permission D str A # default permission for operation # default_printer A str lp # default printer for printing jobs # default_priority R str A # default priority for printing jobs # default_remote_host A str localhost # default remote host for printing operations # default_tmp_dir A str /tmp # default temporary directory # destinations D str NULL # names of printers that lpq/lprm should talk to # find a job that has been processed by a router # script (see README.routing) # df D str NULL tex data filter (DVI format) # direct_read D bool false # if true, filters are given direct access to file. # This means no progress indication possible. # fc D num OBSOLETE if lp is a tty, clear flag bits (see STTY) # fd D bool false if true, no forwarded jobs accepted # ff D str ``\f'' string to send for a form feed (see INITIALIZATION) # filter_ld_path D str (see source) # the LD_LIBARY_PATH environment variable value for filters # filter_options D str (see source code) # when bk flag clear, options for non OF print filters # filter_path D str (see source) # the PATH environment variable value for filters # fix_bad_job D bool false # fix a bad job file - usually by ignoring multiple # U (unlink) entries, badly formatted file names, # or other common botches produced by various PC based # LPR clients. # fo D bool false print a form feed when device is opened # force_fqdn_hostname A bool FALSE # Force a fully qualified host name in control file # force_localhost A bool FALSE # Forces the clients programs (lpr, lpc, etc.) # to send all print jobs and requests to the server running # on the localhost entry for action. This flag effectively # forces BSD LPR behaviour. # force_queuename A str NULL # When :qq: flag or use_queuename configuration is enabled, # specifies the queuename to be used for control file Q # information. # forward_auth A str NULL # Do server to server authentication when non-null. # Use this value for the remote host authentication information. # fq D bool false print a form feed when device is closed # full_time D bool detailed time format specification in log messages # fs D num OBSOLETE like `fc' but set bits (see STTY) # fx A str ``flp'' valid output filter formats # generate_banner D bool false # force banner generation # gf D str NULL graph data filter (plot (3X) format) # hl D bool false print banner after job instead of before # ignore_requested_user_priority D bool false # Ignore the requested user priority when ordering jobs. # Prevents students... um... users from queue jumping. # if D str NULL filter command, run on a per-file basis # kerberos_* D str # Kerberos authentication support. See KERBEROS. # kerberos_keytab D str /etc/lpd.keytab # Kerberos lpd server keytab file # kerberos_life D str NULL # Kerberos lpd server key lifetime # kerberos_renew D str NULL # Kerberos lpd server key renewal time # kerberos_server_principle D str NULL # Kerberos remote lpd server principle # kerberos_service D str lpr # Kerberos service used in principle requests # la D bool true write local printer accounting (if af is set) # ld D str NULL leader string printed on printer open (see INITIALIZATION) # lf D str ``log'' error and debugging log file (LPD) # lk D bool false lock the lp device to force arbitration # localhost A str localhost # localhost named used for localhost lookup # lockfile D str /var/spool/lpd/lpd.lock.%h # lpd lock file (used only in lpd.conf) # logfile D str /var/spool/lpd/lpd.log.%h # lpd log file (used only in lpd.conf) # logger_destination D str NULL # destination for logging information. Format is # host[%port][,(TCP|UDP)] # longnumber D bool false # use 6 digit job numbers # lp D str NULL device name or pipe to send output to # lpd_force_poll A bool FALSE # Forces lpd to periodically poll lpd queues. # lpd_poll_time A num 600 # After this amount of idle time, lpd will poll queues # lpd_port D str printer # integer or port from /etc/services for lpd server # to accept connections. # lpd_printcap_path D str (see source) # printcap path for lpd, in addition to normal one # (configuration value only) # lpr_bounce R bool true # LPR will do bounce queue filtering. # mail_from D str NULL # specifies the user part of email From: address # mail_operator_on_error D str NULL # send mail to this user when LPD encounters printing error. # max_connect_interval A num 60 # maximum time between connection attempts # max_log_file_size D num 0 # maximum log file size in K bytes (0 is unlimited) # spool queue log file truncated to min_log_file_size # when value is nonzero and limited exceeded. # max_servers_active D num 0 # maximum servers that LPD will allow to be active at one # time. 0 selects the system default, which is usually # pretty small, perhaps 10. (configuration value only). # max_status_line D num 79 maximum number of characters on an LPQ status line # max_status_size D num 10 maximum size (Kbytes) of status file # mc R num 1 maximum copies allowed # mi D str 0 minimum space (Kb), to be left in spool filesystem # You can also use nnnM for nnn megabytes. Alias for minfree # min_log_file_size D num 0 minimum size (Kbytes) of log file # min_status_size D num 2 minimum size (Kbytes) of status file # minfree D str 0 alias for mi # ml R num 32 minimum printable characters for printable check # ms D str NULL alias for ty # ms_time_resolution D bool false # log time in milliseconds # mx R num 1000 maximum job size (1Kb blocks, 0 = unlimited) # nb D num 0 if non-zero, do a nonblocking open on lp device # nf D str NULL DITROFF data filter # network_connect_grace A num 0 # time between attempts to send jobs to spooler # Useful when dealing with network printer using LPD # interface to allow a bit of time between jobs. # nw A bool false spool dir is on an NFS file system # (take precautions when reading/writing files) # of D str NULL output filter, run once for all output # (used for banner printing, form feeds between files) # of_filter_options D str (see source code) # when bk flag clear, options for OF print filters # originate_port A str 512 1023 # when originating a connection, use ports in this range. # oh A str NULL Specific printcap entry for host; # (printcap entry ignored unless IP address of host and # entry value match. Entry is used first to do glob # style match against the host's fully qualified domain name, # and then interpreted as a general IP address) # pass_env A str PGPPASS,PGPPATH # if not the LPD server, sanitize and put these variables # in a filter environment variable list. # perms_path A str /etc/lpd.perms:/usr/etc/lpd.perms # location of perms file (used in lpd.conf) # pl D num 66 page length (in lines) # pr D str ``/bin/pr'' pr program for p format # printcap_path A str /etc/printcap:/usr/etc/printcap # location of printcap file (used in lpd.conf) # ps A str ''status'' printer status file name # pw D num 132 page width (in characters) # px D num 0 page width in pixels (horizontal) # py D num 0 page length in pixels (vertical) # qq A bool false LPR - puts in the queue name (Q entry) # in the job control file when spooled or transferred. # LPD - when receiving or transferring a job, # if the queue name (Q entry) in the job control # file is not present, puts in the queue name. # remote_user A str NULL # when doing authentication, use this entry for the remote user # or remote end of the connection. This allows you to specify # a key or other information. # remote_support A str NULL # if non-null, specifies allowed operations to remote queue. # R=lpr, M=lprm, Q=lpq, V = lpq -v, C=lpc. For example, # remote_support=RM would only allow LPR and LPRM operations. # report_server_as A str NULL # use the str value as the name of the server when reporting # LPQ or LPC status. # retry_econnrefused A bool true # if set, retry a connection to a remote system when an # ECONNREFUSED error is returned. # retry_nolink D bool true # if LPD is sending a job or opening a device for # printing and the value is true, then the connection or # device open is repeated indefinately. # return_short_status D str NULL # Some legacy (non-LPRng) LPQ programs expect 'short' status # to be returned. This option allows you to specify which hosts # will get it. The value is a list of hosts and/or IPaddresses # and masks to which the LPD server will provide short status. # For example: return_short_status=192.8.0.0/16 will make LPD # return short status to all requests from hosts in subnet # 192.8.0.0. (See short_status_length) # reuse_addr A bool false # if set, use SO_REUSEADDR on outgoing connection ports. # This reduces the problems with exhausting port numbers. # (usually only in lpd.conf) # reverse_lpq_status D str NULL # When a lpq status request arrives from one of the specified # hosts or IP addresses, then the LPQ status format is inverted. # For example, if reverse_lpq_status=host*,127.0.0.0/8, # then when a LONG status request arrives from host1 or from # ip address 127.0.0.1, the SHORT status will be returned. # rf D str NULL filter for printing FORTRAN style text files # rm A str NULL remote-queue machine (hostname) (with rp) # router D str NULL script that dynamically re-routes a job # (see README.routing) # rp A str NULL remote-queue printer name (with rm) # rt A num 3 number of times to try printing (0=infinite) # see send_failure_action, send_job_rw_timeout, send_try # rw D bool false open the printer for reading and writing # safe_chars D str NULL additional safe characters for control file contents # save_on_error D bool false # Save job when an error occurs to allow post-mortem # diagnostics or reprinting. This should only be set on # print queues. It is also a diagnostic aid. # save_when_done D bool false # Save job when done (printed, transferred) to allow # retry at a later time. This should only be set on # print queues. It is also a diagnostic aid. # sb D bool false short banner (one line only) # sc R bool false suppress multiple copies # sd A str NULL spool directory (only ONE printer per directory!) # send_block_format A bool false # Use the LPRng extended 'block job' job transmission # method to send a job to a remote site. # send_data_first A bool false # send data files then control files # when sending a job to a remote host. # send_failure_action D str "abort" # Action on print or transmission failure after send_try # attempts; use the following codes: # 'success' (JSUCC) - treat as successful # 'abort' (JABORT) - abort printer # 'retry' (JRETRY) - retry job # 'remove' (JREMOVE)- remove job # 'hold' (JHOLD) - hold job # If the value is "|/filter", the filter will be run and # the number of attempts can be read from standard input. # The filter should exit with one of the error codes listed # above to cause the appropriate action. # send_job_rw_timeout A num 6000 # timeout on read/write operations when sending job to # printer or remote host (0 value is no timeout) # send_query_rw_timeout A num 6000 # timeout on read/write operations when performin a status # operation (0 value is no timeout) # send_try A num 3 # alias for rt - numbers of times to try sending # or printing a job. 0 is infinite. # sendmail D str /usr/sbin/sendmail -oi -t # sendmail command to send mail to user. Flags must be set # so that address and other information is taken from # standard input. # server A bool false printcap entry for server only # server_auth_command A str NULL # authentication command for server program # server_tmp_dir D str /tmp # temporary directory for server to create files when there # is no spool directory. # server_user D str daemon server user name used in authentication operations # sf D bool false suppress form feeds separating jobs # sh D bool false suppress headers and/or banner page # short_status_length D num 1 # If the return_short_status value is used and has a match against # a requesting address, this amount of status is set by the # short_status_length option. For most legacy systems a 1 is # suitable (1 line of status). # socket_linger A num 10 # if nonzero, forces a SO_LINGER operation to be done # on all TCP/IP connections. This usually corrects a problem # with missing last data transmissions to remote hosts. # spool_dir_perms D num 042700 # permissions for spool directory # spool_file_perms D num 0600 # permissions for spool file # spread_jobs D num 0 spread job numbers to avoid collisions # ss D str NULL name of queue that server serves (with sv) # stalled_time D num 120 # Time after which to report an active job as stalled # stop_on_abort D bool true # Stop processing queue when print filter aborts. # sv D str NULL names of servers for queue (with ss) # sy D str NULL alias for ty # sync_lpr D bool false # suppress socket close until end of lpr operation # syslog_device D str /dev/console # name of syslog device to use if no syslog facility # tc A str NULL reference to a printcap entry to include as part of # the current entry. # tf D str NULL troff data filter (C/A/T phototypesetter) # tr D str NULL trailer string to print when queue empties # translate_format D str NULL # translate job format (similar to tr(1) utility) # only valid when transferring to remote spool queue. # Example: translate_format=pfml # p format changed to f, m format to l # ty D str NULL stty commands to set output line characteristics # alias is sy, ms # use_identifier R bool false # add job identifier lines ('A') in the control file # use_info_cache D bool true # cache printcap information # use_queuename A str NULL # if no Q information in control file, # use this value and place in control file. # use_shorthost R bool false # use only the hostname for job control # and data file names. Host information in job file # will still be fully qualified domain name. # user D str daemon LPD effective user (EUID) for SUID operations # user_auth_command A str NULL # authentication command for user (client program) # user_lpc D str NULL # list of lpc subcommands allowed to be executed by user # A matching value enables SERVICE=U permissions checking. # vf D str NULL (Versatek) raster image filter # xc D num 0 if lp is a tty, clear local mode bits (see STTY) # xs D num 0 like `xc' but set bits (see STTY) # xt R bool true lpr checks f and p formats for printable files # Alias for check_for_nonprintable. # xu A str NULL additional permissions information for this queue # # ENTRIES BY FUNCTION # # See the alphabetical listing for detailed information. # # Filters and Page Formats # Xf D str NULL output filter for format X (used by lpd) # cf D str NULL cifplot data filter # control_filter D str NULL # Filter for control file. Used when sending job to remote # spool queue. # df D str NULL tex data filter (DVI format) # direct_read D bool false # if true, filters are given direct access to file. # This means no progress indication possible. # fx A str ``flp'' valid output filter formats # gf D str NULL graph data filter (plot (3X) format) # if D str NULL filter command, run on a per-file basis # lpr_bounce R bool false # LPR will do bounce queue filtering. # nf D str NULL DITROFF data filter # of D str NULL output filter, run once for all output # pl D num 66 page length (in lines) # pr D str ``/bin/pr'' pr program for p format # pw D num 132 page width (in characters) # px D num 0 page width in pixels (horizontal) # py D num 0 page length in pixels (vertical) # rf D str NULL filter for printing FORTRAN style text files # translate_format D str NULL # translate job format (similar to tr(1) utility) # only valid when transferring to remote spool queue. # Example: translate_format=pfml # p format changed to f, m format to l # tf D str NULL troff data filter (C/A/T phototypesetter) # vf D str NULL (Versatek) raster image filter # xt R bool true lpr checks f and p formats for printable files # # Banners # ab D bool false always print banner, ignore lpr -h option # be D str banner printing program for end (overrides bp, hl) # bp D str banner printing program (use hl to print banner at end) # bs D str banner printing program for start (overrides bp, hl) # hl D bool false print banner after job instead of before # sb D bool false short banner (one line only) # sh D bool false suppress headers and/or banner page, overrides ab # # Accounting # ae D str accounting format for end of job (see also af, la, ar # and Accounting) # af D str NULL name of accounting file (see also la, ar) # ar D bool true write remote transfer accounting (if af, and as/ae set) # as D str accounting format for start of job (see also af, la, ar # and Accounting) # la D bool true write local printer accounting (if af is set) # # Queue control # ac A str NULL allowed classes to be printed (default is all classes) # ah D bool false auto-hold - job held until explicitly released # bk R bool false backwards-compatible: be strictly RFC-compliant # bkf R bool false backwards-compatible filter: use Berkeley filter options # bqfilter D bool false # if a bounce queue (sends jobs to remote site) # then when bqfilter true and a format filter is specified, # sends data files through format filter before transfer. # See also 'qq'. # cd D str NULL control information directory for LPD server # cm A str NULL comment identifying printer (LPQ) # fd D bool false if true, no forwarded jobs accepted # lf D str ``log'' error and debugging log file (LPD) # longnumber D bool false # use 6 digit job numbers # mc R num 1 maximum copies allowed # mi D str 0 minimum space (Kb) to be left in spool filesystem # You can also use nnnM for nnn megabytes. # ml R num 32 minimum printable characters for printable check # mx R num 1000 maximum job size (1Kb blocks, 0 = unlimited) # ps A str ''status'' printer status file name # nw A bool false spool dir is on an NFS file system # (take precautions when reading/writing files) # qq A bool false place queue information in control file. See # alphabetical for details. # rm A str NULL remote-queue machine (hostname) (with rp) # rp A str NULL remote-queue printer name (with rm) # sd A str NULL spool directory (only ONE printer per directory!) # ss D str NULL name of queue that server serves (with sv) # sv D str NULL names of servers for queue (with ss) # sc R bool false suppress multiple copies # use_identifier R bool false # add job identifier lines ('A') in the control file # use_shorthost R bool false # use only the hostname for job control # and data file names. Host information in job file # will still be fully qualified domain name. # xu A str NULL additional permissions information for this queue # # Connection and Interface to Printer # db A num 0 debug level when using this printer # connect_interval A num 10 # time between open or connection attempts # connect_timeout A num 10 # timeout value for connection or open # (0 is infinite number) # ff D str ``\f'' string to send for a form feed (see INITIALIZATION) # fix_bad_job D bool false # fix a bad job file - usually by ignoring multiple # U (unlink) entries, badly formatted file names, # or other common botches produced by various PC based # LPR clients. # fo D bool false print a form feed when device is opened # fq D bool false print a form feed when device is closed # ld D str NULL leader string printed on printer open (see INITIALIZATION) # lp D str NULL device name or pipe to send output to # lk D bool false lock the lp device to force arbitration # max_connect_interval A num 60 # maximum time between connection attempts # nb D num 0 if non-zero, do a nonblocking open on lp device # retry_econnrefused A bool true # if set, retry a connection to a remote system when an # ECONNREFUSED error is returned. # retry_nolink D bool true # if LPD is sending a job or opening a device for # printing and the value is true, then the connection or # device open is repeated indefinately. # rs D num 300 number of seconds between spool queue status scans # rt D num 3 number of times to try printing (0=infinite). # rw D bool false open the printer for reading and writing # save_on_error D bool false # See above. # save_when_done D bool false # See above. # send_failure_action D str abort # See above. # send_try alias for rt # sf D bool false suppress form feeds separating jobs # socket_linger A num 10 # if nonzero, forces a SO_LINGER operation to be done # on all TCP/IP connections. This usually corrects a problem # with missing last data transmissions to remote hosts. # tr D str NULL trailer string to print when queue empties # # Serial Line Setup # br D num none if lp is a tty, set the baud rate (see ty) # fc D num OBSOLETE if lp is a tty, clear flag bits (see STTY) # fs D num OBSOLETE like `fc' but set bits (see STTY) # ms D str NULL alias for ty # sy D str NULL alias for ty # ty D str NULL stty commands to set output line characteristics # alias is sy, ms # xc D num OBSOLETE if lp is a tty, clear local mode bits (see STTY) # xs D num 0 like `xc' but set bits (see STTY) # # Miscellaneous # all A str NULL a list of all printers; (see ALL PRINTERS) # destinations D str NULL # names of printers that lpq/lprm should talk to find # a job that has been processed by a router script # (see README.routing) # forward_auth D str NULL # server to server authentication type, e.g. pgp, kerberos # force_localhost A bool FALSE # Forces the clients programs (lpr, lpc, etc.) # to send all print jobs and requests to the server running # on the localhost entry for action. This flag effectively # forces BSD LPR behaviour. # force_queuename A str NULL # See above. # logger_destination D str NULL # destination for logging information. Format is # host[%port][,(TCP|UDP)] # oh D str NULL Specific printcap entry for host. See above. # remote_support A str RMQC # if non-null, specifies allowed operations to remote queue. # R=lpr, M=lprm, Q=lpq, C=lpc # router D str NULL script that dynamically re-routes a job # (see README.routing) # server A bool false printcap entry for server only # server_auth_command D str NULL # authentication command for server to use. # tc A str NULL reference to a printcap entry to include as part of # the current entry. # use_auth D str NULL # client to server authentication type, e.g. pgp, kerberos # user_auth_command R str NULL # authentication command for user (client program) # # # FILTERS # # By convention, all output filter names have the form Xf, where X is the # lower case letter corresponding to the lpr formatting option. The if and # of filters are the standard output filters. The of filter is started for # each job and is used to print the banner page and any FF separators between # individual files of the job. It is sent a special stop sequence by the lpd # server, and must suspend operations until sent a SIGCONT signal. An if # filter is run separately for each file; at the end of the job the of filter # is restarted and used to print the trailing banner (if any) and FF separa- # tors. # # Filters are invoked with a standard set of options defined by the # bk_filter_options (backwards compatible), bk_of_filter_options (backwards # compatible OF filter), and filter_options configuration variables. See the # lpd(8) manual page for details. If the first characters of the filter # specification are -$, i.e.- Xf=-$ filter, then the command line options are # not added. Currently, the options are: # bk_filter_options $P $w $l $x $y $F $c $L $i $J $C $0n $0h $-a # bk_of_filter_options $w $l $x $y # filter_options $C $F $H $J $L $P $Q $R $Z $a $c $d \ # $e $f $h $i $j $k $l $n $s $w $x $y $-a # # SPOOL QUEUES # # Printcap entries which have a spool directory value (sd) are called spool # queues. Jobs sent to a printer with a spool queue are place in the spool # directory. When checking the spool queue for jobs, the server will check to # see if there is a printcap file in the directory with the name # printcap.host. If there is, the additional printcap information is pro- # cessed and used by the server. # # If the spool directory is NFS exported, then remote hosts can manipulate # the spool entries directly; this can have catastrophic effects, especially # in systems where the NFS implementation has defects. The printcap informa- # tion is particularly vulnerable to exploitation, as well as symbolic links, # jobs which cannot be removed, etc. # # In order to support systems which require NFS exported spool directories, # the LPRng system has the following options. The NFS (nw) printcap flag is # an indication that the spool directory is NFS exported and/or mounted. The # server will not read the directory for printcap information. The next step # up in security is to specify a separate control directory (cd) for the # non-job control and data files. If this is done, then only job control # files and job data files will be read from the spool directory. In addi- # tion, if there are any problems with a job, a special error file will be # written in the control directory, preventing run away activity on a suspi- # cious job. # # # LOCAL PRINTERS # # Local printers have an lp entry, which is the device that output should be # sent to, usually a serial port tty. PLP supplements this by using the lp # field to indicate a remote printer, or by allowing communication with the # printer using a separate program, known as an lp-pipe, instead of a serial # line. If the printcap lp entry contains a string of the form printer@host, # jobs are forwarded to the specified remote printer on the host. If the # printcap lp entry contains a string of the form | command args , the com- # mand command is run, with the arguments args . This can be used to communi- # cate with printers connected to network terminal servers, some TCP/IP- # capable printers, and just about anything you can hack up a communication # program for. Read the PLP Manual for more details. # # TY (STTY) OPTIONS # # The ty (stty) printcap parameter recognises a set of stty(1) options that # can be used to set serial line characteristics for the printer. However, # due to the differences between implementations of UNIX, there are several # sets of ty options supported. Invoke lpd(8) with the ``-v'' command-line # option to see which set your installation is using. # # Systems using the sgtty tty manipulation interface may use the following # stty(1) options: # # bs0 bs1 [-]cbreak cooked cr0 # cr1 cr2 cr3 [-]decctlq [-]echo # [-]even ff0 ff1 [-]lcase [-]litout # nl0 nl1 nl2 nl3 [-]nl # [-]noflsh new [-]nohang old [-]odd # [-]raw start stop tab0 tab1 # tab2 [-]tabs [-]tandem tek ti700 # [-]tilde tn300 tty33 tty37 vt05 # [-]evenp [-]oddp [-]pass8 # # Systems using termio may use the following options: # # [-]ignbrk [-]brkint [-]ignpar [-]parmrk [-]inpck # [-]istrip [-]inlcr [-]igncr [-]icrnl [-]iuclc # [-]ixon [-]ixany [-]ixoff [-]decctlq [-]tandem # [-]imaxbel [-]opost [-]olcuc [-]onlcr [-]ocrnl # [-]onocr [-]onlret [-]ofill [-]ofdel [-]cstopb # [-]cread [-]parenb [-]parodd [-]hupcl [-]clocal # [-]loblk [-]parity [-]evenp [-]oddp [-]stopb # [-]hup [-]crtscts [-]isig [-]noisig [-]icanon # [-]cbreak [-]xcase [-]echo [-]echoe [-]echok # [-]crterase [-]lfkc [-]echonl [-]noflsh [-]tostop # [-]echoctl [-]ctlecho [-]echoprt [-]prterase [-]echoke # [-]crtkill [-]lcase [-]nl [-]litout [-]pass8 # [-]raw [-]sane [-]cooked [-]nopost fill # nl0 nl1 cr0 cr1 cr2 # cr3 tab0 tab1 tab2 tab3 # bs0 bs1 vt0 vt1 ff0 # ff1 cs5 cs6 cs7 cs8 # nul-fill del-fill -tabs # # And systems using termios may use the following options: # # [-]ignbrk [-]brkint [-]ignpar [-]parmrk [-]inpck # [-]istrip [-]inlcr [-]igncr [-]icrnl [-]iuclc # [-]ixon [-]ixany [-]ixoff [-]imaxbel [-]pass8 # [-]opost [-]olcuc [-]onlcr [-]ocrnl [-]onocr # [-]onlret [-]ofill [-]ofdel [-]tabs nl0 # nl1 cr0 cr1 cr2 cr3 # tab0 tab1 tab2 tab3 bs0 # bs1 vt0 vt1 ff0 ff1 # cs5 cs6 cs7 cs8 [-]cstopb # [-]cread [-]parenb [-]parodd [-]hupcl [-]clocal # [-]crtscts [-]evenp [-]parity [-]oddp [-]pass8 # [-]isig [-]icanon [-]xcase [-]echo [-]echoe # [-]echok [-]echonl [-]noflsh [-]tostop [-]iexten # [-]echoctl [-]ctlecho [-]echoprt [-]prterase [-]echoke # [-]crtkill [-]flusho [-]pendin # # The fc , fs , xc , and xs printcap entries are obsolete, and if present # with non-zero values will abort print job processing. # # INITIALIZATION # # Many printers require an initialization string to be sent to them in order # to configure their operation. The leader (ld) and trailer (tr) strings are # sent at the start and end of job processing. These strings are interpreted # using the C language conventions for character representation: \nnn is # replaced with a character with the value nnn, \n with a new line, \r with a # carriage return, and so forth. # # ALL PRINTERS # # The LPRng software has the capability to use a remote database for obtain- # ing printcap and other information. One of the difficulties arises when a # list of all printers available is needed. By convention, the special # printer name all is reserved for this information; the all field is a list # of printers separated by spaces or punctuation. For example: # # #all printers # all:all=lp1,lp2,lp3,lp4 # # # ACCOUNTING # # Accounting is done by writing information to an accounting file, filter, or # remote connection specified by the af printcap entry. If af has the form # |filter, a filter is started and all accounting information is passed # through the filter. The filter is passed the options specified by the # filter_options configuration variable. The special form |-$ filter will # suppress adding options. If af has the form host%port, then a tcp socket # is opened to the specified port on the remote host and all accounting # information is sent on the socket. If the achk flag is set, then after the # string specified by the as field has been sent a reply of the form ACCEPT # will be expected, otherwise the job will not be printed. # # The printcap as and ae specify the format of the accounting information # sent at the start and end of job printing respectively, or filters to be # used to generate and/or report accounting information. If as and ae # specify filters, the filters are opened with STDIN set to /dev/null and # STDOUT set to the device, and are passed the command line options specified # by the filter_options configuration variable (see lpd.conf(5)). The spe- # cial form |-$ filter will suppress adding options. The as filter should # exit with 0 (JSUCC) status if successful and the job can be printed, # nonzero status JABORT for abnormal queue termination, JREMOVE if the job # cannot be printed, and JRETRY if the job should be retried. The filter's # STDERR is set to the printer error logging file. # # # BOUNCE QUEUES AND PRINT FORMATS # # Bounce queues are designed to allow users to have their files preprocessed # by a set of filters before being sent to the final destination. If a queue # is being used as a bounce queue, then the lp printcap entry must be set to # the name of the printer on the server, and the bq entry must be the # destination after filtering. This will cause all jobs to be sent to the # bounce queue, rather than directly to the final destination. For example, # pr:lp=pr@host:bq=destpr@desthost. # # The filters used by the bounce queue are those that would normally be used # by the LPD server for printing a job. For example, the :if: entry would # specify the filter for the f format. Each job file is processed individu- # ally. The lpr -p option will cause the LPD server to process job files by # the program specified by the pr printcap entry (default is /bin/pr) and # then pass through the if filter. However, if a bounce queue is used the # format of the output data may be changed. To accomodate this action, the # translate_format value can be used to reconfigure the format. The value # has the form SdSdSd..., where S is the original format and d is the final # format. This is similar to the format used by the UNIX tr(1) utility. # For example, the value pfml would convert format specifications p to f and # m to l, but only in the job information sent to a remote destination. Note # that the original format would still be supplied to any filters, and that # the p filter would need to provide any options and/or values to be used to # do formatting. # # The lpr_bounce printcap flag can be used to cause LPR to do bounce queue # filtering, rather than the server. This should be used with caution, as # missing filters can cause unexpected behaviour. # # KERBEROS, PGP, AND OTHER AUTHENTICATION METHODS # # LPRng supports built in kerberos authentication. To enable this, the LPD # protocol has been extended to provide a way to transfer authenticated # and/or encrypted jobs and commands. The details are covered in other LPRng # documentation.