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.
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)
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.
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 snapcraft.io 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:
- The CUPS Snap is now based on Ubuntu Core 20 and not Core 18 any more.
- The Core20 base Snap did not support mDNS host name lookup. This got fixed now but the CUPS Snap also contains a workaround.
- Added libpaper support.
- Restricted the build architectures in the Snap Store to the actually supported ones: amd64, arm64, and armhf.
- Upgraded the built-in Ghostscript to 9.54.
Main TODOs are:
- Complete the security concept on the snapd side, especially implement the content interfaces
- 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
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
Unfortunately, some things in the PostScript Printer Application are not working as expected due to bugs in PAPPL and/or in printer firmware:
- USB connection only uni-directional (This especially leads to polling option defaults and installable accessory configuration not working): This seems to be a problem (firmware bug) of my HP OfficeJet Pro 8730, for other printer models it is reported to work.
- When creating a print queue via command line, I cannot auto-select the driver (You cannot use
-m autowhen creating a print queue via command line): This works for USB-connected devices now, but for network devices a further fix is needed.
For creation of GUI tools to easily find Printer Applications and set up printers we would need these improvements:
- Extend “ps-printer-app drivers” to also show supported device IDs
- Add subcommand to simply ask whether a given printer is supported
With appropriate features added to PAPPL we will be able to also add the following:
- Human-readable strings for vendor options. Needs support in PAPPL.
- Ink level check via
ps_status()function. Needs support in PAPPL.
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.
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.
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 collection. - `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)
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.
CHANGES IN V2.0.0 - 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 generator. - 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 (https://github.com/mohitmo/GSoC-2020-Documentation). - 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 network-online.target (Pull request #360). - texttopdf: Set default margins when no PPD file is used (Pull request #356).
CHANGES IN V1.28.9 - 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 network-online.target (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.