User Tools

Site Tools


gsoc:google-summer-code-2018-openprinting-projects

This is an old revision of the document!


Google Summer of Code 2018: OpenPrinting projects

Contact

Important: We protect the e-mail adresses of our mentors and mailing lists against spam bots. Please replace all occurences of “ at ” and “ dot ” by “@” and “.” resp.

Mailing list: printing-architecture at lists dot linux-foundation dot org

IRC: #openprinting on Freenode

OpenPrinting developer resources

Code License: See project descriptions

Organization Administrators

The participation of the Linux Foundation in the Google Summer of Code is organized by Till Kamppeter (till at linux dot com) and Aveek Basu (basu dot aveek at gmail dot com).

Project Ideas

Turn the scp-dbus-service of system-config-printer into C

system-config-printer was the default printer setup tool in Red Hat/Fedora Linux for a lot of time and also got adopted by Ubuntu around ten years ago. During this time it received a lot of development work, especially on the algorithms for finding the best driver for a printer and for identifying whether printer discovery results from the CUPS backends actually come from the same physical printer.

To make these algorithms available for other printer setup tools (both interactive GUI tools and programs which fully automatically create print queues without user interaction) they got moved into a D-Bus service, scp-dbus-service. Now every other program can simply call the needed function via a D-Bus API. The printer setup tool in the GNOME Control Center for example works this way.

system-config-printer was written in Python and therefore scp-dbus-service is also written in Python. This makes it depending on Python and also makes it loading the needed Python libraries into memory when started. This can cause delays during boot when a utility to auto-setup print queues is used.Also most printer setup tools are written in C, Therefore it makes sense to convert the D-Bus service into the C language.

The student's task is to turn the scp-dbus-service of system-config-printer into C, either as D-Bus service (would work out-of-the-box with many GUIs) or as a C library with API (simpler), ideally both. This will make it easier to write printer setup tools in practically any programming language.

Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), system-config-printer upstream developers TBD

Desired knowledge: C/Cprogramming, Python programming Code license: GPL 2+ or MIT =====Content-oriented printer auto-selection===== In the classic user interfaces you select at first a printer for printing a job and then you adjust the settings on these printer to the needs of the job. So you usually see a more or less long list of printers and do not really know which one is the best for the job you want to print. You select one, see the options and then you go back and select another one. What about not having to select a printer at all and simply see options, like paper size, paper type, job type (text, photo, drawing, ...), color/grayscale, print quality, double-sided, booklet maker, ... and depending on how you set the options the system will automatically select the best printer for you and give you a notification to which printer your job gets sent. So no knowledge about available printers and their capabilities is needed. To do so we want to cluster an arbitrary collection of printers (all available printers, all of one office floor, ...) into one queue with a merged PPD file (all options of all printers available, option conflicts if selection cannot be obeyed on one single printer). The user selects options (and document type, like text, photo, ... is also submitted) and the printer (or printers) to print the job on get auto-selected by cups-browsed. The user does not need to know which printers are available and what they are capable of. An interesting idea for a new concept of printing user experience. Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD Desired knowledge: C programming, CUPS Code license: LGPL 2.1+ =====SANE module for IPP driverless scanning===== Version 2.0 and newer of the Internet Printing Protocol (IPP) support polling the full set of capabilities of a printer and if the printer supports a known Page Description Language (PDL), like PWG Raster, Apple Raster, PCLm, or PDF, it is possible to print without printer-model-specific software (driver) or data (PPD file), so-called "driverless" printing. This concept was introduced for printing from smartphones and IoT devices which do not hold a large collection of printer drivers. Driverless printing is already fully supported under Linux. Standards following this scheme are IPP Everwhere, Apple AirPrint, Mopria, and Wi-Fi Direct Print. As there are many multi-function devices (printer/scanner/copier all-in-one) which use the IPP, the Printing Working Group (PWG) has also worked out a standard for IPP-based scanning, "driverless" scanning, to also allow scanning from a wide range of client devices, independent of which operating systems they are running. Conventional scanners are supported under Linux via the SANE (Scanner Access Now Easy) system and require drivers specific to the different scanner models. Most of them are written based on reverse-engineering due to lack of support by the scanner manufacturers. To get driverless scanning working with the software the users are used to the best solution is to write a SANE module for driverless IPP scanning. This module will then automatically support all IPP scanners, thousands of scanners where many of them do not yet exist. The student's task is to write this SANE module for IPP driverless scanning and so make Linux ready for the future of driverless devices. Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), SANE upstream developers TBD Desired knowledge: C programming, DNS-SD, IPP Code license: GPL 2+ =====IPP scan (or virtual MF device) server===== The Internet Printing Protocol (IPP) does not only support printing, but also scanning, as there are many printers which also have a scanner (multi-function (MF) devices). Both CUPS and the developer tool ippserver emulate IPP network printers but not IPP scanners and so they cannot serve as a server to share a local scanner. This task is about adding the scan server functionality. If you have a scanner connected locally (and it scans via SANE), share it via CUPS as an IPP scanner, advertising itself and accepting jobs using the IPP driverless scanning standard. In contrary to SANE-based network scanning clients with any operating system, also phones or IoT devices can scan on your shared scanner. Also old hardware can be recycled to a modern MF device, and we have a sample implementation to motivate manufacturers to adopt IPP scanning. Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD Desired knowledge: C programming, DNS-SD, IPP Code License: Apache 2.0 =====Support for IPP System Service===== Most network printers have a web interface which allows to configure the printer from any computer in the network using a web browser. Advantage is that no printer-model-specific software needs to be installed on the computer in order to configure a printer, and one has no dependency on certain supported operating systems. One can even configure printers using a smartphone. Disadvantage is that every manufacturer does its web interface differently which makes administration of many printers of different brands awkward. In addition, automated printer administration with scripts requires different interfaces for each printer. And for setting local print queues you open your printer setup tool but for printer administration you have to open your browser. To make this easier the Printing Working Group (PWG) has introduced the IPP System Service standard. This is an interface made up of standardized IPP requests to poll printer capabilities and configure the printer as needed. Every printer from every manufacturer uses the same requests and so a common printer configuration interface can be added to printer setup tools or automated administration with scripts is possible. The student's task will be to create an appropriate printer configuration interface for system-config-printer or for the GNOME Control Center. Mentors: Upstream developers of GNOME/GTK or system-config-printer TBD. Desired knowledge: C and/or Python programming, GTK Code License: GPL 2+ or LGPL 2+ =====Printing of files directly from the file manager===== Sometimes you browse through your files and see some files which you want to print, files in completely different formats: PDFs, photos, LibreOffice files, ... It is awkward to double-click each file, one-by-one, to get it opened in its application, and then click "Print" in each application. It would be much easier to mark all these files, right-click and then click "Print" in the context menu. Here the student's task is to add this functionality to a popular file manager, for example the one of GNOME. Mentors: Aveek Basu (basu dot aveek at gmail dot com), Lexmark, upstream developers of GNOME/GTK TBD. Desired knowledge: C programming, GTK Code License: LGPL 2+ =====Enhancements for ipptool===== ipptool is a command line tool for issuing IPP requests and receiving the printer's/the server's answer. This tool is maintained as free software in the [[https://github.com/istopwg/ippsample programming, GUI programming, GTK

Improve the pdftoraster and bannertopdf filters to not need copying Poppler source code or unstable APIs

The cups-filters project at OpenPrinting (included in all Linux distributions using CUPS 1.6.x or newer) provides the filters needed to convert the print job output of desktop applications (usually PDF) into the printer's native language or into the universal CUPS/PWG-Raster format as input for a separate printer driver. It also provides the pdftopdf filter to apply page management (N pages per sheet, selected pages, even/odd pages for manual duplex, mirror for iron-on sheets, …) to the PDF data stream.

Two of the filters, pdftoraster, to rasterize PDF files into CUPS/PWG Raster, and bannertopdf, to generate banner pages and test pages, use Poppler but make use of unstable APIs of Poppler, requiring frequent modifications when Poppler gets updated. bannertopdf does even not require a PDF interpreter, so it could be implemented with libraries like QPDF.

The task for the student is here to once improve pdftoraster's interface with Poppler and second to convert bannertopdf to use QPDF.

Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com),

Desired knowledge: C and/or Cprogramming Code License: MIT =====Foomatic: Generating CUPS PPD generator (/usr/share/cups/drv/*.drv files) from Foomatic data===== CUPS has two mechanisms for on-the-fly-PPD generation to avoid the wasting of disk space by thousands of uncompressed (or slightly compressed) PPD files. One is to put an executable file into the /usr/lib/cups/driver/ directory which lists and generates PPD files on request, the other is using *.drv files in /usr/share/cups/drv, which contain the data for the PPDs in a simpler and more compact format. The former method is deprecated upstream and can be removed in a future release of CUPS, especially also because the executables can get slow in some cases. The latter is not yet supported by Foomatic and letting Foomatic support it is subject of this project idea. The student's task is to create a utility which generates *.drv files from the whole database and/or from selected, printers, manufacturers, drivers, groups, ..., depending on what the user requests. Mentor: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com) Desired knowledge: Perl programming, perhaps also MySQL Code License: GPL =====Get the cairo color management code upstream===== Adrian Johnson did a lot of the work needed to make cairo color managed. Finishing this work and getting the code upstream would allow us to simplify a lot of applications that use cairo. See [[http://cgit.freedesktop.org/%7Eajohnson/cairo/log/?h=color-space programming

Code License: GPL

gsoc/google-summer-code-2018-openprinting-projects.1516239190.txt.gz · Last modified: 2018/01/18 01:33 by till