I've wasted a couple of days struggling with CUPS/pap but now it's working for me. Here are some instructions that should help others get ethertalk printing to work with Cups (1.1.14, at least). 1. Install netatalk and verify that pap works by sending a simple postscript file to your target printer with: pap -E -p 'Printer name@zone' filename (Some printers don't need the -E, many do. If you omit it where it is needed pap will hang. If you use it where it is not needed nothing bad will happen. So always include it.) 2. Obtain the modified pap backend file from: ftp://saf.bio.caltech.edu/pub/software/linux_or_unix_tools/pap and install it chmod 755 in /usr/lib/cups/backend (or wherever your backend programs live). The original was from "Rupi". Thanks Rupi! WARNING: The locations of PLOG, pap,psf, and nbplkup are set on lines 34-37 of the pap script. Your distro may put this log file and/or the pap programs in a different place. If so, edit the script to reflect the appropriate locations on your system. (Thank you Ronald Sprouse for suggesting this warning.) 3. If you have a PPD for a printer but it isn't in foomatic already place it in the appropriate place under /usr/share/cups/model/foomatic/ and restart cups. On linux: /etc/rc.d/init.d/cups restart. 4. Go to the web printers interface at http://localhost:631/printers and click on "add printers". If you are asked for a username/password give root/(root password). 5. Fill in a printer name (something simple, alphanumeric and underscores only), location and description and click on continue. Example: name: myprinter location: 123 Big Building description: HP 4050N 6. At the "Device for xxx" screen you should see a list of the printers on your local zone in the syntax: AppleTalk LaserWriter (Foo bar@net123) Write down the exact spelling of the name. Select any of the appletalk printers and click continue. Note, doing this only tells CUPS that you have a pap device, it DOES NOT tell it the ethertalk address of that device. 6b. If the printer you want is in another zone (named "Blah") open up a terminal session and use the command: nbplkup '=:LaserWriter@Blah' to list the printers there. Again, carefully copy down the one you want. 7A. Enter the "URI" of the device and click continue. This is not really a URI format but it will work here: pap://Foo\ bar__at__123/ for the printer with ethertalk address "Foo bar@123". For CUPS 1.1.14 it does not seem to be necessary to escape a single space, but 2 or more consecutive spaces must be escaped. Explanation. You are using this format so that the printer's address will show up in the web printer list, otherwise all you'll see is "pap://@123/" because the printer display insists that everything before a "@" is a username and won't show it. You are also using it because I'm lazy and it was easier to decode the above format than a real URI inside a shell script. If you have printers in your zones with other unsupported characters modify the pap backend script so that you can pass those as well. 7B. According to the CUPS maintainers "proper" URI format should use %20 for space and %40 for "@". Accordingly the backend/pap has been modified to perform this translations. So a URI like: pap://Foo%20bar%40123" will also be accepted. If other characters need to be represented this way modify the backend/pap file. Note, quotes and double quotes simply should NOT be used in printer names as they will always have meaning to the shell and tend to break scripts. 8. Pick the PPD from the model driver list. If you don't find your printer pick something similar from the list. If you have a PPD go back to step 3. (Alternatively, pick any printer, then overwrite the ppd file for this printer in /etc/cups/ppd with the real PPD later.) 9. You should see a page describing the printer you just created. Click on "Configure Printer" and set up its default values. 10. Print a test page. It comes out perfectly, no processes hang, and you're done. If not... DEBUGGING. Debugging can be complex so not all variations are covered here, only the problems that I've personally run into. 1. Nothing comes out of the printer. Uncomment the "echo" debugging lines in the pap backend script and send a test job. Then look at /tmp/pap.log. If there is a typo in the name or some other similar problem you should see it. 2. Nothing comes out of the printer and nothing obviously wrong with the name in pap backend file. Printer works with a simple postscript file sent directly by pap. This is probably a PPD file problem resulting in a toxic print file. Comment out the actual pap line and the "rm -f $file" lines in the pap backend file and send a test job through. Find the matching file (by date) in the /var/spool/cups/tmp directory. Inspect it with an editor. If there is garbage before/after the postscript it is probably because of something in the PPD. Look at the lines around the postscript and see if you can locate similar text in the PPD. See if you can remove those sections from the PPD. Then copy the modified version over the printer's PPD file: /etc/cups/ppd/printer_name.ppd Repeat until done ;-). 3. Use "ps -ef | grep pap" to verify that pap doesn't hang after the printer emits the pages. If it does this may be a PPD file problem as in the previous problem - resolve it the same way. Regards, David Mathog mathog@caltech.edu (Last modified Jan 14, 2005.)