This presentation introduces the current Linux printing scenario and driverless printing feature. It is for COSCUP 2023 OSPN Japan special track. https://coscup.org/2023/en/session/9AXGL7
Naruhiko NARU Ogasawara ( 小笠原 徳彦 ) • Desktop FLOSS enthusiast from Chiba, Japan • (Printing, LibreOffice, ...) • former member of OpenPrinting Japan • former an employee of a Japanese printer vendor • Amateur kayaker
Printing System • The core module of Linux printing system • It handles: • Job control and its user interface • Data filter pipeline to create PDL • No “kernel-land” modules • Now developed by OpenPrinting
PPD: Postscript Printer Description • The name is came from historical reason, not limited to Postscript • Describe printer capabilities • Color/Monochrome • Supported media size • Supported media type • Finishing feature (duplex, stapling, ...)
“Last” filter of the filter pipeline • To generate the printer-specific data format (PDL; Printer or Page Description Language) • Which draws pictures onto papers • Vector / Raster
era... • Who provides the “printer driver” for a particular printer? • According to the market share of desktop OSes, do printer vendors want to develop their printers’ drivers for Linux? • Can printer vendors support continuously? • (Linux desktop, like Ubuntu, evolves so fast) • Many of PDLs are proprietary, so development of fully-open- sourced drivers is difficult (except PostScript, PCL5e/PCL6)
we don’t need to install “printer drivers” • Instead, connect via Wi-Fi or USB then just work • If the printer support “Apple AirPrint” (or “IPP Everywhere”)
When a printer turns on, it let same networks devices know “I’m here, I can print” via mDDNS (Avahi) Linux Desktop CUPS Spooler pdftopdf Raster filter Filter pipeline I’m here, I can print CUPS-browsed
CUPS-browsed receive the message, then let CUPS know new printer coming Linux Desktop CUPS Spooler pdftopdf Raster filter Filter pipeline CUPS-browsed Hey CUPS, New printer coming
CUPS asks to the printer it’s attributes (capabilities) via IPP Linux Desktop CUPS Spooler pdftopdf Raster filter Filter pipeline CUPS-browsed Tell me your attributes Ok! IPP
CUPS generate PPD file from received printer attributes Linux Desktop CUPS Spooler pdftopdf Raster filter Filter pipeline CUPS-browsed Here is a new PPD file! PPD
An application can use the PPD to control jobs, and send PDF of page images Linux Desktop CUPS Spooler pdftopdf Raster filter Filter pipeline CUPS-browsed PPD Appli- cation Print this documents with this configuration
The filter pipeline has a raster filter to create raster images from PDF which can be accepted the printer. They are sent via IPP with job control commands Linux Desktop CUPS Spooler pdftopdf Raster filter Filter pipeline CUPS-browsed PPD Appli- cation I can create raster images which you can accept
• A printing protocol over HTTP • RFC 2911 https://datatracker.ietf.org/doc/html/rfc2911 • Bi-directional • Get printer status / capabilities / configurations • Post printing job with job control commands
accepts some raster formats: e.g. RAW (application/octet- stream), PWG Raster, URF (Apple Raster) and JPEG • And you can see the filter pipeline definitions in /usr/share/cups/mime/*.conv files document-format-supported (1setOf mimeMediaType) = application/octet-stream,image/pwg-raster,image/urf,image/jpeg application/pdf application/vnd.cups-pdf 66 pdftopdf # if using Ghostscript application/vnd.cups-pdf image/pwg-raster 99 gstoraster # if using Poppler application/vnd.cups-pdf application/vnd.cups-raster 100 pdftoraster application/vnd.cups-raster image/pwg-raster 100 rastertopwg
are user-land modules within CUPS • The pair of (a) PPD and (b) Language filter • A while ago, using printers in Linux required support from the printer vendor • But now we have a driverless printing feature • This allows Linux users to print Apple AirPrint available printers without vendors’ drivers
Printer Application is a background service, a GUI application, etc. that happens to respond to HTTP and IPP requests. It detects the supported printers and advertises those printers on the localhost as an IPP Everywhere printer. It can also listen on network interfaces (i.e. not just localhost) so provide access to a printer to all client devices on a network. Printer Applications are the recommended architecture for printer drivers. • In short, Virtual IPP-Everywhere Printer • https://openprinting.github.io/documentation/01-printer-application/
framework • https://www.msweet.org/pappl/ • PAPPL is a simple C-based framework/library for developing CUPS Printer Applications, which are the recommended replacement for printer drivers.
• Ghostscript Printer Application for Ghostscript-supported printers, • Gutenprint Printer Application for Gutenprint-supported printers, • HP Printer Application for HP PCL printers, • HPLIP Printer Application for HPLIP-supported printers, • LPrint for DYMO, EPL, and ZPL label printers, and • PostScript Printer Application for PostScript printers.
• Fortunately, CUPS 3.x release postponed at first end of 2024 • So you can use same printing system until then • But time to consider to switch from traditional printer- driver-scenario to driverless printing scenario • Because less printer vendors will release their own printer applications
big change is coming to the Linux printing system • Printer drivers will be moved to printer applications • It is unlikely that each printer vendor will create a printer application, so the importance of driverless printing is increasing