NAME¶
rlpr - remote off-line print
SYNOPSIS¶
rlpr [
-Hprinthost] [
-Pprinter] [
-Xproxyhost] [
-#copies] [
-Cclass] [
-Jjob] [
-Ttitle]
[
-Uuser] [
-i[indent]] [
-wwidth]
[
-1234cdfghlmnopqrstvNV] [
--debug] [
--port=port] [
--hostname=hostname] [
--send-data-first] [
--timeout=seconds] [
--tmpdir=dir] [
--verbose] [
--windows] [file ...]
DESCRIPTION¶
rlpr uses TCP/IP to send print jobs to lpd servers anywhere on a network.
Unlike
lpr, it does not require that the remote printers be explicitly
known to the local system (traditionally through
/etc/printcap), and
thus is considerably more flexible and requires less administration.
rlpr can be used anywhere a traditional
lpr might be used, and is
backwards compatible with traditional BSD
lpr. If
rlpr is
invoked as
lpr, it preserves all known lpr semantics.
rlpr can be installed and used in two different ways: (the same
guidelines apply for
rlpq(1) and
rlprm(1))
1. Ideally, if the
rlpr client can be installed setuid root, then
rlpr can interact directly with other
lpd's on the network. See
EXAMPLES below.
2. If
rlpr cannot be installed setuid root (in cases where one is not the
administrator on the machine one needs to print from) then
rlpr can be
used in conjunction with an
rlprd proxy agent. See
CONFIGURING A
PROXY and
EXAMPLES below for details.
MOTIVATION¶
Traditional Berkeley
lpr has one major drawback: the mortal user cannot
lpr to a printer which is not listed explicitly in the
/etc/printcap file.
This is especially annoying in scenarios where there is a central UNIX server
which many users (using their own desktop computers) connect to in order to do
their daily work; If those users wish to print files from the central server
to their personal machines (assuming they had a local
lpd), they
cannot do this without the central server's
/etc/printcap being
edited to contain the host and printer of each user on the network - this
scales horribly.
OPTIONS¶
Environment/Setup¶
- --debug
- Print gobs of debugging information.
- -N, --no-bind
- Don't try to bind to privileged port before connecting to lpd. Please see
CONFIGURING A PROXY below for information on use of this
option.
- --port=number
- Select an alternate port (instead of 7290) to connect to, if using rlprd.
Usually not needed.
- -H, --printhost=host
- Select the host to print to (used with -P).
Instead of using -H, one can specify the hostname directly including
it with the printer name with the printer@hostname syntax.
- -P, --printer=printername, --queue=printername
- Select the printer to print to (used with -H).
- -X, --proxyhost=proxyhost
- Select the proxy host to use, if necessary.
- --timeout=seconds
- Set the inactivity timer. If the connection hangs for more than
seconds seconds, then rlpr will give up. Use the special
value `-1' to wait forever. Default timeout is 3 seconds.
- --tmpdir=tmpdir
- Use tmpdir for temporary files (by default, /tmp is used)
- -V, --version
- Print version and exit.
NOTE: instead of specifying the printer, printhost, or proxy variables on
the commandline, one can set up defaults through either environment variables
or
rlprrc configuration files. For information on personal or
system-wide
rlprrc files, see
rlprrc(5).
Behavior¶
- -#, --copies=copies
- Print copies copies of each document - use sparingly, printers
aren't copiers.
- -m, --mail
- Send mail upon completion.
- -q, --quiet, --silent
- Quiet mode - stay quiet (except for fatal errors).
- -r, --remove
- Remove file after printing.
- -s
-
Ignored (provided for compatibility).
- --send-data-first
- Send the "data" transaction before the "control"
transaction. Should never be required when rlpr is used in
conjunction with a RFC 1179 conformant lpd. However, buggy
implementations exist which require these semantics. Use only when
necessary.
- --verbose
- Verbose mode - on by default unless rlpr is invoked as
lpr.
- --windows
- "Windows" mode - for printing multiple files to a windows-based
lpd.
Document Content¶
-1 Print data using troff(1) R (times roman) font.
-2 Print data using troff(1) I (times italic) font.
-3 Print data using troff(1) B (times bold) font.
-4 Print data using troff(1) S (special) font.
-c Assume data has been produced by cifplot(1).
-d Assume data has been produced by tex(1).
-f Filter data assuming the start of each line has
a fortran carriage control character.
-g Assume data has been produced by the BSD plot library.
-l Treat control characters as regular characters.
-n Assume data has been produced by ditroff.
-o Assume data is postscript.
-p Print data using pr(1).
-t Assume data has been produced by troff(1).
-v Assume the data contains a raster image.
- -i, --indent=[cols]
- Indent output by cols columns (8 by default).
- -h, --no-burst
- Do not print burst (banner) page.
- -w, --width=width
- Use width for page width when using pr(1).
- -C, --class=class
- Use class for the class name on burst page instead of the local
system name.
- -J, --job=jobname
- Use jobname for the job name on burst page instead of the first
filename in the job.
- -T, --title=title
- Use title for the title when using pr(1) instead of the
current filename.
- -U, --user=username
- Use username for the user name on burst page instead of the actual
username.
- --hostname=hostname
- Use hostname for the hostname on the burst page instead of the
local system name.
OS-Specific Extensions¶
See
OS-SPECIFIC EXTENSIONS below for details on these options.
- --ext=os --extension=os
- Interpret the arguments passed to --extargs as if on operating
system os. Currently, os must be either hpux or
none.
- --extargs="args"
- Change behavior according to OS-specific arguments listed in args.
CONFIGURING A PROXY¶
In situations where the
rlpr client cannot be installed setuid root,
rlpr often cannot directly talk to an
lpd because most
lpd's require that requests come from privileged ports. Unfortunately,
rlpr cannot "come from a privileged port" without having
superuser status.
The privileged port requirement is part of RFC 1179.
That said, some
lpd's, most notably some of the ones which have shipped
with
Windows NT,
Solaris, and
NCRunix, do not require
requests to come from a privileged port. Before going through the work of
configuring a proxy, you should make sure one is required for your situation.
You can check by trying to run
rlpr: if it is successful in spooling
the job, you do not need to install
rlpr setuid root. You should then
pass the
-N (or the more verbose
--no-bind) to
rlpr in
the future to suppress
rlpr's warning messages.
If your situation does not require a privileged port, do not use
one. You can explicitly request a regular port, even when
rlpr
has been installed setuid root, by using the
--no-bind option. This is
a good idea because there are only 11 privileged ports that the RFC allows.
This ends up having the practical implication of limiting your print requests
to about 11 per every 3 minutes, which is often unacceptable.
The rest of this section assumes that
rlpr cannot be installed setuid
root in your situation, and that a remote
lpd requires
rlpr
connect to it from a privileged port. It requires that you or someone you know
has root access to another machine the network, so that you can use a
proxy, known as
rlprd, to get around the problem.
rlprd works by taking
lpd requests on a non-privileged port,
mapping them to a privileged port, and sending them out to the real
lpd. The proxy and the lpd
need not be on the same
machine.
In the scenario provided in the motivation, if each user had root access on his
own machine, it would be optimal for the user to start
rlprd up on his
own machine, in which case the proxy and the printhost are the same machine.
The user would additionally have to make sure his own machine was listed in
his local
/etc/hosts.lpd so that his
lpd would accept
connections from his
rlprd.
However, if the machine the user wants to print to is not running unix (but is
running an
lpd) (i.e. Windows, WinNT, etc) -- Then that user can
configure his
lpd to accept connections from an
rlprd running
somewhere on the network, and use that
rlprd as a proxy for
rlpr.
For more on this mess, see
rlprd(8).
EXAMPLES¶
- WITHOUT A PROXY (rlpr is setuid root)
sun%
rlpr --printer=hp4l@foo.bar.org foo.c
prints
foo.c to the printer
hp4l on the host
foo.bar.org
(assuming foo.bar.org has been configured to accept print requests from host
sun in its
/etc/hosts.lpd).
sun%
who | rlpr --printer=hp4l@foo.bar.org
prints the output of
who(1) to the printer
hp4l on the host
foo.bar.org.
- WITH A PROXY (rlpr is a normal program)
sun%
rlpr -Xfoo.bar.org --printer=hp4l@foo.bar.org foo.c
prints
foo.c to the printer
hp4l on the host
foo.bar.org
using
foo.bar.org as a proxyhost. Under this configuration, foo.bar.org
needs to be configured to accept print requests from the proxy (itself) and
not from sun. In situations where the proxy and the printhost are not
the same machine, this can lead to some security holes due to the original
lameness of berkeley
lpd's host-based security.
NOTE: if a proxyhost isn't specified anywhere,
rlpr assumes one
isn't necessary.
OS-SPECIFIC EXTENSIONS¶
Some vendors have added features to their BSD-based
lpr products, which
are upwardly compatible with
lpr but incompatible with one another. To
support these extensions,
rlpr allows the user to indicate what
operating system to emulate and provide a string of OS-specific options,
either through commandline arguments or environment variables.
Note that for correct operation, these extensions should be only used when
interoperating with an
lpd provided by the vendor for the indicated
operating system.
ENVIRONMENT VARIABLES¶
The following environment variables are used by
rlpr:
- RLPR_EXTENSION
- Specifies the operating system to interpret OS-specific arguments relative
to.
- RLPR_EXTARGS
- Specifies the OS-specific arguments.
- RLPR_PRINTHOST
- Specifies the default host to print to.
- PRINTER or LPDEST
- Specifies a default printer (printqueue) to use.
First PRINTER is consulted, then LPDEST.
Note that one can also specify the host to print to by setting printer to be
printer@hostname. This may be more convenient than setting
RLPR_PRINTHOST, but will confuse the traditional BSD print
commands.
- RLPR_PROXYHOST
- Specifies a proxy host to use, if necessary.
- RLPR_CONFDIR
-
If RLPR_CONFDIR is set, it is the directory containing the
system-wide rlprrc file. By default, /etc is used.
- TMPDIR
-
If TMPDIR is set, it is used for temporary files. By default,
/tmp is used.
FILES¶
~/.rlprrc Personal printer/host database
$TMPDIR/cf* Temporary control files on local machine
$TMPDIR/df* Temporary data file for jobs from stdin
/var/spool/*/cf* Temporary control files on printhost
/var/spool/*/df* Temporary data files on printhost
/etc/hosts.lpd Host-based security on printhost
/etc/passwd Personal identification
/etc/rlprrc System-wide printer/host database (by default)
SEE ALSO¶
rlpq(1),
rlprm(1),
rlprd(8),
rlprrc(5),
lpr(1)
AUTHOR¶
meem <meem@gnu.org>
BUGS / LIMITATIONS¶
Some evil applications have
lpr hardcoded into them.