Some material of this page has little immediate bearing on a user's printing experience on Debian 11 (bullseye) and 12 (bookworm). It is intended to give a taste of things to come. Its content will inevitably require revision in the coming years.
Within one or two years the complexion of the printing system on Debian will undergo fundamental changes with the release of CUPS 3.0. This version will no longer support printing with PPD files and therefore, by implication, not support vendor drivers, whether they be free or non-free.
CUPS 3.0 will also have a modular printing architecture that includes the introduction of a Local server and a Sharing server.
CUPS' Local server will be designed to be very lightweight for desktop usage. There will only be support for temporary queues. There will not be any web interface and very little that can be configured.
- CUPS' Sharing server will be very similar in facilities to the current CUPS 2.3/2.4, supporting permanent driverless queues and aimed at server use.
Legacy/Classic and Modern Printers
A Legacy or Classic printer requires a PPD to describe its capabilities and, in the case of non-PostScript printers, a vendor-specific driver. In contrast, a Modern printer can
communicate with CUPS using IPP
Users of Modern printers with the New Architecture should have a printing experience that is basically the same as now. Users of Legacy printers will require a Printer Application.
A Printer Application emulates an IPP printer. It
- runs as a daemon
- detects supported printers
advertises a supported printer on localhost or the network as an IPP Everywhere printer
provides a web interface (an EWS) to add a printer and configure its capabilities
- listens for requests to print a job
The job is then handled by the supported printer's PPD and driver needed for the Legacy printer to operate. The Classic software is built into the Application. For example, hplip-printer-app essentially contains the same printer drivers, PPDs and software to communicate with the printer hardware (but not any of its GUI tools) that is in hplip. A simple example of a Printer Application is given on this page.
The Printer Applications are developed by OpenPrintig and practically every free printer driver that is available as a Debian package is also available in the present Printer Applications. None are as yet packaged for Debian, but it is possible to assess their role in printing on CUPS 2.3/2.4 by installing snapd and going to the Snap Store for an Application.
apt install snapd snap install --edge ps-printer-app
The Application's EWS is accessed with
With more than one Application present the port number increments by 1; 8001, 8002 etc
Now activate the Add Printer link. The Legacy printer should be discovered and listed. Either allow Auto-Detect Driver or choose a driver. Give the printer a Name and add it.
The printer's existence can be confirmed with
avahi-browse -rt _ipp._tcp lpstat -l -e
and it should be visible in the dialogs of applications.
Printing to it may be tested with
lp -d <PRINTER_NAME> /etc/nsswitch.conf
The Building Blocks of a Printer Application
Although the vast majority of users will never get involved in building a Printer Application, it might be of interest to be aware of the parts played by two crucial libraries, PAPPL and pappl-retrofit.
This library is a framework for developing CUPS Printer Applications based on the IPP Everywhere protocol. It is intendedd as the replacement for Classic printer drivers. It includes an implementation of IPP Everywhere, allowing driverless access to printers locally via USB or on the network (ethernet and WiWi) and the processing of print requests. In other words, an important part of its function is to emulate an IPP printer.
Printer discovery is undertaken and suitable printer drivers are searched for. Printer configuration is provided by an EWS (a web interface) and there is debug logging. There is also support for Windows 10 and 11 platforms.
pappl-retrofit produces specific Printer Applications and completely relies on PAPPL to aid it by supporting PAPPL's full functionality. PAPPL provides general functionality for a Printer Application whereas pappl-retrofit adapts Classic CUPS drivers and PPD files to the basic Printer Application framework so that CUPS can make use of them. The pappl-retrofit library was developed alongside the four Printer Applications ps-printer-app, ghostscript-printer-app, hplip-printer-app and gutenprint-printer-app and is used as the basis for them.
The EWS of a Printer Application lists all user-settable options of the PPD file, paper input trays, paper size and type and whether borderless printing should be done, if supported. Drivers can be assigned to the discovered printers automatically or manually.