OpenPrinting News - April 2021

8 minute read

OpenPrinting Summit/PWG Meeting

On May 4-7 we will have our annual meeting again, the OpenPrinting Summit/PWG Meeting.

Because of the Corona virus situation we will again have a virtual meeting, with the side effect that everyone can participate, without needing to travel. Instructions for participation via WebEx are on the meeting’s page.

The agenda is already put up, with the OpenPrinting part on the first two days. Links to the slides will be added on the meeting page and we will link to any summary/outcome here in the next month’s news.

Google Summer of Code 2021

With the Linux Foundation being accepted as mentoring organization we are now receiving the student’s proposals until the deadline on April 13 (Timeline). After that we have to select the students/projects we want to work with.

OpenPrinting’s project ideas are posted, but further ideas are still welcome. Note that the projects are half-length this year, 175 hours instead of 350 hours (see our October news). Larger projects we should run in the Linux Foundation Mentoring Program instead of in the GSoC.

Google Season of Docs 2021

We have also applied as mentoring organization in this year’s Google Season of Docs.

In the Google Season of Docs technical writers apply for documentation writing projects at free software organizations. This way the organizations get high-quality documentation for their software and technical writers get experience in the free software world.

Our project this year is User and Developer Documentation for cups-filters. With this we want to get complete user and developer documentation for cups-filters 2.x.


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

Now, with the CUPS Snap in the Snap Store and all interfaces connecting automatically we started discussing how the cups interface for client Snaps is supposed to work and found out that if a Snap which plugs cups for printing is installed on an older Ubuntu or a non-Ubuntu distribution with classically installed CUPS that there is no protection against administrative action on CUPS, as the CUPS damon has no Snap mediation (CUPS daemon checks whether client is Snap and then requires cups-control for admin tasks).

To close this security hole snapd developer Ian Johnson picked up some weird hypothetic idea from me and suggested to implement it this way: The snapped cupsd (has Snap mediation) as a firewall for the classic cupsd on the system (does not always have Snap mediation)!

So after some weeks of thinking about the best way to implement it and of coding and testing the proxy mode of the CUPS Snap got born!

If a Snap of an application which prints (plugs cups) is installed, the CUPS Snap gets force-installed like a package dependency (“default-provider” for content interface) and the snapped application only communicates with the CUPS Snap for printing, never with a classically installed CUPS if one is there. The CUPS Snap works stand-alone as system’s CUPS if there is no classic CUPS and it goes into the new proxy mode if there is a classic CUPS.

The snapped CUPS in proxy mode mirrors all the queues of the classic CUPS, copying the PPD options for the client’s print dialogs to show all options, passes on jobs to the classic CUPS, and lets the classic CUPS apply its printer drivers so that the user continues with his habitual queues and drivers. This all goes automatically and transparently without user intervention needed, nor any changes being done on the classic CUPS.

See the technical details of the proxy mode.

The content interface is not yet implemented, but it will be my very next step on the CUPS Snap.

Features and fixes in the past month:

  • Added the proxy mode - See above
  • Switched to GitHub master snapshot of CUPS - As the Snap support code for CUPS is upstream now no patches for CUPS are needed any more! Fixed in CUPS:
  • Redefined plugs and slots to standard names cups and cups-control, tested and fixed to have everything work as expected
  • Removed more unneeded plugs from the utilities in the apps: section of snapcraft.yaml
  • Updated version of upstream source package QPDF to 10.3.1 and of cups-filters to 1.28.8
  • Install the default cups-browsed.conf on the correct place in the Snap
  • - Updated for no need of manual interface connections, interface names, deactivating classic CUPS, proxy mode, new discussion links

Main TODOs are:

  • Implement the content interfaces
  • Testing
  • Turn classic CUPS drivers into Printer Application
  • Add a migration script so that OS distributions can easily switch over from classic packages to the CUPS Snap.

PostScript Printer Application

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

Nothing really spectacular happened here, only bug fixes, two crashers got fixed after bug reports from a user:

The PostScript Printer Application (and any other Printer Application) should now correctly tell that a print queue name is invalid when one with special characters or starting with a digit is entered, instead of telling that a queue with this name already exists.

Unfortunately, some things in the PostScript Printer Application are not working as expected due to bugs in PAPPL:

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.


Currently released is 2.3.3op2.

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

Ubuntu Hirsute Hippo (21.04) will ship with CUPS 2.3.3op2, the CUPS Snap uses 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)
- 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)
- 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)
- Documentation fixes (Issue #92, Issue #163)
- 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.

Many things were going on in the other projects, so here we have only some bug fixes, overtaken from CUPS and also from issues fixed by students applying for GSoC 2021 as assignments.


Bug fix release, to fix several different issues (see below)

Ubuntu Hirsute Hippo (21.04) will ship with cups-filters 1.28.8, also the CUPS Snap currently uses this version.


        - libppd: Fixed PPD memory leak caused by "emulators" field
          not freed (OpenPrinting CUPS issue #124).
        - libcupsfilters: Made check whether the driverless PPD to
          generate should be a fax out PPD more reliable (Issue #343).
        - foomatic-rip: Options in the 5th command line argument of
          the CUPS filter command line are separated only by white
          space and not by comma, also make sure that an option "none"
          is not considered a custom page size (Issue #348).
        - libppd: Make "True" in boolean options case-insensitive
          (OpenPrinting CUPS pull request #106).

        - libcupsfilters: Made check whether the driverless PPD to
          generate should be a fax out PPD more reliable (Issue #343).
        - foomatic-rip: Options in the 5th command line argument of
          the CUPS filter command line are separated only by white
          space and not by comma, also make sure that an option "none"
          is not considered a custom page size (Issue #348).
        - implicitclass: Raise timeout for cups-browsed's answer from
          20s to 60s (Pull request #346).
        - libcupsfilters: In the PPD generator really give priority to
          Apple Raster against PDF (Issue #331).


Currently released is 1.0.2.

PAPPL development has continued, approaching 1.0.3.

See also the currently open and closed issues of PAPPL.

Changes in v1.0.3

- Fixed testpappl on systems without Avahi running (Issue #159)
- Adding a printer now works for names with special characters (Issue #161)