Print Server

Netatalk 2 provides an AppleTalk compatible printer server daemon called papd. It can leverage the CUPS backend to share modern printers with vintage Macs.

Shared printers can be accessed through the Apple LaserWriter Chooser extension.

Chooser LaserWriter screenshot


Install the CUPS backend on your system before configuring Netatalk.

F.e. on Debian or Ubuntu:

$ sudo apt install cups

This guide will not cover all scenarios for setting up CUPS, since CUPS’s own documentation should serve this purpose. However, we will cover some key steps and caveats that are specific to the Netatalk setup.

Once you have installed CUPS packages and started the daemons, or enabled the systemd services for CUPS (including the cups-browser web interface, for convenience), you will want to add yourself to the CUPS admin group, and set a few options to make remote administration possible. Skip these steps if you want a more secure setup.

$ sudo usermod -a -G lpadmin $USER
$ cupsctl --remote-admin WebInterface=yes

You may want to tweak the settings in /etc/cups/cupsd.conf to suite your environment, and tastes. Two recommended tweaks are to enable log rotation, and to disable the indefinite storing of print jobs, to avoid continuous increase in disk space taken up.

MaxLogSize 1000
PreserveJobHistory No

Note: In the author’s environment TCP port 631 (CUPS Web Interface default) was not open, so you may have to either edit /etc/cups/cupsd.conf or open the port in your firewall if you want to use the CUPS Web Interface.

Once you have configured everything to your satisfaction, just start or restart the cups service. If the package installer didn’t enable the services for you, you may need to use systemctl to reload daemons and enable new services first.

Sharing a modern printer over AppleTalk

Note that for this to work, your printer must be CUPS (Apple AirPrint) compatible. At the time of writing, the majority of modern printers are compatible. You can test this by after going through the steps above pipe some text to lp. First, list the printers that CUPS can see, then configure the default printer (HP Tango in my case), finally pipe a stream to lp for printing.

$ lpstat -p -d
printer HP_Tango_333AB4_ is idle.  enabled since Fri 07 Jan 2022 06:47:09 PST
system default destination: HP_Tango_333AB4_
$ lpoptions -d HP_Tango_333AB4_
device-uri=ipps://HP%20Tango%20%5B333AB4%5D._ipps._tcp.local/ printer-info='HP Tango [333AB4]' printer-location printer-make-and-model='HP Tango' printer-type=16781324
$ echo "TESTING" | lp
request id is HP_Tango_333AB4_-3 (0 file(s))

The next step is to configure papd. Edit /etc/netatalk/papd.conf and add the following line to the bottom of the file:


Save, exit, and restart papd.

At this stage, you want to test that the CUPS printer is shared over AppleTalk. This can be done using this command:

$ nbplkup

The output should look something like this:

                     rascsi3b:ProDOS16 Image                     65280.205:3
             HP Tango 333AB4 :LaserWriter                        65280.205:130
                     rascsi3b:Apple //e Boot                     65280.205:3
                     rascsi3b:AFPServer                          65280.205:131
                     rascsi3b:TimeLord                           65280.205:129
                     rascsi3b:Apple //gs                         65280.205:3

If you see your printer here, the only thing left is to configure the printer on your vintage Mac in the Chooser. This part may vary depending on AppleTalk version, printer drivers on your system, and model and make of printer. The author has tested their HP Tango printer with LaserWriter 7 on System 7.1.1, and LaserWriter 8 on Mac OS 8.6:

  1. Pick the LaserWriter driver in the Chooser. Your printer should appear in the list of PostScript printers.
    1. If using LaserWriter 7 or earlier, just selecting the printer should be enough.
    2. If using LaserWriter 8, click Setup.
  2. If given the option to pick PPD (printer description file) choose Generic or plain LaserWriter. (As of v2.3, papd doesn’t use the PPD info.)
  3. Print!


If the LaserWriter driver fails to properly spool the print job to the printer, you may want to try to configure is differently through CUPS. Here it is helpful to have the web interface ready. Go to the Administration page, Add Printer, then pick the printer you want to share from the list of detected ones. Note that one printer may expose several interfaces, so choose the one that seems the most likely to work with LaserWriter spool queues. Afterwards, check with the nbplkup command which printers are available over AppleTalk, and have a look in the Chooser if a different printer has been detected now.

This is a mirror of the Netatalk GitHub Wiki. Please visit the original page if you want to correct an error or contribute new contents.

Last updated 2024-04-13