Printing and scanning terminology

Terminology for printing and scanning


Print queue

Abstraction unit in CUPS for a printer - it has a device uri, which represents connection to the device, and can exist with classic driver (PPD file from different package) or without (driverless printing). The entries you see in print dialogs and settings are those print queues. They can be permanent or temporary.

Permanent print queues

The queues with classic driver or driverless print queue which need to be shared further down the network.

Temporary print queues

The queue which don’t need to be installed at all - they show up during print dialog and they disappear once the printing is done successfully. They rely on driverless printing.

Remote CUPS queue

The queue on the different machine, where other cupsd process is running, than on the local machine. They are usually found in enterprise solutions, where printers aren’t in the same network as users or if admin wants a centralized monitoring above all printers. In such solutions, users set up cups-browsed to install remote CUPS queue as local queues via BrowsePoll directive, or install a specific queue via GNOME. There can be a solution how to redirect mDNS messages which CUPS server advertises to the networks with users, but I haven’t been to setup this correctly yet.

Classic drivers

Those are the binaries and PPD files, which need to be installed for the device to work. This is older way of supporting devices, which will go away in the future.

Driverless printing (wireless/ethernet)

Most of modern devices (2010+) complies to AirPrint, Mopria or IPP Everywhere standard, which means they don’t need a classic driver for being able to print. Those devices have IPP (Internet Printing Protocol) 2.0+ implemented within, are capable to 'advertise' themselves via mDNS and they support document formats like PDF, PCLm, JPEG, Apple Raster or PWG Raster.

There are several prerequitises which need to fulfill in OS to have an access to the driverless feature:

  • avahi-daemon must run

  • there needs to be a '.local' address resolver active - systemd-resolved or nss-mdns

  • the device itself must have IPP port (631) and Bonjour/MDNS enabled

  • IPP and MDNS need to be enabled in firewall

How does the driverless printing work under the roof (put it simply):

  • CUPS sees the printer in mDNS messages via Avahi

  • CUPS will find out the printer capabilities via IPP

  • if there is a print job, CUPS will set up the filter chain to convert the incoming file into document format which printer understands (Apple Raster, PDF, PWG Raster, PCLm, JPEG)

In case it is needed, PPD file is generated by PPD generator in CUPS or by driverless binary.

One of the features which use driverless printing is CUPS temporary queues.

See manual how to check if your printer is capable of driverless printing.

Printing using a driver

This printing is similar to driverless printing in matter of setting up a filter chain, but:

  • it can use limited mDNS and IPP functionality or it doesn’t use them at all

  • all information about device capabilities is taken from PPD (Postscript Printer Description) file

  • can use a specialized filters and specialized communication with the device (depends on driver)

The downsides of this approach is to rely on 3rd party drivers, you need to always install a permanent queue for it and it will go away in the future.

Printing raw data

No filters are started during this printing, the data are sent as they are to the target. This approach is usually used for printing to label printers, or, in the past, for printing to remote CUPS queue. The same as classic drivers, this solution is deprecated and it will be removed in the future.

Printer applications

The binaries which provide support for older devices which aren’t capable of complying to driverless standards. The core idea is they will be capable of accepting the old driver and then advertise itself as a device capable of driverless printing. Then the new CUPS will be able to see them and user will be able to print via them as if they were temporary queues. The currently available printer applications in Fedora are ippeveprinter (a part of CUPS - see cups-printerapp package) and lprint (provides support for devices which requires raw printing - mostly label printers). I’m planning to package PAPPL, the library for creating printer applications, and ps-printer-app, a printer application for printers which support Postscript.

Driverless printing (USB)

Driverless printing has its variant for devices which are connected via USB - it is covered by 'IPP over USB' standard. For make it work, you need 'ipp-usb' package, which will register the device with Avahi on localhost - then USB device will look as a wireless/ethernet device. The discovery/printing looks the same as with a wireless/ethernet device with driverless support.

See manual how to check for IPP-over-USB.


Classic scanning (via hplip and sane-backends)

The classic scanning works via backends, which are binaries for communication with device. There are several backends, usually created by reverse engineering communication between scanner and MS Windows driver. None of classic backends implements a protocol, which is compatible with most devices available.

Driverless scanning

The driverless scanning uses sane-escl (not built in Fedora) and sane-airscan backends for communicating with newer devices. Those newer devices usually support eSCL (based on AirScan protocol by Apple) or WSD (Web Services for Devices by Microsoft), which sane-airscan is able to use.

Regarding USB scanning, it has the same requirement as printing. The device must support IPP over USB driverless standard and ipp-usb package must be installed to get driverless scanning via USB - the package is required because it creates a driverless interface over USB interface which sane-airscan uses for driverless communication with device.