Networking HP PPA DeskJet Printers using SAMBA. The pnm2ppa project team ppa-rpms@users.sourceforge.net v0.12 Feb 10, 2002 This document discusses Networking HP 710C, 720C 820C or 1000C Series (PPA Protocol) HP DeskJet printers with non-Windows Hosts or Clients, using SAMBA. Topics include choosing between transmitting PPA or PostScript across the network, Windows and Linux/Unix Hosts, Windows and Linux/Unix Clients, and emulating a PostScript printer on Windows. (Updated for pnm2ppa-1.04 and later.) ______________________________________________________________________ Table of Contents 1. Networking HP DeskJet PPA printers with SAMBA 1.1 Overview of PPA printers. 1.2 Choice of protocol for sending over the network. 2. Configuring the Printer Host. 2.1 Configuring a Linux/Unix Host to share a PPA printer using Samba. 2.2 Configuring a Windows Host to share a PPA printer with non-Windows Clients. 3. Configuring the Printing Clients. 3.1 Setting up Printing from a Windows Client. 3.2 Setting up Printing from a Linux/Unix Samba Client 4. Emulating a PostScript printer on a Windows Host. 4.1 Installing Ghostscript as the emulation software. 4.2 Adding the fictitious Postscript printer. 4.3 Redirecting the output to the PPA printer. 4.4 Limitations. ______________________________________________________________________ 1. Networking HP DeskJet PPA printers with SAMBA 1.1. Overview of PPA printers. The HP DeskJet 710/712C, 720/722C, 820Cse/820Cxi and 1000Cse/1000Cxi printers are "Winprinters" which are designed only for use with MS Windows operating systems. HP supplies Windows-only software that processes the input data into the proprietary and unpublished PPA ("Printer Performance Architecture") protocol. HP states that these printers are not supported as networked printers, but they in fact function correctly as shared (SMB) printers under MS Windows. In this document, the Host is the computer to which the PPA printer is physically connected, and the Clients are other computers on the network that wish to print documents on the PPA printer. In the Windows printing system, separate copies of the HP PPA printer drivers are installed on each Client, and are run on the Client to produce PPA output that is sent over the network to be spooled on the Host to which the printer is attached. HP's drivers are only supplied for Windows systems. The independently-produced pnm2ppa driver runs on Linux, some other Unix systems, and BeOS. This document describes various tested strategies for using pnm2ppa and the samba suite of SMB tools to allow the PPA printer to be attached to a non-Windows host on a (TCP-based) SMB network, or to allow non-Windows Clients to receive printing services from a Host on the network. 1.2. Choice of protocol for sending over the network. There are two possible ways to send printer data from a Client to the printer Host over the network. o as PPA data, created by a driver on the Client. This is what happens when using conventional printer sharing on Windows. o as PostScript data, created on the Client, which is then translated into PPA instructions by drivers running on the printer Host. Since PPA data is rather large, the first method involves sending larger amounts of data over the network, which may be why HP do not officially support PPA DeskJets as networked printers. It also requires that PPA drivers are installed on the Client. The Host to which the printer is attached can thus provide two classes of printing services: o PPA printing services: the Host accepts PPA-format printing jobs created on the Clients either with HP's native PPA drivers (Windows Clients) or pnm2ppa (Unix/Linux/BeOS Clients); o PostScript printing services: the Host accepts PostScript-format printing jobs created on any postscript-capable Client, and converts them to PPA format using either HP's native PPA drivers (Windows Host) or pnm2ppa (Unix/Linux/BeOS Host); It is useful to set up the Host to offer both types of service, sharing a common spooling system. 2. Configuring the Printer Host. 2.1. Configuring a Linux/Unix Host to share a PPA printer using Samba. It is assumed that pnm2ppa is installed and working to provide local printing services on the Host, and that lpr will invoke a full set of print filters, as (e.g.) in Red Hat 6.2. The PPA printer is installed with the printer name lp, and samba is assumed to be installed. General Samba configuration issues involving security levels, network password, etc, are outside the scope of this document (see the SMB- HOWTO). You must log in as root to configure Samba. Here is a sample entry setting up two public printer shares in the Host's /etc/smb.conf file. The printer HP722C-PPA is for printing by a Client that sends PPA output from pnm2ppa or the HP drivers across the network, and HP722-PS is for Clients that produce PostScript output: [HP722C-PPA] comment = HP 722C printer on Linux (PPA input) path = /var/tmp printer name = lp writable = yes public = yes printable = yes print command = lpr -l -r -h -P %p %s [HP722C-PS] comment = HP 722C printer on Linux (Postscript input) path = /var/tmp printer name = lp writable = yes public = yes printable = yes print command = lpr -r -h -P %p %s The only differences besides the names are that the print command for HP722-PPA uses the " -l " "pass-through" option so print filters are not applied. The path entry uses /var/tmp because this is (presum- ably) a world-readable and -writable area for temporary files. After editing /etc/smb.conf to include these entries, save it, and test its syntax with Samba's testparm utility. Then restart samba (run "/etc/rc.d/init.d/smb restart" on Red Hat). 2.2. Configuring a Windows Host to share a PPA printer with non-Win- dows Clients. The Host is assumed to be a Window 98 system, and the PPA printer is assumed to be a HP722C installed with the native HP PPA drivers supplied on HP's installation CD. Some details may vary on other Windows versions. First set up a shared printer that can accept PPA input from both networked Windows Clients, and from networked non-Windows Clients that use pnm2ppa. o IMPORTANT!: A PPA printer attached to a Windows Host shared with a Client running pnm2ppa has the following limitation: o Bi-Directional communication between the Windows Host and the printer must be disabled. If it is not done, a General Protection Fault will usually occur on the Windows Host when pnm2ppa sends output to the shared printer. (A "Hpfbkg06" error occurs, and the printer becomes nonfunctional until the Windows system is rebooted.) Disabling bi-directional communication appears to be a minor inconvenience: according to HP, the print quality is unaffected, but the "advanced features of the Status Monitor" will no longer send reminders to align the print cartridges after a new cartridge is installed, or send error mes- sages associated with the ink cartridges or the banner lever. You may be able to avoid disabling bi-directional communication by using an emulated Postscript printer to serve non-Windows Clients without using pnm2ppa (see below). To turn off bi-directional communication between the Windows Host and the printer, open the Settings/Printers folder, then right-click on the printer icon, and open the Properties dialog. Select the Details tab, and click on Spool Settings, then choose the setting "Disable bi- directional support for this printer". If you have any difficulties, try rebooting Windows after the change, or see HP's support document http://www.hp.com/cposupport/printers/support_doc/bpd06455.html about disabling bi-directional communication. To set up the Host to share the printer, right-click on its icon in the Settings/Printers folder, and select Sharing, then assign it a Share Name like HP722C-PPA , and enter a Comment Line like "HP 722C printer on Windows 98 (PPA input)". You may now also wish to set up an emulated Postscript printer that accepts Postscript input from the Client, and prints it using HP's PPA drivers running on the Host, instead of on the Client. See the section Emulating a PostScript printer on a Windows Host If you have installed and successfully tested the emulated printer, set it up for sharing on the network. Right-click on its icon in the Settings/Printers folder, and select Sharing, then assign it a Share Name like HP722C-PS, and enter a Comment Line like "HP 722C printer on Windows 98 (PostScript input)". The emulated printer will appear like a Postscript printer to the Clients. If it provides acceptable printing services to the non- Windows clients, you will not need to connect pnm2ppa printers to HP722C-PPA, and will be able to re-enable bi-directional communication between the HP drivers and the printer. (However, the extra processing involved in the emulation may be unacceptably slow, or turn out to use too much of the host's CPU) 3. Configuring the Printing Clients. 3.1. Setting up Printing from a Windows Client. Open the Settings/Printers folder, and start the Add Printer Wizard. Choose to add a Network Printer, and browse the network to find the Printer Shares you configured on the host (e.g., HP722C-PPA and HP722C-PS). If they are not visible, either the Host or the network is not properly configured. Correct the problem before proceding. Normally, you will probably want to use the native Windows HP PPA drivers, so select the printer Share that accepts PPA input (e.g., HP722C-PPA). If the Host is a Windows Host, it will provide the drivers over the network, otherwise you will have to find the printer in the list of available HP Printer drivers, or click on Have Disk and install them from HP's installation CD. You then get a chance to change the name with which the printer will be known on the Client. Finally, you should choose to print a test page. You might instead (or also) want to set up printing services using the Printer Share that accepts Postscript (e.g., HP722C-PS). In that case, if the Host is not a Windows Host, choose a "generic" PostScript printer like the Apple LaserWriter II NT or the Digital turboPrintServer 20/Net. If the test page prints sucessfully, you are finished! 3.2. Setting up Printing from a Linux/Unix Samba Client First examine the network by opening a terminal window and using the command smbclient -L hostname (where "hostname" should be replaced by the network name of the Host to which the printer is attached). This will list the SMB services provided by that Host. (Alternatively, your system may have some graphical front-end to smbclient that allows you to inspect the net- work.) The list should include the Printer Share(s) you configured on the Host (e.g., HP722C-PPA and HP722C-PS). If these are absent, you must first identify and correct the problem. You must now configure the printer. The details of how to do this will vary between Linux/Unix distributions, but there will probably be support for network printing using Samba. If the Printer Share you wish to use is intended to accept PPA input (e.g., HP722C-PPA), configure the Client to use the pnm2ppa driver. If it is intended to accept PostScript input (e.g., HP722C-PS), configure the Client to print to a PostScript printer. You may wish to configure both types of printers, and experiment to see which provides the best printing services on your network. See the SMB-HOWTO documentation for more information. 4. Emulating a PostScript printer on a Windows Host. If you do not have commercial PostScript emulation software for Windows that will work with your HP PPA DeskJet (the author is unaware of any such software that supports PPA printers), you can use Ghostscript together with HP's native Windows drivers. 4.1. Installing Ghostscript as the emulation software. From the Ghostscript home page http://www.cs.wisc.edu/~ghost/ download and install (in this order) the Windows packages of o Ghostscript (PostScript Emulation Software). o GSview (Ghostscript previewer, provides gsprint). o RedMon (printer port redirection utility). (Install these using their setup.exe installation tools, and do not manually set up any configuration files for gsprint or RedMon.) You must now follow the detailed instructions below, and use the Windows "Add Printer Wizard" to add a postscript printer, and then configure it to use the gsprint utility that comes with GSview, and redirect the output to your HP PPA DeskJet using the RedMon utility. 4.2. Adding the fictitious Postscript printer. In the following, I assume your printer is a HP DeskJet 722C, and is installed with its native Windows Drivers as a printer called "HP DeskJet 720C Series". Change printer name entries below as appropriate for your printer model. The following instructions are tested on Windows 98, and may differ on other Windows variants. Open the Settings/Printers folder. First check that the HP PPA Deskjet is correctly installed, using HP's native Windows drivers. Right-click on its icon, and select its Properties dialog. The General Properties screen will open. This shows the exact name that the printer was given when it was installed. Make a note of it, and use the Print Test Page button to confirm that the printer is working. (The "Printer name:" line on the test page will also show the exact name of the HP PPA Deskjet that you will need to use when configuring the emulated postscript printer below). When you are done, click on OK to close the dialog. Now start the Add Printer "Wizard". Make the choices: o install a local printer o select a PostScript printer from the list of printers; (e.g., one of the Apple LaserWriter models: the Laserwriter II NT is known to work; Digital PrintServer models such as the turboPrintServer 20/Net have also been recommended). This will provide a suitable postscript driver. o From the list of Available Ports, choose "FILE: Creates a file on disk" (you will change this after the printer is installed) o set as default printer?: NO o Print test page?: NO 4.3. Redirecting the output to the PPA printer. After the printer has been installed, right-click on its icon, and rename it to something like, e.g., "Ghostscript+HP722C". Then right click again and open its Properties dialog. On the General tab screen, enter something informative in the Comment box, such as " Emulated Postscript printer; output redirected to a HP722C DeskJet printer" (optional). Next select the Details tab. The box "Print using the following driver:" should show the Postscript driver you selected (e.g., Apple LaserWriter II NT). o Click on Add Port. Select other, then Redirected Port, which should be available if RedMon was correctly installed, and click on OK to accept these settings and close the Add Port dialog. On the Details tab screen, The box "Print to the following port:" should now show a redirected port such as "RPT1 [Redirected Port]". o Click on Port Settings. o In the box "Redirect port to the program:", enter the path to the gsprint program. (If you accepted the defaults when installing it, this may be C:\Ghostgum\gsview\gsprint.exe; you may search for it by clicking on Browse). o In the box "arguments for this program are:" enter the arguments to be passed to the gsprint program (there is a document gsprint.htm with more details of these in the folder containing gsprint.exe). Suggested arguments are: -printer "HP DeskJet 720C Series" -color - Replace "HP DeskJet 720C Series" by the (quoted) exact name of the HP PPA DeskJet printer that you made a note of earlier. (If you do not copy this name exactly, including any capitalization or spaces, things may not work!) The -color argument is needed to enable color printing; (Whether you actually get color printing will depend on the local settings of the "HP DeskJet 720C Series" printer that really prints the document.) The final " - " is required: without it, the output of gsprint will not get redi- rected to the printer. o The box "Output" should show "Program handles output". o In the box "Run", select "hidden". o The box "Shutdown delay" will say "300 seconds". Print jobs for which processing by gsprint takes longer than this will be terminated, to avoid blocking the printer spool queue. Increase this limit if necessary. Now click on OK to close the Port Settings dialog. o Click on Spool Settings, and select "Disable bi-directional support for this printer", and click OK. Finally, again select the General tab, and test the installation by clicking on "Print a test page". If it works, you are finished setting up Postscript emulation. Click OK to exit the Printer Properties dialog. (If you have problems, first check that you made the correct entries in the Printer Properties dialogs, especially check that you did not make any typing errors in the exact name for the PPA DeskJet printer in the gsprint arguments box, which must correspond exactly to the "Printer name" given to the HP PPA printer). If the problems persist, you might get guidance from the gsprint and RedMon documentation; look in the folders where these were installed.) You now have a working emulated "Postscript printer" that can now be shared over a network. (The "sharing" options will now be available if you right-click on the emulated printer's icon.) 4.4. Limitations. This emulated postscript printer is most useful for providing printing services to non-Windows Clients on a samba network, but can be also be used by Windows Clients with the following limitations: o Windows Clients will be able to select Print Settings only for the visible ("front end") "Postscript printer", but not for the hidden ("back end") HP PPA DeskJet printer that actually does the printing. o Changes in the local Print Settings of the PPA driver for the DeskJet printer on the Host system (but not on Client systems, if it too is shared) will affect network printing by the "Postscript printer". o Since the visible "Postscript printer" falsely advertises its identity, some of its Print Settings options seen by users on the Clients may not be valid. o The extra processing on the printer Host may make printing rather slow compared to native Windows printing.