RPRINT(1) Contributed Software Manual RPRINT(1)NAMErprint — remote printing utility using a raw bidirectional tcp connection
SYNOPSISrprint [-a number_of_attempts,delay_in_seconds] [-b buffer_size] [-d]
[-e] [-E] [-f file_name] [-i number_of_attempts,delay_in_seconds]
[-l] [-p port_number[,port_number]]
[-r number_of_attempts,delay_in_seconds]
[-s final_delay_in_seconds] [-t timeout_in_seconds] [-u]
[-w warning_period_in_seconds] [-x xmit_delay_in_seconds]
{printer_name | printer_address}
DESCRIPTION
The rprint utility establishes a bidirectional raw tcp connection to a
network printer, usually on port 9100. In case of PostScript(TM) print‐
ers, rprint may be directed to query the printer for accounting and
printer status information.
Although rprint can be used interactively, too, it is normally be invoked
by an lpd(8) input filter program.
OPTIONS
Some options are applicable for PostScript(TM) printers only and distin‐
guished from the others by the leading string (PS) in the description
text.
Available options are:
-a number_of_attempts,delay_in_seconds
(PS) Inquires the page counter of the printer before sending
any data and after having sent all data. The inquiry is done
at less once, but normally multiple times until either two
consecutive inquiries return the same page count or the maxi‐
mal number of attempts given by the first part of the argu‐
ment would be exceeded. Between each pair of inquiries there
will be a delay the amount of which is given by the second
part of the argument in seconds. Finally, the total number of
pages printed will be calculated and printed on standard out‐
put.
-b buffer_size
Sets the size of the send and receive buffer in bytes; rprint
will attempt to transmit data to the printer in packets of
this size. The default buffer size is 4096 bytes.
-d Turns on debug mode. All data sent and received as well as
some additional information will be printed to the standard
error output.
-e (PS) Causes rprint to send an end-of-file character after
print job transmission and to wait for an acknowledgement.
-E (PS) Similar do -e, but causes rprint to wait for an acknowl‐
edgement only for the time period specified with -a or -s.
-f file_name
Name of the file containing the data to print. If this
options is not specified, data to send to the printer are
read from standard input.
-i number_of_attempts,delay_in_seconds
(PS) rprint will inquire the printer status before sending
and after having sent all data and will wait for the printer
to be idle before taking any other action. The inquiry will
be done for the specified number of times with a delay of the
specified number of seconds between each inquiry. Please note
that many PostScript(TM) printers will never report an idle
status after a tcp connection has been established.
-l Literal printing; needed for transmitting binary data. In
normal non-literal operation, rprint will replace each byte
of the print data representing one of the characters ^C
(003), ^D (004) and ^T (020) by a space character due to
their special meaning for PostScript(TM) interpreters.
-p port_number,[port_number]
Port numbers on the printer side to send data to and to
receive data from. If only one port number is specified, it
will be used for sending and receiving data. If this option
is not specified, rprint will assume the jetdirect port 9100
by default which is used by most printer network interfaces
for raw tcp communication. Please note that the lpd(8) print‐
ing protocol according to RFC1179 is not implemented in
rprint and thus rprint will not be able to make use of a con‐
nection to a printer on port 515.
-r number_of_attempts,delay_in_seconds
By default, rprint will retry to establish a connection to a
network printer for 60 times with a delay of one second
before each retry if the connection cannot be established
immediately. Different values can be specified here.
-s final_delay_in_seconds
After having sent all data to the printer, rprint will wait
some time for an unrequired and possibly delayed printer
reply. The default value for this time is five seconds, dif‐
ferent values can be specified here. A delay time specified
by -a will override any value given with -s.
-t timeout_in_seconds
Specifies a timeout value in seconds after which rprint will
give up to wait for a printer reply required by one of the
options -a, -e, -i or -u. The default value is 1800 seconds.
Similarly, rprint will give up to send data to the printer
after this time if the printer does not accept data anymore.
-u (PS) Causes rprint to inquire the printer status before send‐
ing and after having sent all data.
-w warning_period_in_seconds
While trying to send data to the printer without success, or
while waiting for a printer reply required by one of the
options -a, -e, -i or -u, rprint will write warning messages
to the system log each number of seconds specified here. If
this options is not specified, the default value will be 300
seconds.
-x xmit_delay_in_seconds
Network printers are often not capable to receive data with
the same data rate computer systems could achieve when send‐
ing to an equivalent counterpart. Thus rprint will delay the
next attempt to transmit a packet by the time quantum given
here if the printer is not ready to receive data. The default
value of the transmit delay time is 0.1 seconds. Whereas in
general rprint accepts integer values as arguments only, here
and only here a floating point value may be given.
IMPLEMENTATION NOTESrprint installs handlers for the signals SIGINT, SIGPIPE and SIGTERM and
tries to shut down a connection to a printer gently after SIGINT or
SIGTERM have been received.
An unexpected connection loss indicated by SIGPIPE will be written to the
system log.
EXAMPLES
A simple example working with nearly all types of network printers offer‐
ing a raw tcp port 9100 is:
rprint-f printjob.ps -l 192.168.1.55
192.168.1.55 is assumed to be the ip address of the network interface of
the printer in this example.
When sending to a Hewlett Packard LaserJet 8000 DN printer in Post‐
Script(TM) mode (see BUGS section), the next example will apply:
rprint-a6,10 -e -i60,1 -p9100 hp8000
hp8000 is assumed to be the hostname of the printer resolvable by the
system. Please note that there is some experimenting necessary for each
printer model to find out the applicable options and to adjust the corre‐
sponding arguments.
When invoking rprint within an input filter used by lpd(8) the following
skeleton may help to code the input filter:
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
rprint 192.168.1.55 1>&2 && exit 0
exit 2
In the printcap(5) file, the printer will be be defined like a local
printer. No real device file will be assigned, of course, but e.g.
lp=/dev/null may be used.
DIAGNOSTICSrprint writes some information to standard error output in an abbreviated
manner while communicating with the printer. The extent of information
given depends on the options specified. Following example resulting from
the second example given above (Hewlett Packard LaserJet 8000 DN) will be
used for an explanation:
i2098...............16x.16x.16x.16x.16x.16x.16x.16x.$i2101
#3 page(s)
The letter i shows that the printer is idle. The numbers 2098 and 2101
are the values of the page counter before sending and after having sent
the print job. Each dot . indicates a data packet (the size of which is
equal to the buffer size) that has been sent to the printer. After 16
packets have been sent, only each 16th packet transmission is shown by
16x. The dollar sign $ shows that the printer has acknowledged the end-
of-file character sent by rprint after transmitting all data. The line #3
page(s) is written to standard output and gives the number of pages
printed; it may be used for accounting purposes.
The character indicating the status of the printer may be one of the fol‐
lowing:
b busy
e error
i idle
n initializing
o offline
p printing
r warming
u unknown
w waiting
Instead of the dollar sign $ a colon : will be printed to indicate the
end of data transfer if end-of-file acknowledgement by the printer is not
required. If it is required but missing an exclamation point ! will be
printed.
rprint should print self-explaining error messages to the standard error
output in case of error conditions.
RETURN VALUES
The exit code rprint returns to the parent process may take one of the
following values:
0 Nothing went wrong, data transmission has been successful.
1 An invalid option, option argument, printer name or printer address
has been given, or memory allocation during program initialization
failed.
2 The file containing the data to print or the streaming socket could
not be opened, or the latter one could not be set to non-blocking, or
the connection could not be established, or the printer was not idle
or did not report the page counter or the status information cor‐
rectly, or the signal handlers could not be installed or de-
installed, or the connection timed out.
3 The printer reported a PostScript(TM) error within the print job and
ignored the rest of the job.
SEE ALSOprintcap(5), lpd(8)HISTORYrprint has originally been developed for FreeBSD 2.1.5-RELEASE and later
been ported to newer releases. It is not part of the base system.
BUGS
Some of the special options of rprint useful for PostScript(TM) printers
only require the PostScript(TM) interpreter already to be active when the
tcp connection gets established. These options do not work with a printer
automatically selecting an interpreter depending on the data to print.
For example, Hewlett Packard printers offering PostScript(TM) or PCL(TM)
selection automatically depending on the print job, have to be configured
with PERSONALITY=PS to disable automatic selection.
AUTHOR
Konrad Heuer ⟨kheuer@gwdu60.gwdg.de⟩
BSD June 19th, 2001 BSD