Introduction
Some people using AppleTalk printers or running Mac OS 9 still want to use AppleTalk. While the AppleTalk protocol suite is considered deprecated by Apple these days, the large number of legacy devices makes discarding the protocol unfeasible.
Installing AppleTalk Daemons
Installation is easy, just use apt-get to install Netatalk.
sudo apt-get install netatalk
And wait for netatalk to run. If you get an error similar to:
Starting Netatalk services (this will take a while): nbp_rgstr: Förbindelsen dog ut (timeout) Can't register laptop:Workstation@* invoke-rc.d: initscript netatalk, action "start" failed. dpkg: fel vid hantering av netatalk (--configure): underprocess post-installation script gav felkod 1 Fel uppstod vid hantering: netatalk E: Sub-process /usr/bin/dpkg returned an error code (1)
Then try adding your AppleTalk connected interface (eth0, eth1, wlan0 etc) to the end of /etc/netatalk/atalkd.conf
sudo gedit /etc/netatalk/atalkd.conf
by typing the appropriate interface at the end of the file and try starting the services:
sudo /etc/init.d/netatalk start
AppleTalk Printing
Getting your Ubuntu installation to print to an AppleTalk printer is relatively easy.
First, provide CUPS with a working PAP (the Netatalk printing methodology) backend. You may download one from here. Once you have that file, cd to where that file is stored and:
sudo chmod +x pap
sudo mv pap /usr/lib/cups/backend
Now all you need to do is restart CUPS. You can do this with
sudo /etc/init.d/cups restart
This should provide you with AppleTalk printing.
Now, set up the printer by opening the Printing admin tool (System>Administration>Printing) and clicking the "New" button.
Before we go any farther we need to find the device URI, this can be accomplished by calling the backend without any arguments
/usr/lib/cups/backend/pap
This should return something like
network pap "HP LaserJet 4050 Series " "LaserWriter"
We want to take the device name and convert it into a pap address to use as the device URI. This is done by using the prefix "pap://" and converting any spaces into "%20". So in this case it would be
pap://HP%20LaserJet%204050%20Series%20
Note that in this case there was a space after the word "Series". This is important!
Now, under Devices select "Other" and enter the device URI we just found.
Click forward. Select your printer Make and Model and whatever options it may have. Once completed, print a test page to see if it works.
There you go. AppleTalk printing from Ubuntu! Enjoy.
Finding Your Printer URI
If you are having trouble finding the correct URI for your printer first call the backend without argument :
/usr/lib/cups/backend/pap
if this doesn't work, try using nbplkup
nbplkup
AppleTalk Names
An Ubuntu node will show up on the AppleTalk network as 'localhost'. This is due to 'hostname -s' returning localhost instead of using the real name (in /etc/init.d/netatalk).
To remedy this, change the appropriate line in /etc/hosts and move the real hostname in front of 'localhost.localdomain', for example:
127.0.0.1 realname localhost.localdomain localhost
There's an open bug report documenting the problem with said order in /etc/hosts that is causing trouble with other programs, too.
https://launchpad.net/distros/ubuntu/+source/netcfg/+bug/8980
Problems
If nothing is coming out of your printer, debug the pap backend and view the log to see where problems may be coming from.
sudo gedit /usr/lib/cups/backend/pap
and uncomment out the lines that write out to the log file. (Delete the ##'s on lines that contain "echo")
restart cups and try to print another file
sudo /etc/init.d/cups restart
Now check the logs for any problems
sudo cat /tmp/pap.log
a sample log file should look like this
+++++++++++++++++++++++++++++ Sat Feb 7 16:34:05 EST 2009 new job in pap backend uri pap://HP%20LaserJet%204050%20Series%20 new file /var/tmp/22205.prn copies 1 nbpname HP LaserJet 4050 Series %%[ status: busy; source: EIO 2 (ATALK) ]%% Normal exit
NOTE: if you see a line that says "NBP Lookup failed"
HP LaserJet 4050 Series :LaserWriter@*: NBP Lookup failed
You must restart netatalk and your printer should work again
sudo /etc/init.d/netatalk restart
Other Info
The following may be needed if you have more than one AppleTalk Zone or are having general problems.
With netatalk installed, run nbplkup to find the names of the AppleTalk printers on your network. Make a note of these names.
Edit /etc/cups/printers.conf (as root) to add the printer. Here's an example for a printer named "Laser Writer Select 360". The "LW360" you see is the name you'd like to see in Ubuntu. It can be almost anything. The "Laser Writer Select 360" name you see in the URL must be exactly the name that nbplkup gave you for the printer.
# Printer configuration file for CUPS v1.1.23 # Written by cupsd on Mon 25 Apr 2005 02:02:39 PM PDT <Printer LW360> Info LW360 Location Local zone DeviceURI pap://Laser%20Writer%20Select%20360 State Idle Accepting Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 </Printer>
This example assumes a single, default AppleTalk zone. If you have more than one zone, the printer URL should end with %40 followed by the zone name.
# Printer configuration file for CUPS v1.1.23 # Written by cupsd on Mon 25 Apr 2005 02:02:39 PM PDT <Printer LW360> Info LW360 Location Local zone DeviceURI pap://Laser%20Writer%20Select%20360%40zonefour State Idle Accepting Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 </Printer>
Mozilla uses a newer Ghostscript engine than most Apple printers will support. If an error page stating this comes from the printer when you try to print from Firefox/Mozilla, change the default print string in Firefox/Mozilla's printing prefs to
gs -q -sDEVICE=pswrite -sOutputFile=- -dNOPAUSE -dBATCH -dMozConvertedToLevel2=true - | lpr ${MOZ_PRINTER_NAME:+'-P'}${MOZ_PRINTER_NAME}"