11.5. Printing to a networked printer
11.5. Printing to a networked printer
Many printers come with an ethernet interface which you can print
to directly, typically using the LPD protocol. You should
follow the instructions that came with your printer or its network
adaptor, but in general, such printers are "running" lpd, and
provide one or more queues which you can print to. An HP, for
example, might work with a printcap like:
lj-5|remote-hplj:\
:sh:\
:sd=/var/spool/lpd/lj-5:\
:rm=printer.name.com:\
:rp=raw:
|
HP Laserjet printers with JetDirect interfaces generally support
two built in lpd queues - "raw" which accepts PCL (and possibly
Postscript) and "text" which accepts straight ascii (and copes
automatically with the staircase effect). If you've got a
JetDirect Plus3 three-port box, the queues are named "raw1",
"text2", and so forth.
Note that the ISS company has identified an assortment of denial
of service attacks which hang HP Jetdirect interfaces. Most of
these have been addressed beginning in Fall 98. These sorts of
problems are common in embedded code; few appliance-style devices
should be exposed to general Internet traffic.
In a large scale environment, especially a large environment where
some printers do not support PostScript, it may be useful to
establish a dedicated print server to which all machines print and
on which all ghostscript jobs are run. This will allow the queue
to be paused or reordered using the topq and lprm commands.
This also allows your GNU/Linux box to act as a spool server for the
printer so that your network users can complete their print jobs
quickly and get on with things without waiting for the printer to
print any other job that someone else has sent. This is suggested
too if you have unfixable older HP Jetdirects; it reduces the
likelihood of the printers wedging.
To do this, set up a queue on your linux box that points at the
ethernet equipped HP LJ (as above). Now set up all the clients on
your LAN to point at the LPD queue (eg lj-5 in the example above).
Some HP network printers apparently don't heed the banner page
setting sent by clients; you can turn off their internally
generated banner page by telnetting to the printer, hitting return
twice, typing "banner: 0" followed by "quit". There are other
settings you can change this way, as well; type "?" to see a list.
The full range of settings can be controlled with HP's webJetAdmin
software. This package runs as a daemon, and accepts http
requests on a designated port. It serves up forms and Java
applets which can control HP printers on the network. In theory,
it can also control Unix print queues, but it does so using the
rexec service, which is completely unsecure. I don't advise using
that feature.
11.5.1. To AppSocket Devices
Some printers (and printer networking "black boxes") support only
a cheesy little non-protocol involving plain TCP connections;
this is sometimes called the "AppSocket" protocol. Notable in
this category are early-model JetDirect (including some
JetDirectEx) cards. Basically, to print to the printer, you must
open a TCP connection to the printer on a specified port
(typically 9100, or 9100, 9101 and 9102 for three-port boxes) and
stuff your print job into it. LPRng has built-in support for
stuffing print jobs into random TCP ports, but with BSD lpd it's
not so easy. The best thing is probably to obtain and use the
little utility called netcat.
Failing that, it can be implemented, among other ways, in Perl
using the program below. For better performance, use the
program netcat ("nc"), which does much the same thing in a
general purpose way. Most distributions should have netcat
available in prepackaged form.