iQueue LPD/LPR printing connectivity for Novell NetWare 3.1x & 4.0x August 1994 The information in this document is subject to change without notice and should not be construed as a commitment by Smart Systems. Smart Systems assumes no responsibility for any errors that may appear in this document. DEC, VMS, DECnet are registered trademarks of Digital Equipment Corporation. UNIX is a registered trademark of AT&T. MS-DOS is a registered trademark of Microsoft Corporation. NetWare and Novell are registered trademarks of Novell Inc. All other brand and product names are trademarks or registered trademarks of their respective companies. Copyright ©1992-1994 Quentin Smart, SMART SYSTEMS. 1.1 Introduction iQueue provides a pair of NetWare Loadable Modules (NLM) which implement the Berkeley Line Printer Daemon (RFC1179, LPD) protocol. This is the de facto standard remote printing protocol for UNIX. The LPD protocol that layers on top of TCP/IP is also supported by many other operating systems. The LPD NLM allows a NetWare file server to accept print jobs from systems supporting the LPD protocol. NetWare queue inquiry and job deletion are supported by the UNIX LPQ and LPRM commands. The LPR NLM allows a NetWare file server to service local NetWare print-queues for transmission via the LPD protocol to remote hosts. If you have not been supplied with authorisation keys this software will run in demonstration mode (except for un-keyed versions of the software). The implication of this is that the NLMs will terminate and unload after one hour. Please see the file order.inf for further information. The configuration of the UNIX (or other) host is not addressed here. You will need to consult with the system administrator responsible for the remote host. 1.2 Prerequisites Ensure the TCPIP.NLM is loaded and configured correctly on your NetWare server. Refer to the TCP/IP Transport Supervisors Guide included with your NetWare documentation set, or the Novell technical note NetWare TCP/IP Installation and Configuration on a NetWare 3.11 Fileserver available as NWTCP.TXT from any Novell FTP mirror in NOVLIB 8. It is strongly recomended that TCPIP.NLM be version 2.02m or later, this is found on a NetWare archive as TCP188.EXE. If you are running NetWare 3.11 you may not have the required support NLM NWSNUT, without this LPDSET.NLM will report missing symbols. NWSNUT can be obtained as part of the Novell update LIBUP4.EXE. This file can be obtained from ftp.novell.com or Netwire on CompuServe. Enter the names and addresses of the remote TCP/IP hosts that you wish to print to and from into the sys:\etc\hosts file on the NetWare server. Check that the TCP/IP connection is working by PINGing the NetWare server from the remote host. NetWare 4.xx environments require that Bindery Emulation is enabled. 2.0 UNIX-to-NetWare Printing 2.1 Installing the NetWare NLM Copy the LPD.NLM, LPD.PS and LPDSET.NLM from the distribution directory to the sys:\system directory on your target server. On the File Server Console type load LPD [verbose] [text] [threads=x] This will load and start the LPD server software, presenting the status screen. To switch between console screens type Ctrl-ESC. The command line options for LPD are: auth_key The required server specific authorisation key. Note site licence versions of the software will not require a key. verbose The status screen will display debugging information. text All the inward queues are text queues and will have the CR to CR/LF filter applied. threads= Allows performance tuning by increasing or decreasing the number of LPD server threads, this could be reduced on small servers to lower memory overhead or increased in high volume environments. Idle threads use no CPU resource. The range is 1 through 10 with the default being 5. To ensure that the printer daemon NLM is loaded each time your file server starts, edit with a text editor or the INSTALL NLM sys:\system\autoexec.ncf , adding the load command to the end of script. e.g. load LPD abb543e text threads=3 2.2 Configuring Queues for LPD Once the LPD NLM is loaded all print queues on the NetWare server are available to receive LPD print jobs. Configuration of individual queue options is done with the LPDSET.NLM, at the console prompt enter load LPDSET. Select the queue to configure by pressing enter, the screen shown below is displayed. Secure: By default (No) any remote user may print to a NetWare queue via the LPD NLM. Setting a queue to secure causes the NLM to attempt a match between the remote userid and a local NetWare user. If the match or NetWare security fails the job is discarded. Secure queues require that the NetWare user has a valid account (e.g. not disabled or expired) and is a user of the queue as defined in PCONSOLE. Care must be taken when limiting concurrent NetWare logins for users as a count against this restriction is used when a print job is being received. This option is useful in environments where printer accounting is used. Filter: Converts the incoming data, the currently available filters are: Binary Passes data without change (default). Text Converts CR to CR/LF characters. Fortran Converts print jobs with fortran carriage control characters into formatted form. Text -> Postscript Converts plain text files into the Postscript printer language. If the inward job is already in Postscript form no conversion is performed. Different character mapping (for Scandinavian countries) can be configured by editing the file LPD.PS with a text editor. When the 'text' option is used with the LPD load command the filter is Text for every queue regardless of this setting. Configure Filter: This option is only available for the Postscript filter. Selection presents a form for setting paper size, margins and font. Measurements are in points, 72 points = 1 inch, 28.35 points = 1 cm. Suppress Banner: Disables the printer banner page for all inward jobs on this queue. Banners should be suppressed for Postscript print queues unless the NetWare print server is "Postscript aware" (e.g. ATPS). Suppress Form Feed: Sets the 'suppress form feed at end of job' flag in the NetWare print entry. This instructs the print server not to print a blank page at the end of the print job. Form Number: Will set the form number on print job entries. Printer Init: Enable the sending of data before each print job. This is used to set such options as font and orientation with printer specific control codes. Selecting 'file' indicates the initialisation information is held in a binary file that you specify, selecting 'string' indicates that you will directly specify the control characters. The latter is a more efficient method. Enter Data: Select this to enter the init sequence data or filename. File names must include the NetWare volume name, e.g. sys:\etc\hpinit Strings are typed directly, control characters are entered as their ascii value enclosed in <> e.g. <026>, entering a less than symbol is done as << Printer Reset: As for init except the data is sent after the print job. 2.3 LPR Options Several job options can be controlled from the sending end of the printing operation. All of the following options are case sensitive. If any option is to be permanent, using LPDSET NLM configuration tool is the preferred method. 2.3.1 Banner Pages If the remote LPR software is fully Berkeley LPD compatible then suppression on a job by job basis can be achieved with the command: lpr -sh filename The permanent version of this is to add the :sh command to the printcap file. (Refer Appendix B) If the sh option does not work with your LPR then the following can be used: lpr -J/nb filename 2.3.2 Form Feed Suppression If you require Form Feeds to be filtered by the LPD NLM the /nff switch may be used with the LPR command. As with all /J modifiers a combination is acceptable: lpr -J/nff filename or lpr -J/nff/nb filename 2.3.3 Form Number If you require a particular NetWare form number for a print job this can be set with the /f:x option. For form number 10 the following would be used: lpr -J/f:10 filename 2.4 Remote Host Configuration This will mainly depend on the LPR software your remote host is using. You should refer to the documentation supplied with the system. Information you will need however is the IP address (or name) of the NetWare file server and the destination print queue name, this is what the remote queue is to be "pointed" at. Not all LPD software adheres to the RFC. Appendix A lists the LPD control file entries recognised by the LPD NLM. 2.5 Privileged Hosts By default any foreign host can print to your NetWare server. Limiting which hosts can access queues on a server is done by creating the text file sys:\etc\hosts.lpd, place the names of authorised hosts (from those defined in sys:\etc\hosts) one per line. e.g. alpha.foo.bar.com beta.foo.bar.com 2.6 Queue Job Ownership If a queue is defined as 'secure', the local user with the same userid as the remote job submitter will own the job. If a queue is not 'secure' queue entries spooled from a remote host will be entered into NetWare queues with the owner being the same name as your fileserver. The implication of this is any printing accounting done by the NetWare print server may be incorrect. However remote user identification is provided for banner printing and PCONSOLE inquiry. 2.7 LPQ and LPRM Commands The remote host can query all your NetWare queues with the lpq command. The lprm command allows the removal of print jobs. The security applying to this command follows the UNIX standard with a user able to delete only their own jobs and the 'root' user all jobs. When a queue is defined as secure this is enhanced by supporting NetWare queue operator rights. 3.0 NetWare-to-UNIX Printing 3.1 Installing the NetWare NLM Copy the LPR.NLM from the distribution directory to the SYS:SYSTEM directory on your target server. Once the PRINTCAP file has been created (see below), on the File Server Console type: load LPR [verbose] [threads=x] [StripCtrlD] [BadResp] [dbu] [nam] auth_key The required server specific authorisation key. Note site license versions of the software will not require a key. verbose The status screen will display debugging information. threads= Allows performance tuning by increasing or decreasing the number of LPR server threads, this could be reduced on small servers to lower memory overhead or increased in high volume environments. Idle threads use no CPU resource. The range is 1 through 10 with the default being 5. StripCtrlD When enabled the LPR NLM will check for and strip Ctrl-D characters from the start of Postscript printjobs. UNIX connected Postscript printers or filters often read a Ctrl-D as an end of job indicator and discard the Postscript data. BadResp This is a special flag,see the troubleshooting section below. dbu Drop bad jobs. With this switch is on jobs rejected by the remote host when the control file is sent will be deleted from the queue. This option is useful when userid mapping is enabled at the remote end and you wish to drop jobs from invalid users. nam This will force LPR to use the Name Field from the capture command rather than the NetWare login ID as the owner of the printjob. This may be useful for accounting purposes. The capture name field is set with the capture /nam= parameter. To ensure that the printer server NLM is loaded each time your file server starts, edit with a text editor or the INSTALL NLM sys:\system\autoexec.ncf , adding the load command to the end of script. e.g. load LPR ae550034 verbose threads=3 This will load and start the LPR software. The software presents the status screen, this screen is used to monitor the operation of the software. To switch between console screens type CTRL-ESC. 3.2 Print Queue Configuration Using PCONSOLE create a new print server called LPR_DAEMON. Note do not assign a password to it. Create the print queues that are to be served by remote hosts, making LPR_DAEMON their print server. 3.3 Queue Types DOS uses the control character pair Carriage Return/Line Feed (CR/LF) to mark the end of a line in a text file. UNIX however uses only the Line Feed (LF) to mark the end of a line. NetWare has two types of print job, TEXT and BINARY. If the job is flagged as TEXT the LPR NLM strips all CR/LF pairs to the LF character. The NetWare CAPTURE command defaults to TEXT mode, if you need to send a binary file (e.g. to an IBM graphics printer) you should use the capture /NT switch to force the new queue entries to BINARY mode. The "Print Banner" flag of a NetWare print queue entry is also respected and this information is passed to the remote LPD daemon enabling or suppressing banners as required. 3.4 LPR Transfer Notification The NetWare CAPTURE command provides a NOTIFY switch. Enabling this switch causes the LPR NLM to send a broadcast message to the submitting workstation when a print job is successfully transferred to the remote host. 3.5 Printcap File To define outward queues you must create the text file PRINTCAP in the sys:\etc directory, the format of this file is: netware_queue remote_host remote_queue netware_queue remote_host remote_queue ... For example to redirect the local NetWare queue LASER to the remote host foo.bar.com, and the remote queue name is HP_LASER, the following entry would be made: LASER FOO.BAR.COM HP_LASER If you change the PRINTCAP file the LPR NLM must be reloaded before any changes will take effect. 4.1 Troubleshooting If you are having problems then you should check the following: - The LPD or LPR NLM fails to load with symbol not found errors. You must upgrade to a newer version of CLIB (see the prerequisites section of this manual). - LPDSET fails to load with symbol not found errors. You must upgrade to a newer version of CLIB that supports the NWSNUT.NLM - Is the remote host defined in the SYS:ETC/HOSTS file? - Can you ping from the foreign host to your Novell server? - The UNIX hosts rejects your print job. Does your host exist in the remote hosts /etc/hosts.lpd or /etc/hosts.equiv file? - Reload the NLM with the verbose parameter to produce further information on the NLM status screen. - If the inward printout appears to have the next line run-on instead of start from the margin then the print queue type should be set to TEXT. - If jobs received for a Postscript printer do not work, ensure that the banner is being suppressed. Use PCONSOLE to examine a print job to ensure NetWare banners are switched off. - Printing from MS-Windows to a queue re- directed to a Postscript printer either fails to print or prints as text. MS Windows precedes print jobs with a Ctrl-D. Reload the LPR NLM with the StripCtrlD flag. - The printjob sent by LPR is printed by the remote printer but remains in the NetWare queue. The LPR NLM may be receiving what it thinks is an error. Reload the LPR NLM with the BadResp flag. Appendix A - LPD control code interpretation Any LPD control file codes not interpreted are ignored. H "host name" of machine where lpr was done. J "job name" on banner page. If this contains /NB then the NetWare banner is suppressed. L "literal" user's name to print on banner, a NetWare banner is produced if this control code is present. N "name" of file, split into directory, file name for banner header. P "person" remote user sending print job. S this command followed by an X is generated by PLP (Lantronix) printer software to suppress banner pages. f this is a text file. (LPR sends this type for TEXT job entries), l this is file contains control characters. (LPR sends this type for BINARY job entries) Appendix B - UNIX Printcap Entries Below are detailed some of the possible UNIX printcap file entries. printer_name1|printer_name2|printer_nameN|printer_ description:\ :lp=print_device_name:rm=netware_server_name:\ :rp=netware_print_queue_name:sd=local_spool_dir ectory:\ :mx#file_size:rs:sh: printer_name1..printer_nameN These are the names available for UNIX users to access this queue printer_description This is an informational description of the printer print_device_name The name of the print device on the local machine. (e.g. "lp=/dev/matrix") When printing to a remote machine this should be set to nothing (e.g. "lp="). netware_server_name The name of the NetWare server on which the destination queue resides. This name should exist in the /etc/hosts file on the UNIX host. netware_print_queue_name The NetWare print queue. local_spool_directory This is the name of the local spool directory (e.g. "/usr/spool/netware_print_queue_name") printjobs are temporarily stored here before printing. This directory must be manually created. file_size The maximum file size in blocks that can be spooled to this printer. Omit or set this to 0 for unlimited file size. rs Restricts remote users to requiring an account on this system before they can access the printer. If this entry is omitted any user on a "trusted host" may access this printer. sh This will suppress the LPR header (banner) page.