p910nd - port 9100+n printer daemon
[ -f device
] [ -i bindaddr
] [ -bvd
is a small daemon that copies any data received on the port it is
listening on to the corresponding printer port. It is primarily intended for
diskless Linux hosts running as printer drivers but there is no reason why it
could not be used on diskful hosts. Port 9100 is copied to /dev/lp0, 9101 to
/dev/lp1 and 9102 to /dev/lp2. The default is port 9100 to /dev/lp0.
option can be used to specify a different printer device, e.g.
option can be used to specify binding to one address instead of
all interfaces which is the default.
option turns on bidirectional copying.
option shows the version number.
option causes the daemon to run in the foreground in standalone
mode and prints log messages to stdout for debugging.
can be run as a standalone daemon or from (x)inetd. It will
automatically detect if it is running under (x)inetd.
A sample SysVinit script, p910nd.sh
, is provided for operation as a
will change its name under ps to match the printer port,
i.e. p9100d, p9101d
When running under (x)inetd, the /etc/inetd.conf
entry should look
something like this (with tcpwrappers protection):
p9101 stream tcp nowait root /usr/sbin/tcpd /sbin/p910nd
Don't forget to add an entry in /etc/services
for the corresponding port.
If operating with lprng, use the host%port syntax for the printer device to send
jobs to it.
If operating with CUPS, this is supported as the AppSocket protocol, also known
as the JetDirect (probably TM) protocol.
If operating with classic Berkeley lpd, a sample client, client.pl
provided. This should be installed as the ifilter (if=) in /etc/printcap.
should be installed as the ofilter (of=) in /etc/printcap. It
may be necessary to create a dummy spool file for lpd (lp=). This file will be
opened but not written to. The corresponding C versions are left as an
exercise for the reader.
When running under inetd, more than one instance could be started. To avoid
problems with multiple instances attempting to access the printer at the same
time, make sure that only one client is active at any one time. This can be
done by designating one host as the spooler and sending all jobs to this host.
You will probably need to set up an intermediate queue anyway to provide print
If built with USE_WRAP, it uses the libwrap library (tcpwrappers). Access
control can be done with /etc/hosts.allow and /etc/hosts.deny. The service
name is p910nd.
logs error messages to syslog.
/var/run/p9100d.pid, /var/lock/p910nd/p9100d, /etc/hosts.allow, /etc/hosts.deny
is under the GNU Public License Version 2
Ken Yap (greenpossum ATSIGN users PERIOD sourceforge PERIOD net)
Version 0.97 January 2014