Several years ago, I wrote a post about the challenges around using
lpd:// for printing on Macs running 10.14 Mojave and later. While I came up with a workaround involving programmatically configuring printers to use AirPrint, I found a minor (but annoying) issue where configuring a printer in this way when run as
root (which any management tool would do) would produce a PPD file without a printer icon. Running the same
ipp2ppd binary as the logged in user did correctly include the printer icon.
A fellow MacAdmin came up with a clever workaround using outset for running the necessary script as the logged-in user, but I had hoped that my post would nudge others in the community to come up with a workaround to allow the inclusion of the printer icon rather than force others to implement another (albeit useful & powerful) tool. Unfortunately, this did not come to pass. The topic of the #printers-n-cups MacAdmins Slack channel is apt: Abandon all hope, ye who enter here …
Part of the
ipp2ppd binary processing involves downloading all of the available printer icons (
.png) from the printer and converting these into a single
.icns file. As I learned years ago, these icons are discoverable using the
ipptool and searching for
printer-icons from the output.
Since the only difference between a
root triggered call of
ipp2ppd and a regular user call is this icon file reference in the PPD, it occurred to me that so long as it was possible to query and download just one of these PNG icons that this could be subsequently appended to the PPD file in order to install a printer in this programmatic way with an icon.
Sure enough, some tweaking later and I can confirmed the below script would successfully add several different AirPrint printers with their appropriate icons!
To use the above script effectively, the following is required:
- Your printer information:
- Display Name
- IP Address
- Specifying whether to forcibly fail the printer install if no icon is downloaded
- Specifying a timeout period where failure to communicate with the printer via TCP port 631 (used for
ipp) will automatically cancel the install (default is 2 seconds)
Hopefully this discovery and script helps others to scratch that itch of wanting to both programmatically install their AirPrint printers and to include their icons without third-party tools!