Options used:
I'll use this simple example to explain the basics of the
LPRng printcap format and
introduce some of the LPRng
network configuration options. Here is a simple printcap file
used to provide client programs (lpr,
lprm, etc) with remote printer
and server information.
-
Lines starting with a # sign
are comments, and all leading and trailing whitespace, i.e. - spaces, tabs, etc, are
ignored. Empty lines are ignored as well.
-
A printcap entry starts with the printcap entry name, followed by one or more aliases, followed by one or more
options. In the above example we have three printcap
entries: lp1 with an alias printer1 and lp2, lp3, and lp4 with no aliases.
-
Aliases start with the |
character and options with the :
character; tabs and spaces before and after the | or :
characters and at the start and end of lines are ignored.
You can use backslash (\) at the
end of a line to create a multi-line value for an option.
The backslash will cause the next line to be appended to
the current line; watch out for comments and ends of
printcap entries if you use this facility. As you can see
from the example, there is no Name printcap entry - this is part of the
cm option on the previous
line.
-
Options take the form of a keyword/value pair,
i.e.-
:option=value
:option#value (legacy, not advised for new systems)
:option
:option@
-
Option names are case insensitive, but option values
are not. While Ts and ts are the same option name, ts=Testing and ts=testing have their case preserved. A
string or integer value is specified by option=value or option#value.
-
The use of the legacy option#value form is NOT recommended as some preprocessors
and database systems will treat #
as the start of a comment and delete the remainder of the
line. This has caused great consternation for sysadmins
who wonder why their NIS distributed printcap entries
have been mysteriously truncated.
-
If you want to set a string option to empty value, use option=. The option will set it to 1. If an option value contains a colon,
then use the C (or Perl or Tck/Tk) string escape \072 to represent the value.
-
Boolean options are set TRUE (1) if no value follows
the keyword and FALSE (0) by appending a @. For example sh
will set sh to TRUE and sh@ to FALSE.
There may be multiple options on the same line, separated
by colons.
Now let's examine the first printcap entry in detail. It
is reproduced here for convenience:
-
We start with a comment, followed by the printcap
entry name and and alias. Aliases are useful when you
want to refer to a single printer or print queue by
different names. This can be useful in advanced printcap
and print queue setups. By default, the remote printer
name is the printcap entry name.
-
The rm (remote machine or
host) option specifies the name or IP address of the lpd host running lpd. In this example the remote host is
localhost or the machine that
the client is running on and we assume that the lpd server is running on the localhost.
Thus, we would communicate with printer lp1@localhost.
Let's look at the next printcap entry:
-
The lp2 printcap entry
illustrates the use (and abuse) of the \ continuation. If you think about this,
we have really defined a printcap entry of the form:
Luckily, LPRng ignores
empty options like ::. While it
is strongly recommended that \
be avoided it may be necessary for compatibility with
other system utilities.
-
The lp=pr@10.0.0.1 literal is
an alternate way to specify a remote queue and server. If
the force_localhost default is
being used, then the LPRng
clients will ignore the 10.0.0.1
address and still connect to pr@localhost. There is further discussion
about this in the next section.
-
The client option explicitly
labels client only printcap information. The lpd server will ignore any printcap
with the client option. When
constructing complex printcaps, this option is used to
keep ensure that you have consistent printcap
information.
The following printcap entry shows how to override the
force_localhost default, and force the
LPRng clients to connect directly
to a remote server:
-
The rp= (remote printer)
remote print queue name to used when sending commands to
the lpd print server.
-
The force_localhost@ literal
is an example of a flag option.
The @ sets the literal value to
0 (false). We set force_localhost to false, which now allows
the LPRng clients to connect
directly to the specified remote printer. In this
example, the hp.private could
be a HP LaserJet Printer with a JetDirect interface,
which supports the RFC1179 protocol.
-
One disadvantages of sending a job directly to a
printer using the above method is that lpr program will not terminate or exit
until all of the files have been transferred to the
printer, and this may take a long time as the printer
processes the files as they are received.
Now let's look at the last printcap entry:
The last example is the simplest possible printcap entry.
This will cause LPRng clients to
use the default values for everything. The printer will be
lp4, i.e. - the name of the
printcap, and the server will be localhost if force_localhost is set, or the value of the
default_remote_host configuration
option if it is not.