OpenPrinting News - May 2021

11 minute read

OpenPrinting Summit/PWG Meeting

On May 4-7 we will had our annual meeting, the OpenPrinting Summit/PWG Meeting. Because of the Corona virus situation we again had a virtual meeting.

Smith Kennedy from HP wrote up a great summary of the meeting. There are also the minutes from Ira McDonald.

The slides of all presentations are linked on the agenda of the event.

Google Summer of Code 2021

Google has officially announced the accepted student projects. The Linux Foundation got 19 student slots and so could accommodate all students they considered for mentoring. With this we can also run 5 student projects for OpenPrinting:

cups-filters: Make sure all filter functions work without PPD files
Student: Suraj Kulriya
Mentors: Jai Luthra, Till Kamppeter, Dheeraj Yadav

cups-filters: Convert filters to filter functions
Student: Pratyush Ranjan
Mentors: Till Kamppeter, Dheeraj Yadav

cups-filters: Create a single, universal CUPS filter to replace the chain of individual filters
Student: Pranshu Kharkwal
Mentors: Till Kamppeter, Dheeraj Yadav

GUI for listing and managing available IPP Print/Scan services (or DNS-SD-advertised network services in general)
Student: Divyasheel
Mentors: Till Kamppeter

Firmware and other file handling in PAPPL
Student: Bhavna Kosta
Mentors: Jai Luthra, Till Kamppeter

Google Season of Docs 2021

With our application for this year’s Google Season of Docs we did not get accepted.


CUPS Snap in the Snap Store, Call for testing on the forum and on the Ubuntu Discourse

As reported in the April news I have worked out a security concept with the snapd developers to print from user application Snaps without allowing administrative access to CUPS. With this we can let developers upload applications to the Snap Store which automatically connect to the cups interface for printing, without the risk that such applications mess with CUPS.

We have discussed the concept further on the forum (this post and the following) to work out the details. Now only the finalization in snapd is needed. The final concept is here, only the paths for the CUPS socket needed to get adjusted.

I have also presented my work on the CUPS Snap on the OpenPrinting Summit/PWG meeting.

Features and fixes in the past month:

Main TODOs are:

  • Complete the security concept on the snapd side, especially implement the content interfaces
  • Testing
  • Turn classic CUPS drivers into Printer Applications
  • Add a migration script so that OS distributions can easily switch over from classic packages to the CUPS Snap.

Up to now, the CUPS Snap got installed from the Snap Store more than 1600 times! Note that it is still only on the Edge channel, there is not yet an “official” release.

PostScript Printer Application

PostScript Printer Application in the Snap Store, Call for testing on the forum and on the Ubuntu Discourse

I have presented my work on the PostScript Printer Application on the OpenPrinting Summit/PWG meeting and Michael Sweet has also given a presentation about Printer Applications in general and PAPPL.

Features and fixes in the past month:

  • Following the CUPS Snap also switched to core20 and restricted build architectures also here.
  • Also here added the workaround for mDNS host name lookup as I did for the CUPS Snap.
  • Added checking of the user’s location via locale-related environment variables and based on this use A4 or Letter as default paper size when a new print queue is created, also posted appropriate feature request on PAPPL.
  • Applied a patch for a PAPPL bug of changes of loaded media are not taken into account when printing.
  • Updated the built-in QPDF to 10.3.1 and Ghostscript to 9.54.
  • Some clean-up in snapcraft.yaml.

Unfortunately, some things in the PostScript Printer Application are not working as expected due to bugs in PAPPL and/or in printer firmware:

For creation of GUI tools to easily find Printer Applications and set up printers we would need these improvements:

With appropriate features added to PAPPL we will be able to also add the following:

Once having these features implemented, the PostScript Printer Application is complete so far.

Up to now, the PostScript Printer Application Snap got installed from the Snap Store more than 1000 times! Note that it is still only on the Edge channel, there is not yet an “official” release.

Driverless Scanning

Mopria has published the specifications of the eSCL scanning protocol!

You can download it here.

Principally it is the same as AirScan, the scanning part of Apple’s AirPrint.

As long as the hardware industry does not adopt IPP Scan, we can simply do our client/server scan architecture for Scanner Applications as snappable scanner drivers with eSCL.

See our discussion thread on the OpenPrinting mailing list. Please subscribe here to participate in the discussion.

sane-airscan got finally, two days before Final Freeze of Ubuntu Hirsute (21.04), accepted into the main part of the distribution and so it is now in default desktop installation. This will make the scanners in most modern multi-function printers, plus some stand-alone models (like Canon LIDE 300) work with Hirsute out-of-the-box.


Currently released is 2.3.3op2.

Michael Sweet presented his plans on CUPS 2.4.x and 3.x on the OpenPrinting Summit/PWG Meeting.

CUPS 2.4.x is supposed to get shared printers reporting all required attributes/keys/values, OAuth 2.0/OpenID authentication, pkg-config support, snapcraft support, “job-sheets-col” and better “media-col” attribute support, TLS and X.509 improvements, and deprecate cups-config and Kerberos authentication.

CUPS 3.x will be a major change in architecture, having the CUPS daemon split in two, a user daemon to handle local printing to USB printers and printers in the local network and a system daemon to share printers.

Development of CUPS 2.4 is in progress, currently mainly fixing of bugs which were reported to Apple’s CUPS GitHub in the last 17 months.

Ubuntu Hirsute Hippo (21.04) comes with CUPS 2.3.3op2, the CUPS Snap and the PostScript Printer Application Snap use the current GIT master.

CUPS v2.4rc1 (Pending)

- Added support for CUPS running in a Snapcraft snap.
- Added support for AirPrint and Mopria clients (Issue #105)
- Added configure support for specifying systemd dependencies in the CUPS
  service file (Issue #144)
- Added several features and improvements to `ipptool` (Issue #153)
- The `ipptool` command now correctly reports an error when a test file cannot
  be found.
- Fixed Kerberos authentication for the web interface (Issue #19)
- The ZPL sample driver now supports more "standard" label sizes (Issue #70)
- Fixed reporting of printer instances when enumerating and when no options are
  set for the main instance (Issue #71)
- Reverted USB read limit enforcement change from CUPS 2.2.12 (Issue #72)
- The IPP backend did not return the correct status code when a job was canceled
  at the printer/server (Issue #74)
- The `testlang` unit test program now loops over all of the available locales
  by default (Issue #85)
- The `cupsfilter` command now shows error messages when options are used
  incorrectly (Issue #88)
- The PPD functions now treat boolean values as case-insensitive (Issue #106)
- Temporary queue names no longer end with an underscore (Issue #110)
- The USB backend now runs as root (Issue #121)
- Added pkg-config file for libcups (Issue #122)
- Fixed a PPD memory leak caused by emulator definitions (Issue #124)
- Fixed a `DISPLAY` bug in `ipptool` (Issue #139)
- The scheduler now includes the `[Job N]` prefix for job log messages, even
  when using syslog logging (Issue #154)
- Added support for locales using the GB18030 character set (Issue #159)
- The IPP parser now errors out when reading a member attribute outside a
- `httpReconnect2` did not reset the socket file descriptor when the TLS
  negotiation failed (Apple #5907)
- `httpUpdate` did not reset the socket file descriptor when the TLS
  negotiation failed (Apple #5915)
- The IPP backend now retries Validate-Job requests (Issue #132)
- Added a workaround for Solaris in `httpAddrConnect2` (Issue #156)
- Now use a 60 second timeout for reading USB backchannel data (Issue #160)
- The USB backend now tries harder to find a serial number (Issue #170)
- Fixed `@IF(name)` handling in `cupsd.conf` (Apple #5918)
- Fixed a job history update issue in the scheduler (Issue #187)
- Fixed `job-pages-per-set` value for duplex print jobs.
- Documentation fixes (Issue #92, Issue #163, Issue #177, Issue #184)
- Localization updates (Issue #123, Issue #129, Issue #134, Issue #146,
  Issue #164)
- USB quirk updates (Apple #5766, Apple #5838, Apple #5843, Apple #5867)
- Web interface updates (Issue #142)
- The `ippeveprinter` tool now automatically uses an available port.
- Deprecated cups-config (Issue #97)
- Deprecated Kerberos (`AuthType Negotiate`) authentication (Issue #98)
- Removed support for the (long deprecated and unused) `FontPath`,
  `LPDConfigFile`, `KeepAliveTimeout`, `RIPCache`, and `SMBConfigFile`
  directives in `cupsd.conf` and `cups-files.conf`.


Currently released is 1.28.8.

I have also presented my work on cups-filters on the OpenPrinting Summit/PWG meeting.

I have removed the duplicate PPD generator (for CUPS queues for driverless IPP printers) from libppd, keeping the one in libcupsfilters. In this one I have cleaned up the obtaining of human-readable strings, taking them from a PWF IPP standard repository which is included in the translation string files of CUPS. See the OpenPrinting mailing list thread about this.

Currently I am working on improving the handling of color spaces and depths when printing to a driverless printer in Apple or PWG Raster foirmat. Formerly, the auto-generated PPD files of cups-filters provided choices in their “ColorModel” option to select color space and depth manually. To make the “ColorModel” option in the PPD mirror the “print-color-mode” IPP attribute and to make printing easier for the user I am switching to automatic selection. See this thread on the OpenPrinting mailing list and this thread on the Ghostscript developer mailing list. Update: First version, applied to ghostscript() filter function, posted (Details)

Please subscribe to the OpenPrinting mailing list and/or to the Ghostscript mailing list to participate in the discussions.

I have also merged Mohit Mohan’s GSoC 2021 project of multi-threading support for cups-browsed and fixed several bugs in cups-browsed and the filters, many were fixed by GSoC student candidates as assignments.

Ubuntu Hirsute Hippo (21.04) comes with cups-filters 1.28.8, also the CUPS Snap currently uses this version. The PostScript Printer Application Snap uses the current GIT master of cups-filters.


	- libcupsfilters: Changed "ColorModel" option in the PPDs from
	  the PPD generator to mirror the print-color-mode IPP
	  attribute instead of providing all color space/depth combos
	  for manual selection. Color space and depth are now
	  auto-selected by the urf-supported and
	  pwg-raster-document-type-supported printer IPP attributes
	  and the settings of print-color-mode and print-quality.
	  This is now implemented in the ghostscript() filter function
	  both for use of the auto-generated PPD file for driverless
	  iPP printers and use without PPD, based on IPP attributes.
	  For this the new library functions cupsRasterPrepareHeader()
	  to create a header for Raster output and
	  cupsRasterSetColorSpace() to auto-select color space and
	  depth were created.
	- libcupsfilters: In the ghostscript() filter function fixed
	  Ghostscript command line for counting pages as it took too
	  long on PDFs from evince when printing DjVu files (Issue
	  #354, Pull request #371, Ubuntu bug #1920730).
	- cups-browsed: Renamed ldap_connect() due to conflict in
	  new openldap (Issue #367, Pull request #370).
	- libcupsfilters: Clean-up of human-readable string handling
	  in the PPD generator.
	- libcupsfilters: Function name clean-up for the PPD
	- libppd: Removed ppdCreateFromIPPCUPS(), we have a better one
	  in libcupsfilters.
	- pdftoraster: Free color data after processing of each page
	  (Pull request #363).
	- imagetopdf, imagetops, imagetoraster: Removed support for
	  asymmetric image resolutions ("ppi=XXXxYYY") as CUPS does
	  not support this (Issue #347, Pull request #361,
	  OpenPrinting CUPS issue #115).
	- cups-browsed: Added multi-threaded operation, the Avahi
	  resolver callback (which examines the remote printer,
	  registers it, checks whether we want a local queue for it,
	  adds it to a cluster, ...) and the creation/modification of
	  a local CUPS queue is now done in separate threads, so that
	  these processes can get executed in parallel to keep the
	  local queues up-to-date more timely and to not overload the
	  system's resources.  Thanks a lot to Mohit Mohan who did
	  this work as Google Summer of Code 2020 project
	- cups-browsed: Always save "...-default" option entries
	  from printers.conf, regardless of presence or absense
	  of PPD file (Pull request #359).
	- cups-browsed: Start after (Pull
	  request #360).
	- texttopdf: Set default margins when no PPD file is used
	  (Pull request #356).

	- cups-browsed: Always save "...-default" option entries
	  from printers.conf, regardless of presence or absense
	  of PPD file (Pull request #359).
	- cups-browsed: Start after (Pull
	  request #360).
	- texttopdf: Set default margins when no PPD file is used
	  (Pull request #356).


Currently released is 1.0.3.

Michael Sweet has given a presentation about Printer Applications in general and PAPPL on the OpenPrinting Summit/PWG meeting.

See also the currently open and closed issues of PAPPL.