Tips and tricks for using CUPS for printing with Linux

One of Apple's most important contributions to GNU/Linux was adopting CUPS in Mac OS X.
232 readers like this.
document sending

Did you ever try to configure a printer on a GNU/Linux desktop distribution at the end of the '90s? Or even before?

To make a long story short: That was fine if you worked at a large organization with an IT team to handle it and dedicated hardware or a printing server. There were many different standards and protocols to handle printers. And only a few big vendors (usually Unix vendors) provided specific support and drivers for their entire range of products.

However, if open source enthusiasts wanted a home printer that would work with their favorite distribution, that was another story. They probably spent a fair amount of time on forums, newsgroups, or IRC (remember those ancestors of social networks and chats?) asking about printers with easy-to-install Linux drivers.

In 1999, the first version of CUPS (the Common Unix Printing System) was released by Easy Software Products. Most of the most popular distributions at the time adopted CUPS as their default printing system. That was a huge success: one standard could handle many printers and protocols.

But if the printer vendor didn't provide a CUPS driver, it was still tricky or impossible to make it work. Some smart people might do reverse engineering. And a few printers, with native support of PostScript and Internet Printing Protocol (IPP), worked "out of the box."

Then came Apple

In the early 2000s, Apple was struggling to build a new printing system for its new Mac OS X. In March 2002, it decided to save time by adopting CUPS for its flagship operating system.

No printer vendor could ignore Apple computers' market share, so a lot of new printer drivers for Mac OS X's CUPS became available, spanning most vendors and product ranges, including corporate, graphic arts, consumer, and photo printing.

CUPS became so important for Apple that it bought the software from Easy Software Products in 2007; since then Apple has continued to maintain it and manage its intellectual property.

But what does that have to do with GNU/Linux?

At the time Apple integrated CUPS in Mac OS X, it was already used by default in many distros and available for most others. But few dedicated drivers were available, meaning they were not packaged or listed as "for GNU/Linux."

However, once CUPS drivers were available for Mac OS X, a simple hack became popular with GNU/Linux enthusiasts: download the Mac driver, extract the PPD files, and test them with your printer. I used this hack many times with my Epson printers.

That's the CUPS magic: If a driver exists, it usually works with all operating systems that use CUPS for printing, as long as they use a supported protocol (like IPP).

That's how printer drivers began to be available for GNU/Linux.


Afterward, printer vendors realized it was quite easy to provide drivers for GNU/Linux since they already developed them for Mac. It's now easy to find a GNU/Linux driver for a printer, even a newer one. Some distributions include packages with a lot of drivers, and most vendors provide dedicated drivers—sometimes via a package, other times with PPD files in an archive.

Advanced control applications are available too, some official, some not, which make it possible (for example) to look at ink levels or clean printing heads.

In some cases, installing a printer on GNU/Linux is even easier than on other operating systems, particularly with distributions using zero-configuration networking (e.g., Bonjour, Avahi) to auto-discover and share network printers.

Tips and tricks

  • Install a PDF printer: Installing a PDF printer on GNU/Linux is very easy. Just look for the cups-pdf package in your favorite distribution and install it. If the package doesn't automatically create the PDF printer, you can add one using your system preferences to print in PDF from any application.

  • Access the CUPS web interface: If your usual interface for managing printers doesn't work or you don't like it, open a web browser and go to http://localhost:631/admin. You can manage all the printers installed on your computer, adjust their settings, and even add new ones—all from this web interface. Note that this might be available on other computers on your network; if so, replace "localhost" with the relevant hostname or IP address.

  • Check ink level: If you have an Epson, Canon, HP, or Sony printer, you can see its ink level with a simple application. Look for the "ink" package in your distribution repositories.

  • Contribute to CUPS: Like many open source project, CUPS is maintained on GitHub. Check the CUPS website and GitHub issues to find out how you can contribute to improving it.

CUPS license

Originally, CUPS was released under GPLv2. I'm not sure why; maybe to make it easier to distribute with GNU/Linux. Or maybe it was just what most open source projects did at the time.

Apple decided to change the license in November 2017 to the Apache 2.0 license. Many observers commented that it was consistent with Apple's strategy to move the IP of its open source projects to more business-compliant licenses.

While this change could create issues with shipping CUPS with GNU/Linux, it is still available in most distributions.

Happy 20th birthday, CUPS!

CUPS was released in 1999, so, let's celebrate and thank all the people involved in this successful open source project, from the original authors to the driver developers to its current maintainers.

The next time you print with your favorite GNU/Linux operating system, remind yourself to say "thank you" to Apple.

The company isn't well known for its contributions to open source. But if you look carefully (at, for example, Apple's Open Source Releases and Open Source Development pages), you'll see how many open source components are in Apple's operating systems and applications.

You'll also discover other important open source projects Apple kicked off. For example, it forked KHTML, the KDE browser, to create WebKit for the Safari Browser. Wait, THE WebKit? Yes, Apple initiated WebKit. But that is another story...

User profile image.
Community manager at Hyland. Founder of Une Jolie Musique, a not for profit studio using open source and open source based software only to record music and produce videos. I also teach and advise on open source, and write tutorials. Involved in various Open Source and Free Software projects and communities for many years.


Great article Antoine! Thanks for sharing your expertise.

Very interesting Antoine. Thanks for giving us this history-technology lesson !

You state, "While this change could create issues with shipping CUPS with GNU/Linux, it is still available in most distributions." but never explain why that might be. There is a TON of software utilizing that license in every major Linux distribution, starting with the Apache webserver. Why would you believe that shipping CUPS with that license create issues for the distros?

Hello, interesting question.
The point is not that it would be forbidden to install CUPS or the Apache web server on GNU/Linux. But it could be impossible to ship it by default with the installer of a GNU/Linux distribution in GPL.
However, I am not lawyer, so this is a very interesting question for the OSI of the FSF, about licenses incompatibilities and copyright. I would love to have a detailed answer.

In reply to by sgtrock

I really like that Apple move to being a UNIX-based operating system. It makes it much easier to move programs back-and-forth between Linux and the Mac with X11.
I honestly don’t know why windows does not use something like cups. It seems to work so much better even if you don’t have Internet connectivity. Many of the same printers use the exact same drivers and communicate with the same language so why not use that to an advantage instead of have to download the drivers every single time. Very similar to how air print works from the iPads and iPhones. It just makes it easy.

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.