LPRng-HOWTO: 15 Oct 2001 (For LPRng-3.7.9)
Prev | Chapter 12. Printcap Database | Next

# 12.2. Simple Client Printcap Entry

Options used:

- `client` FLAG client printcap entry

- `lp=`destination printer information

- `rm=`remote host (machine)

- `rp=`remote printer

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.

        # printer lp1
        lp1|printer1
          :rm=localhost
        # printer lp2 with continuation
        lp2:\
          :lp=pr@10.0.0.1:client
        # printcap lp3, to printer pr, with overrides
        lp3:rp=pr:rm=hp.private
          :force_localhost@
        # Simplest possible printcap entry - defaults for everything
        lp4

1. 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.

2. 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.

3. 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.

4. Options take the form of a keyword/value pair, i.e.-

   :option=value
   :option#value (legacy, not advised for new systems)
   :option
   :option@

5. 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`.

6. 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.

7. 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.

8. 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:

        # printer lp1
        lp1|printer1
          :rm=localhost

1. 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.

2. 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:

        # printer lp2 with continuation
        lp2:\
          :lp=pr@10.0.0.1:client

1. 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:

           lp2: :lp=pr@10.0.0.1:client

   Luckily, LPRng ignores empty options like `::`. While it is strongly recommended that `\` be avoided it may be necessary for compatibility with other system utilities.

2. 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.

3. 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:

        lp3:rp=pr:rm=hp.private
          :force_localhost@

1. The `rp=` (remote printer) remote print queue name to used when sending commands to the lpd print server.

2. 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.

3. 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:

        # Simplest possible printcap entry - defaults for everything
        lp4

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.

Prev | Home | Next
Printcap Database | Up | Simple Server Printcap Example