Printer Sharing and Print Spooling in Mac OS X
As of this writing, my internal network has only Macs running Mac OS X. That’s not to say that most of our Macs can’t boot into Mac OS 9 when necessary, but the only reasons I’ve had to switch back to Mac OS 9 recently were to run Norton Disk Doctor to perform a media check on a hard disk with bad blocks, and to use the floppy drive in my PowerBook G3. For everyday operation, though, every Mac is in Mac OS X. The last hurdle to making the conversion to OS X was setting up print spooling in Mac OS X, and here’s the story of how I set it up and turned off the last essential Mac running Mac OS 9.
Performa Printing — The last holdout was our Performa 6400, which was winning the award for most gratuitous use of an old Macintosh. It used Mac OS 9.1, the latest possible for that model, and was running AppleShare IP 6.3. Until its internal file serving duties were taken over by a Power Mac G4/450, it was our internal MP3 server, Retrospect backup server, and it also hosted Now Up-to-Date & Contact’s Public Event and Public Contact servers. Nagging performance and stability problems caused me to move most of its duties to the Mac OS X-based Power Mac G4/450, but the Performa remained active for a single purpose: print spooling.
Tonya and I have an old Apple LaserWriter Select 360 that we use for all our black-and-white printing. It’s a good printer, and in fine working order, but it’s accessible only over LocalTalk. The Performa 6400, thanks to a PCI-based Ethernet card, served as the bridge between our main Ethernet network and the LocalTalk cabling for the printer. That was important, but we had become even more fond of the print spooling feature in AppleShare IP.
I initially set up the AppleShare IP print spooler so we could print from AirPort-only Macs (before I’d finished the wired Ethernet network) through the Linksys EtherFast wireless gateway we use for bridging between wireless and wired Ethernet. Although the EtherFast works well on the whole, it doesn’t bridge AppleTalk packets between the wired and wireless segments of our network, and since the LaserWriter Select 360 understands only AppleTalk, we needed a way around the Linksys’s limitation. (Wireless gateways from Mac-savvy manufacturers like Asante and Proxim can bridge AppleTalk packets appropriately, but when I bought the EtherFast, it was quite a bit cheaper than the competition.)
The solution turned out to be AppleShare IP. True to its name, AppleShare IP’s print spooler would accept print jobs sent to it via TCP/IP rather than AppleTalk, and it could then send the print job to the printer via AppleTalk over the LocalTalk cables. When I managed to get this approach working, I was pleasantly surprised to discover a welcome side-effect of the print spooler: it was perfectly happy to accept print jobs when the printer was turned off and hold on to them until we turned the printer on. This was fantastic, since we don’t need to see much of what we print right away, and since the printer isn’t in either of our offices, it was handy to send a print job and have it come out of the printer hours or days later when we remembered to turn the printer on.
So there we were, keeping an entire computer running all the time just so we could print a few times a week. Gratuitous certainly, and if electricity were both free and had no environmental impact, perhaps we would have left it that way. But neither is true, so it was time to figure out how to implement print spooling in Mac OS X so the Power Mac G4/450 could take over from the Performa.
Mac OS X Print Spooling — The first step was to buy an Ethernet-to-LocalTalk bridge, a small hardware device that connects LocalTalk and Ethernet networks. I opted for the Asante FriendlyNet Ethernet to LocalTalk Bridge; a bunch of inexpensive refurbished units are available from TidBITS sponsor Small Dog Electronics. The bridge took care of the physical problem of how to connect my Ethernet network to the LocalTalk-only printer.
Next up was the task of configuring the Power Mac G4/450 to talk to the printer. First I made sure AppleTalk was turned on for the Built-in Ethernet connection in the Network preferences pane. Then I launched Print Center, added the LaserWriter Select 360 as an AppleTalk printer, and printed a test sheet. It was almost too simple, but it did show that the Asante Ethernet to LocalTalk Bridge was working.
Then I wanted to make the printer available to all the other computers on the network, so I opened the Sharing preferences pane and clicked the checkbox next to Printer Sharing. To test, I tried printing from my iBook. In the Print dialog there’s a Printer pop-up menu, and in it, when you have a shared printer on the network, is a Shared Printers hierarchical menu. I chose LaserWriter Select 360 from that menu and verified that printing from another computer worked fine as long as the printer was turned on. Easy enough, but I wanted to print to the printer when it’s powered off, too!
I thought it was time for serious geek juju, so I rolled up my sleeves and started poking around the hidden Web interface for the Common Unix Printing System (CUPS) that’s underneath Mac OS X 10.2 and later. You can find it too, at the link below, but I recommend caution when making changes, since it’s entirely possible that you could muck things up but good if you don’t know what you’re doing. After a bit of fruitless reading in the CUPS documentation, I searched for instructions in Google. Nothing there either.
Out of ideas for where to look for help, I figured I’d try the obvious, so I turned off the printer, printed another test page, and did something else for a few minutes. Lo and behold, when I turned the printer on, the printer promptly spit out my print job!
In short, print spooling using Mac OS X’s built-in printer sharing just worked, with no fuss, no muss, and no need for incantations from the command line. Apple deserves big points for building something as useful as print spooling into Mac OS X by default, but I’ll take a few away because they never mention that you can still print to a shared printer that’s turned off in Mac Help.
Printing from Classic — I wasn’t entirely done. Even though configuring all our computers to print via our new print server was simple in Mac OS X, convincing Classic applications to print was trickier. For those of our Macs that can use AppleTalk because they’re connected via wired Ethernet, the process of setting up the new printer was a matter of launching a Classic application, choosing the Chooser from the Apple menu, and setting up the printer as you normally would. Remember that you must have AppleTalk turned on for your network connection in the Network preferences pane.
The problem came when I tried to configure those Macs that occasionally use the wireless network. Since the Linksys EtherFast doesn’t bridge AppleTalk between the wired and wireless segments of our network, I needed to use a little-known utility from Apple to set up the necessary Desktop Printers. It’s called Desktop Printer Utility, you need version 1.3, and it’s probably located in either the Utilities folder or Apple Extras folder inside the Applications (Mac OS 9) folder. Launch it to display the New Desktop Printer dialog.
Select Printer (LPR) and click OK. In the dialog box that appears, you must select a PostScript Printer Description file and your LPR Printer. Click the first Change button and select the appropriate PPD for your printer. Then click the second Change button, enter the IP address of your print server and the name of your print queue (which you can verify by selecting the printer in Print Center on the server and choosing Show Info from the Printers menu), and click the Verify button to make sure you can communicate with the printer. Click OK to close the selection dialog box, click the Create button, and give your new Desktop Printer the name you want to see in the Print dialog boxes for Classic applications.
(If, for some reason, using the Chooser to set up an AppleTalk printer doesn’t work, you can also select Printer (AppleTalk) in the New Desktop Printer dialog and run through a similar process to create an AppleTalk-based Desktop Printer.)
So here’s the rub. I’ve done this before, when I used the Performa and AppleShare IP as my print spooler, and it worked fine. I vaguely remember needing to reboot into Mac OS 9 on one occasion and rebuilding the Desktop on another to get it to work right, but one way or another, it did work. Now, for whatever reason and no matter what I try, I cannot convince the Desktop Printer Utility, or the Desktop Printer it creates, to talk to my print server. It always fails with an error -8885, which I believe means No LPR Connection.
Although I’m annoyed at being stymied, I don’t actually care, since all the Macs that need to print from Classic can connect to the wired Ethernet network and print via AppleTalk, which works fine. And of course, the number of Classic applications from which we need to print is extremely small and dropping all the time.
One final note. Although I haven’t wanted to share our USB-based Epson Photo Stylus 870 color inkjet printer with Classic applications or Macs running Mac OS 9, Apple has a worthwhile discussion of what’s involved.
Gimp-Print to the Rescue? One thing I haven’t had time to try yet is installing the open source Gimp-Print drivers. Although they’re a bit complicated to install – seemingly like all open source software – they offer many additional printer drivers for Mac OS X, and equally important, they often add features that aren’t supported by the built-in Mac OS X printer drivers. For instance, my Epson Photo Stylus 870 is supported and works acceptably in Mac OS X, but when I wanted to print on roll paper, the only option was to download and install the Gimp-Print drivers. If you’ve been having any printing frustrations in Mac OS X, give the Gimp-Print drivers a try and see if they help.
Two tips: Make sure assign a unique name to the new printer you add via Gimp-Print, and consider yourself forewarned that the Gimp-Print drivers take over in some unexpected ways. For instance, the presets in iPhoto disappeared after I installed Gimp-Print, and even removing the Gimp-Print-defined printer didn’t bring them back. It’s not a big deal, but I haven’t yet devoted the time to figuring out how to get those presets back.
Share and Spool Alike — Despite my disheartening failure to set up LPR printing for Classic applications, I was stunned at how easy the overall process was, particularly the Mac OS X parts. Mac OS X certainly isn’t perfect, but at least in this case, it was easier and more pleasant to work in than Mac OS 9. Here’s hoping that becomes true of ever-more facets of using the Mac over time.
PayBITS: If Adam’s look at print spoolers and the Gimp-Print
drivers in Mac OS X helped you out, say thanks via PayBITS!
Read more about PayBITS: <http://www.tidbits.com/paybits/>