pcnfsd is an RPC server that supports Sun ONC clients on PC (DOS, OS/2, Macintosh, and other) systems. This page describes version two of the pcnfsd server.
rpc.pcnfsd may be started from /etc/rc.local or by the inetd(8) superdaemon. It reads the configuration file /etc/pcnfsd.conf if present, and then services RPC requests directed to program number 150001. This release of the pcnfsd daemon supports both version 1 and version 2 of the pcnfsd protocol. Consult the rpcgen source file pcnfsd.x for details of the protocols.
The requests serviced by pcnfsd fall into three categories: authentication, printing, and other. Only the authentication and printing services have administrative significance.
pcnfsd
supports a printing model based on the use of NFS to transfer
the actual print data from the client to the server. The client system
issues a
PCNFSD_PR_INIT
or
PCNFSD2_PR_INIT
request, and the server returns the path to a spool directory which
the client may use and which is exported by NFS.
pcnfsd
creates a subdirectory for each of its clients: the parent
directory is normally
/export/pcnfs
and the subdirectory is the hostname of the client system.
If you wish to use a different parent directory, you should add a
line of the form
ssppoooollddiirr _p_a_t_h
to the
/etc/pcnfsd.conf
file.
Once a client has mounted the spool directory using NFS and has transferred print data to a file in this directory, it will issue a PCNFSD_PR_START or PCNFSD2_PR_START request. pcnfsd handles this, and most other print-related requests, by constructing a command based on the printing services of the server operating system and executing the command using the identity of the PC user. Since this involves set-user-id privileges, pcnfsd must be run as root.
Every print request from the client includes the name of the printer
which is to be used. In SunOS, this name corresponds to a printer
definition in the
/etc/printcap(5)
database. If you wish to define a non-standard way of processing
print data, you should define a new printer and arrange for the
client to print to this printer. There are two ways of setting up a new printer.
The first involves the addition of an entry to
/etc/printcap(5)
and the creation of filters to perform the required processing. This
is outside the scope of this discussion. In addition,
pcnfsd
includes a mechanism by which you can define virtual printers known
only to
pcnfsd
clients. Each printer is defined by a line in the
/etc/pcnfsd.conf
file of the following form
pprriinntteerr _n_a_m_e _a_l_i_a_s_-_f_o_r _c_o_m_m_a_n_d
_n_a_m_e is the name of the printer you want to define. _a_l_i_a_s_-_f_o_r
is the name of a "real" printer which corresponds to this printer. For
example, a request to
display the queue for _n_a_m_e will be translated into the
corresponding request for the printer _a_l_i_a_s_-_f_o_r. If you have
defined a printer in such a way that there is no "real" printer to
which it corresponds, use a single "-" for this field. (See the
definition of the printer
test
below for an example.) _c_o_m_m_a_n_d is a
command which will be executed whenever a file is printed on _n_a_m_e.
This command is executed by the Bourne shell,
/bin/sh
using the
-c
option. For complex operations you should
construct an executable shell program and invoke that in _c_o_m_m_a_n_d.
Within _c_o_m_m_a_n_d the following tokens will be replaced:
Consider the following example
/etc/pcnfsd.conf
file:
printer rotated lw /usr/local/bin/enscript -2r $FILE
printer test - /usr/bin/cp $FILE /usr/tmp/$HOST-$USER
If a client system prints a job on the printer
rotated
the utility
enscript
will be invoked to pre-process the file $FILE. In this
case, the
-2r
option causes the file to be printed in two-column rotated format
on the default PostScript® printer.
If the client requests a list of the print queue for the printer
rotated
the
pcnfsd
daemon will translate this into a request for a listing for
the printer
lw.
The printer test is used only for testing. Any file sent to this printer will be copied into /usr/tmp. Any request to list the queue, check the status, etc. of printer test will be rejected because the _a_l_i_a_s_-_f_o_r has been specified as "-".