---
name: "pcnfsd"
section: "8"
platform: "linux"
package: "netstd"
version: "3.07-2hamm.5"
release: "Debian 2.0 (Hamm)"
platforms: ["linux"]
url: "https://new.carta.tech/pcnfsd"
---

# pcnfsd(8)

(PC)NFS authentication and print request server

## NAME

pcnfsd - (PC)NFS authentication and print request server

## SYNOPSIS

**/usr/sbin/rpc.pcnfsd**

## AVAILABILITY

This program is freely redistributable.

## DESCRIPTION

**pcnfsd** is an RPC server that supports 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.d/rc.inet2** or by the [**inetd**(8)](/inetd/8.md) 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.

## AUTHENTICATION

When  **pcnfsd** receives a  **PCNFSD\_AUTH** or **PCNFSD2\_AUTH** request, it will "log in" the user by validating the username and password and returning the corresponding uid, gids, home directory, and umask. If  **pcnfsd** was built with the **WTMP** compile-time option, it will also append a record to the [**wtmp**(5)](/wtmp/5.md) data base. If you do not wish to record PC "logins" in this way, you should add a line of the form

**wtmp off**

to the **/etc/pcnfsd.conf** file.

By default,  **pcnfsd** will only allow authentication or print requests for users with uids in the range 100 to 60002. (This corresponds in SVR4 to the range for non-system accounts.) To override this, you may add a line of the form

**uidrange** *range\[,range\]...*

to the  **/etc/pcnfsd.conf** file. Here, each *range* is of the form

*uid*

or

*uid*-*uid*

indicating an inclusive range.

## PRINTING

**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 **/var/spool/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

**spooldir** *path*

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

**printer** *name alias-for command*

*name* is the name of the printer you want to define. *alias-for* is the name of a "real" printer which corresponds to this printer. For  example, a request to display the queue for *name* will be translated into the corresponding request for the printer *alias-for*. 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.) *command* is a command which will be executed whenever a file is printed on *name*. 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 *command*. Within *command* the following tokens will be replaced:

- **Token**

  **Substitution**

- **$FILE**

  Replaced by the full path name of the print data file. When the command has been executed, the file will be unlinked.

- **$USER**

  Replaced by the username of the user logged in to the client system.

- **$HOST**

  Replaced by the host name of the client system.

Consider the following example **/etc/pcnfsd.conf** file:

printer rotated lw /usr/bin/genscript -2r $FILE\
 printer test - /bin/cp $FILE /var/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  **/var/tmp.** Any request to list the queue, check the status, etc. of printer **test** will be rejected because the *alias-for* has been specified as "-".

## RECONFIGURATION

**pcnfsd** will detect when printers are added or deleted and will rebuild its list of valid printers. To do this, it checks the modification time of **/etc/printcap** for BSD-style systems or **/etc/lp/printers** for SVR4-based systems. However, it does not monitor the file **/etc/pcnfsd.conf** for updates; if you change this file, it is still necessary to kill and restart **pcnfsd** in order that the changes can take effect.

## FILES

- **/etc/pcnfsd.conf**

  ## SEE ALSO

[**lp**(1)](/lp/1.md) [**lpstat**(1)](/lpstat/1.md) [**lpq**(1)](/lpq/1.md)
