OpenPrinting News - September 2020
OpenPrinting Microconference on Linux Plumbers Conference 2020
We successfully did our second OpenPrinting microconference!
There is a complete recording on YouTube (same links as for the live broadcast during the conference). But note that this one is created automatically by the video conference system, and the edited version will get posted later.
We talked about the following topics (links to the slides in PDF format):
- Introduction - Aveek Basu
- Printer Applications - A new way to print in Linux - Michael Sweet
- 3D Printing - Michael Sweet
- IPP scan (or virtual MF device) server (Scanner Application) - Alexander Pevzner
- Designing and Packaging Printer and Scanner Drivers - Till Kamppeter
- IPP Standards Landscape - Ira McDonald
- IPP Fax Out - A new reality - Aveek Basu
- 20 Years on Printing with Free Software - Till Kamppeter
The video conferencing system and the live broadcast worked very well, having around 40 listeners in our virtual room and up to 17 listeners on YouTube. Thanks again to the great work of the organizers!
But I hope we will be able to meet in person again in 2021.
Google Summer of Code 2020
Coding ended and the final evaluations are completed, the completed projects officially announced by Google.
For the Linux Foundation we got 15 student slots in the beginning and after 1 student dropping out after the first month we had 14 students reaching the final evaluations. 1 of them failed and the other 13 passed.
For OpenPrinting there started with 7 students, 1 being the one who quit after one month and 1 failed in the final evaluations, having 5 who completed the program successfully.
Here are the projects with their submitted work product links:
1. Extract raster data from PDFs for direct printing
Student: Vikrant Malik
Mentors: Sahil Arora, Till Kamppeter
2. General Printer Application SDK
Student: Jai Luthra
Mentors: Michael Sweet, Till Kamppeter
Jai has principally worked on PAPPL but also done an HP PCL sample Printer Application. In the end he has also worked on converting filters of cups-filters into filter functions.
3. Linux GUI application to admin MF devices using IPP System Service
Student: Lakshay Bandlish
Mentor: Michael Sweet
4. Make Printer Applications Configurable
Student: Sambhav Dusad
Mentor: Michael Sweet
Sambhav has also started to create a Gutenprint Printer Application.
5. Speed/Scaling Optimisation of cups-browsed
Student: Mohit Mohan
Mentors: Deepak Patankar, Till Kamppeter
6. Common Print Dialog Backends (CPDB) Qt Implementation
Student: Priydarshi Singh
Mentor: Dongxu Li
FAILED (final evaluation)
We are looking into finishing up CPDB after GSoC.
7. IPP Scan (or virtual MF device) server (Scanner Application)
Student: Aakash Lahoti
Mentors: Michael Sweet, Alexander Pevzner
WITHDRAWN (shortly after first evaluation)
We have replaced this project by a 2-student LFMP project (see below).
Google Season of Docs 2020
Our OpenPrinting project
Tutorial and Design Guidelines for Printer/Scanner drivers in Printer Applications
Piyush Goyal will write for us in the next three months (September 14 - December 5).
In total we got 5 projects accepted for the Linux Foundation.
Linux Foundation Mentorship Program
In our first LFMP project Dipanshu Verma, working on retro-fitting proprietary classic printer drivers into Printer Applications had to withdraw, as his college suddenly re-established the classes after the pandemic interruption. In the first months he has done several tests of installing closed-source drivers into a chroot, see his work on GitHub.
Nidhi Jain has successfully expanded the
driverless tool of cups-filters (which allowed setting up driverless printers with classic printer setup tools) to also work for IPP Fax Out queues, allowing to use the Fax send facility of most modern multi-function printers easily, as devices supporting AirPrint usually support also IPP Fax Out. The functionality is fully working in cups-filters from version 1.28.2 on and will also be included in Ubuntu 20.10 (Groovy Gorilla).
In the printer setup tool you find your printer under the discovered network printers (also if it is connected via USB, as IPP-over-USB is used then). Select this entry and when it comes to select the driver, select the entry with “Fax, driverless”. If you want to fax print the document to this queue and in the print dialog (GTK/GNOME or LibreOffice) select “Custom” in the “Phone Number” option and enter the destination fax number. Parameters like sender info on the fax, default prefixes, repetition of failure, … you configure with the devices web admin interface.
Nidhi was supposed to add fax support to the Common Print Dialog Backends (CPDB) now, but as development did not make it far enough to do so and due to the withdrawal of Dipanshu we have asked her to carry on on retro-fitting classic printer drivers into Printer Applications. Update: Nidhi agreed and will now work on retro-fitting classic printer drivers.
As a replacement for our incomplete GSoC project on IPP Scan we are running our second LFMP project. Here we have selected our students now and they have started working in the beginning of this month:
Expand PAPPL for scan support, Scanner Applications (IPP Scan as a server)
Student: Abhik Chakraborty
Expand sane-airscan to support IPP Scan (IPP Scan as a client)
Student: Rishabh Arya
Abhik will get primarily mentored by Michael Sweet and Rishabh by Alexander Pevzner.
The CUPS Snap project is currently waiting for the snapd project to add the needed API extensions.
The Pull Request for the implementation of the new “cups” and “cups-control” interfaces got merged into snapd.
The pull request for adding the API functionality so that a Snap can check whether a client Snap plugs the needed interfaces is still in the works.
On the Printer Apllications side Sambhav Dusad, GSoC 2020 student, has started to work on creating a Gutenprint Printer Application. As Gutenprint provides all printer capability through its library (PPD files are auto-generated) this will be the first larger-scope native Printer Application.
We also have already the following filter functions in cups-filters: pstops, pdftops, pdftopdf, ghostscript (replaces gstoraster, gstopdf, gstopxl), pclmtoraster, rastertopdf (replaces rastertopdf amd rastertopcl), rastertops, and filterChain
Special thanks go to Vikrant Malik and Jai Luthra for their work on the filter functions.
On the printing-architecture mailing list at OpenPrinting we had a discussion about whether CUPS is still needed with Printer Applications and IPP devices in place:
Note that for participating in these discussions you have to subscribe to the printing-architecture mailing list.
Driverless Scanning and IPP-over-USB
The Main Inclusion Requests (MIR) to get ipp-usb and sane-airscan into Ubuntu Main have passed the general checks of the Ubuntu MIR team and are waiting for the reviews of the Ubuntu security team.
Alexander Pevzner is continuing to take user reports and make the packages working with as many devices as possible.
IPP Scan support is currently added to sane-airscan as a LFMP project.
Currently released is 2.3.3.
Due to dormant upstream development we have discussed to create a (temporary) fork on OpenPrinting for bug fixes and distribution patches and Michael Sweet has done it now.
Currently released is 1.28.2.
On the way towards 2.0.0 we have converted many filters to filter functions, having now pstops, pdftops, pdftopdf, ghostscript (replaces gstoraster, gstopdf, gstopxl), pclmtoraster, rastertopdf (replaces rastertopdf amd rastertopcl), rastertops, and filterChain
filterChain() is a special filter function which takes an array of filter functions as parameter and passes the input data to all these filter functions subsequently, allowing for conversions for which there is no single filter function available.
Special thanks go to Vikrant Malik and Jai Luthra for thei work on the filter functions.
To allow further releases of cups-filters during the transition from 1.x to 2.x I have created a 1.x branch into which I cherry-pick all the bug fixes and some smaller feature additions. This branch is especially the source for the current cups-filters packages in Debian and Ubuntu.
Here I have especially added the driverless fax support and the IPP/IPPS support in the
driverless utility, from Nidhi Jain’s LFMP project (see above). Also many bug fixes, especially crashes and memory leaks of cups-browsed, are included here.
Bug fix release to mainly fix cups-browsed not shutting down and the driverless utility being slow when listing available printers/faxes
Bug fix release to fix several bugs in the new IPP Fax Out support by the “driverless” utility and also to fix some minor issues
Feature release (probably the last one before 2.0.0) which adds IPP Fax Out support, IPPS support, and a command line option to reveal standard IPP URIs to the “driverless” utility, added log file size limitation and command line options to control what happens to generated queues on shutdown to cups-browsed, fixed several bugs when printing PostScript input files, several bugs and memory leaks in cups-browsed, crashes on the presence of certain fonts, and many more fixes.
CHANGES IN V2.0.0 - libcupsfilters, gstoraster, gstopdf, gstopxl: Moved core functionality of gstoraster into the ghostscript() filter function. - braille: Support new liblouis tables not containing a display name (Pull request #303) - libcupsfilters: Added filterChain() filter function to run several filter functions in a chain. - libcupsfilters, pdftopdf: Moved core functionality of pdftopdf into the pdftopdf() filter function (Pull request #301). - Build system: Let ./configure not error out when there is more than one DejaVuSans.ttf test font candidate (Issue #300). - cups-browsed: Crash when a remote printer set as default gets removed, due to missing variable in printf() call (Issue #299). - COPYING: Fixed several typos - libcupsfilters: Fixed typo in log message of get_printer_attributes functions. - cups-browsed: Fixed typos in configuration file and man page - libcupsfilters: Let the PPD generator not suffix page size names with ".Borderless" if all page sizes would get this suffix, for example for printers which generally print borderless. - driverless, driverless-fax, libcupsfilters: Added IPP Fax Out support. Now printer setup tools list an additional fax "driver". A fax queue is created by selecting this driver. Jobs have to be sent with "-o phone=12345" to supply the destination phone number (Pull request #280, #293, #296, #302, #304, #305, #306, Issue #298). - libfontembed: Silenced warning with gcc 10.x (Pull request #287). - libcupsfilters, rastertopdf, rastertopclm: Moved core functionality of rastertopdf into the rastertopdf() filter function (Pull request #288, #289). - cups-browsed: Added ./configure options --enable-saving-created-queues and --with-remote-cups-local-queue-naming (Pull request: #253, #285). - libcupsfilters, pclmtoraster: Moved core functionality of pclmtoraster into the pclmtoraster() filter function (Pull request #275). - libcupsfilters, rastertops: Moved core functionality of rastertops into the rastertops() filter function (Pull request #282, #290). - cups-browsed: Fixed several memory leaks, mainly from the code to merge printer IPP attributes for clusters (Pull request #281, #283). - libcupsfilters: Started adding functions to read out IPP attributes from the job and check them against the IPP attributes (capabilities) of the printer: ippAttrEnumValForPrinter(), ippAttrIntValForPrinter()
CHANGES IN V1.28.2 - driverless: Free allocated memory, use MAX_OUTPUT_LEN (Pull request #304). - driverless: driverless: Make the two ippfind tasks(for IPP and IPPS) run in parallel (Pull request #302, #305, #306). - braille: Support new liblouis tables not containing a display name (Pull request #303) - Build system: Let ./configure not error out when there is more than one DejaVuSans.ttf test font candidate (Issue #300). - cups-browsed: Crash when a remote printer set as default gets removed, due to missing variable in printf() call (Issue #299). - libcupsfilters: Removed all signal handling and global variables from get_printer_attributes() and ippfind_based_uri_converter(). This is overkill for these quick operations and causes problems when shutting down cups-browsed (Issue #298). CHANGES IN V1.28.1 - COPYING: Fixed several typos - libcupsfilters: Fixed typo in log message of get_printer_attributes functions. - cups-browsed: Fixed typos in configuration file and man page - libcupsfilters: Let the PPD generator not suffix page size names with ".Borderless" if all page sizes would get this suffix, for example for printers which generally print borderless. - libcupsfilters: Added "faxPrefix" option for generated IPP Fax Out PPDs, so that this option also appears in print dialogs. - driverless: List addresses for local services correctly when using "--std-ipp-uris" (with "localhost" hostname). - driverless: Make calls of the ippfind utility somewhat faster, setting the timeout of ippfind to automatic. - libcupsfilters: Resolve DNS-SD-based URIs for local services correctly (using hostname "localhost"). - libcupsfilters: In get_printer_attributes() functions do not try to convert URIs which are not DNS-SD-based (Issue #294). - libcupsfilters: In get_printer_attributes() functions also support URIs with "dnssd://..." scheme. - libcupsfilters: Moved signal handling back into main function of the get_printer_attributes() variants, it got moved out accidentally. - driverless: For generating a PPD, independent whether via "driverless URI" or "driverless cat URI", always allow CUPS driver URIs (prefixed with "driverless: " or "driverless-fax:") and pure IPP URIs. - driverless: Accept clean IPP URIs also for 'driverless cat ...' (Issue #295, Pull request #296). - driverless-fax: Do not use fixed path for call of driverless itself (Pull request #293). CHANGES IN V1.28.0 - driverless, driverless-fax, libcupsfilters: Added IPP Fax Out support. Now printer setup tools list an additional fax "driver". A fax queue is created by selecting this driver. Jobs have to be sent with "-o phone=12345" to supply the destination phone number (Pull request #280). - libfontembed: Silenced warning with gcc 10.x (Pull request #287). - cups-browsed: Added ./configure options --enable-saving-created-queues and --with-remote-cups-local-queue-naming (Pull request: #253, #285). - cups-browsed: Fixed several memory leaks, mainly from the code to merge printer IPP attributes for clusters (Pull request #281, #283). - driverless: Added "--std-ipp-uris" command line option to show listed URIs in standard hostname-based form (not the CUPS DNS-SD-service-name-based form. Only for manual call of the utility, for debugging purposes (Pull request #277). - libfontembed: Removed assert() calls which cause crashes when unsupported emoji fonts are installed (Issue #254, Pull request #276). - driverless: Added support for IPPS (use "ipps://..." URIs if possible, Issue #251, Pull request #270, #273). - gstoraster, gstopdf: When converting PostScript to PDF use the "pdfwrite" output device with "-dPDFSETTINGS=/default" instead of with "-dPDFSETTINGS=/printer". This reproduces bitmaps in the PostScript file with their original image quality (Issue #272). - cups-browsed: Limit log file size and add backup file for previous log entries. Introduced the configuration option DebugLogFileSize in cups-browsed.conf to set the actual limit in kilobytes or 0 to get the old behavior of an unlimited size for the log file (Issue #260, Pull request #267). - gstoraster, gstopdf: Do not apply margins when output format is PDF, as then we convert an incoming PostScript file to PDF (pre-pdftopdf) and do not prepare the pages for the printer (post-pdftopdf, Issue #250). - cups-browsed: Do not write any log messages directly to stderr, there were some concerning timeouts on queue creation (Issue #260). - Build system: Fix cross-compilation without DejaVu test font in configure.ac (Issue #262, Pull request #263). - libcupsfilters: Respect the fact that PPD keywords are case-sensitive when adding "*cupsManualCopies: True" in PPD file (Issue #242). - libcupsfilters: Older versions of libcups (< 2.3.1) had the enum name for fold-accordion finishings mistyped. Added a workaround. - cups-browsed: Remove left-over local queues from the previous session more quickly when CUPS legacy browsing is turned on. - cups-browsed: Left-over local queues from the previous session for which the corresponding remote printer did not appear again did not get removed as they were considered externally overwritten. - gstoraster, gstopdf: Add option "-dDoNumCopies" to Ghostscript command line if we are outputting PDF (called via gstopdf wrapper) and the number of copies supplied to CUPS is 1 (4th command line argument). In this case we convert incoming PostScript to PDF and need to respect embedded PostScript commands to implement the number of copies (Issue #255, CUPS Issue #5796, OpenSUSE bug #1173345). - imagetoraster: Potential null dereference fix (when no valid PPD is supplied, Pull request #256). - cups-browsed: Call cupsGetNamedDest() only if "OnlyUnsupportedByCUPS No" - Sample PPDs: Corrected ColorModel default for Generic PWG Raster PPD to Color (Pull request #247). - cups-browsed: Mark the temp queue as cups-browsed-generated during setting printer-is-shared (Pull request #246). - cups-browsed: Remove mentions of README and AUTHORS files in the man page (Pull request #244). - pclmtoraster: Added new filter to extract Raster data from raster-only PDF files, here for the special case of PCLm files (Pull request #243, #257). - Sample PPDs: In Generic-PDF_Printer-PDF.ppd add option to switch between color and grayscale printing (Pull request #237).