User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
gsoc:google-summer-code-2018-openprinting-projects [2018/01/30 18:42]
till
gsoc:google-summer-code-2018-openprinting-projects [2018/03/11 15:04] (current)
dli 18 Added Idea: Common Print Dialog Qt implementation
Line 20: Line 20:
 ======Project Ideas====== ======Project Ideas======
  
-=====Content-oriented printer auto-selection=====+=====1. 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. 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.
Line 36: Line 36:
 Code license: LGPL 2.1+ Code license: LGPL 2.1+
  
-=====SANE module for IPP driverless scanning=====+=====2. 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. 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.
  
Line 51: Line 51:
 Code license: GPL 2+ Code license: GPL 2+
  
-=====IPP scan (or virtual MF device) server=====+=====3. 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. 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.
  
Line 64: Line 64:
 Code License: Apache 2.0 Code License: Apache 2.0
  
-=====Support for IPP System Service=====+=====4. 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. 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.
Line 80: Line 80:
 Code License: GPL 2+ or LGPL 2+ Code License: GPL 2+ or LGPL 2+
  
-=====Secure (IPPS/​HTTPS) connection support for IPP-over-USB=====+=====5. Secure (IPPS/​HTTPS) connection support for IPP-over-USB=====
  
 Driverless printing was originally designed for network printers, a client device, typically a smartphone, tablet, or IoT device) discovers printers nearby via DNS-SD and then communicates with them via Internet Printing Protocol (IPP), which is based on the HTTP web protocol. Printers even use HTTP in addition to IPP, for their administration web interfaces. For more security many printers support also the encrypted versions of these protocols, HTTPS and IPPS. Driverless printing was originally designed for network printers, a client device, typically a smartphone, tablet, or IoT device) discovers printers nearby via DNS-SD and then communicates with them via Internet Printing Protocol (IPP), which is based on the HTTP web protocol. Printers even use HTTP in addition to IPP, for their administration web interfaces. For more security many printers support also the encrypted versions of these protocols, HTTPS and IPPS.
Line 99: Line 99:
  
  
-=====Printing of files directly from the file manager=====+=====6. 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. 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.
Line 105: Line 105:
 Here the student'​s task is to add this functionality to a popular file manager, for example the one of GNOME. 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.+Mentors: Aveek Basu (basu dot aveek at gmail dot com), upstream developers of GNOME/GTK TBD.
  
 Desired knowledge: C programming,​ GTK Desired knowledge: C programming,​ GTK
Line 111: Line 111:
 Code License: LGPL 2+ Code License: LGPL 2+
  
-=====Enhancements for ipptool=====+=====7. 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|ippsample]] collection from the Printer Working Group ([[http://​www.pwg.org/​|PWG]]). It is mainly for development and debugging of IPP-related software. 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|ippsample]] collection from the Printer Working Group ([[http://​www.pwg.org/​|PWG]]). It is mainly for development and debugging of IPP-related software.
Line 125: Line 125:
 Code License: Apache 2.0 Code License: Apache 2.0
  
-=====PWG Raster "​lint"​ program=====+=====8. PWG Raster "​lint"​ program=====
  
 The PWG Raster format is a universal, multi-page raster format, supporting various color spaces and color depths, and near arbitrary resolutions and page sizes and also printing-related meta data, like paper type, duplex, ... It is designed as a universal raster-based Page Description Language (PDL) which allow all types of printers having a common input data format. As this format is raster-based it does not need high amounts of memory and computing power in the printer for rendering the pages and can therefore be implemented also in very cheap printers. The PWG Raster format is a universal, multi-page raster format, supporting various color spaces and color depths, and near arbitrary resolutions and page sizes and also printing-related meta data, like paper type, duplex, ... It is designed as a universal raster-based Page Description Language (PDL) which allow all types of printers having a common input data format. As this format is raster-based it does not need high amounts of memory and computing power in the printer for rendering the pages and can therefore be implemented also in very cheap printers.
Line 139: Line 139:
 Code License: Apache 2.0 Code License: Apache 2.0
  
-=====Enhance "​ippserver"​ to support the full range of IPP data types=====+=====9. Enhance "​ippserver"​ to support the full range of IPP data types=====
  
 ippserver is a simple daemon which emulates an IPP printer. It has a lot of possibilities to configure it to emulate the desired printer, it can even emulate real printers using an appropriate spec sheet, which can be extracted from the real printer by a bug-reporting user and the client software developer can emulate the user's printer. ippserver is a simple daemon which emulates an IPP printer. It has a lot of possibilities to configure it to emulate the desired printer, it can even emulate real printers using an appropriate spec sheet, which can be extracted from the real printer by a bug-reporting user and the client software developer can emulate the user's printer.
Line 153: Line 153:
 Code License: Apache 2.0 Code License: Apache 2.0
  
-=====Common Print Dialog Backends projects=====+=====10. Common Print Dialog Backends projects=====
  
 The [[https://​github.com/​OpenPrinting|OpenPrinting]] project "​Common Print Dialog Backends"​ provides a [[https://​github.com/​OpenPrinting/​cpdb-libs|D-Bus interface]] to separate the print dialog GUI from the communication with the actual printing system (CUPS, Google Cloud Print, ...) having each printing system being supported with a backend and these GUI-independent backends working with all print dialogs (GTK/GNOME, Qt/KDE, LibreOffice,​ ...). This allows for easily updating all print dialogs when something in a print technology changes, as only the appropriate backend needs to get updated. Also new print technologies can get easily introduced by adding a new backend. The [[https://​github.com/​OpenPrinting|OpenPrinting]] project "​Common Print Dialog Backends"​ provides a [[https://​github.com/​OpenPrinting/​cpdb-libs|D-Bus interface]] to separate the print dialog GUI from the communication with the actual printing system (CUPS, Google Cloud Print, ...) having each printing system being supported with a backend and these GUI-independent backends working with all print dialogs (GTK/GNOME, Qt/KDE, LibreOffice,​ ...). This allows for easily updating all print dialogs when something in a print technology changes, as only the appropriate backend needs to get updated. Also new print technologies can get easily introduced by adding a new backend.
Line 173: Line 173:
 Code license: MIT Code license: MIT
  
-=====Turn the scp-dbus-service of system-config-printer into C=====+=====11. Common Print Dialog Qt implementation (1 student)===== 
 +The [[https://​doc.qt.io/​qt-5.10/​qtprintsupport-index.html | Qt Print Support]] framework should be updated with the CPD support. The goal is to provide the CPD GUI features and d-bus communications with the [[https://​github.com/​OpenPrinting/​cpdb-libs | CPD backend support]] for printing from Qt5 applications on support platforms. 
 + 
 +Based on the GSoC work of the previous year, one example of Qt CPD implementation outside of Qt Print Support can be found at: [[https://​github.com/​rithvikp1998/​CPDv2]]. For this task, the implementation is expected to start with [[https://​github.com/​openwebos/​qt/​blob/​master/​src/​gui/​dialogs/​qprintdialog_unix.cpp|QPrintDialog]] instead. 
 + 
 +Mentors: Dongxu Li (dongxuli2011 at gmail dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD 
 + 
 +Desired knowledge: C++ programming,​ Qt, CUPS 
 + 
 +Licenses: Qt Contribution Agreement 
 + 
 +=====12. ​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. 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.
Line 189: Line 200:
 Code license: GPL 2+ or MIT Code license: GPL 2+ or MIT
  
-=====Google Cloud Print: Desktop-integrated solution for registering local CUPS printers=====+=====13. Google Cloud Print: Desktop-integrated solution for registering local CUPS printers=====
  
 [[https://​developers.google.com/​cloud-print/​docs/​overview|Google Cloud Print]] is a service from Google which allows to print from anywhere with internet access to anywhere else with internet access, for example from a mobile phone to printer at home or in the office. [[https://​developers.google.com/​cloud-print/​docs/​overview|Google Cloud Print]] is a service from Google which allows to print from anywhere with internet access to anywhere else with internet access, for example from a mobile phone to printer at home or in the office.
Line 211: Line 222:
 Desired knowledge: C/C++ programming,​ GUI programming,​ GTK Desired knowledge: C/C++ programming,​ GUI programming,​ GTK
  
-=====Improve the pdftoraster and bannertopdf filters to not need copying Poppler source code or unstable APIs=====+=====14. 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. 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.
Line 224: Line 235:
  
 Code License: MIT Code License: MIT
-=====Foomatic:​ Generating CUPS PPD generator (/​usr/​share/​cups/​drv/​*.drv files) from Foomatic data=====+=====15. 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. 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.
Line 239: Line 250:
  
 Code License: GPL Code License: GPL
-=====Get the cairo color management code upstream=====+=====16. 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|http://​cgit.freedesktop.org/​~ajohnson/​cairo/​log/?​h=color-space]] for the branch. Adrian has also patched Inkscape to use the new features, and that needs cleaning up and pushing upstream [[http://​cgit.freedesktop.org/​%7Eajohnson/​inkscape/​log/?​h=color-space|http://​cgit.freedesktop.org/​~ajohnson/​inkscape/​log/?​h=color-space]] Also see [[http://​lists.cairographics.org/​archives/​cairo/​2012-July/​023353.html|http://​lists.cairographics.org/​archives/​cairo/​2012-July/​023353.html]] and [[https://​mail.gnome.org/​archives/​gimp-developer-list/​2012-August/​msg00084.html|https://​mail.gnome.org/​archives/​gimp-developer-list/​2012-August/​msg00084.html]] for more details. 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|http://​cgit.freedesktop.org/​~ajohnson/​cairo/​log/?​h=color-space]] for the branch. Adrian has also patched Inkscape to use the new features, and that needs cleaning up and pushing upstream [[http://​cgit.freedesktop.org/​%7Eajohnson/​inkscape/​log/?​h=color-space|http://​cgit.freedesktop.org/​~ajohnson/​inkscape/​log/?​h=color-space]] Also see [[http://​lists.cairographics.org/​archives/​cairo/​2012-July/​023353.html|http://​lists.cairographics.org/​archives/​cairo/​2012-July/​023353.html]] and [[https://​mail.gnome.org/​archives/​gimp-developer-list/​2012-August/​msg00084.html|https://​mail.gnome.org/​archives/​gimp-developer-list/​2012-August/​msg00084.html]] for more details.
Line 248: Line 259:
  
 Contact: Richard Hughes (hughsient at gmail dot com) Contact: Richard Hughes (hughsient at gmail dot com)
-=====Add printer output backends to MuPDF=====+=====17. Add printer output backends to MuPDF=====
  
 MuPDF is a lightweight PDF renderer made by Artifex, the company behind Ghostscript. In contrary to Ghostscript,​ MuPDF is a pure PDF renderer. It does not contain a PostScript interpreter nor parts of it are written in PostScript. This makes it smaller, faster, and less resource-consuming,​ the ideal solution for mobile devices like tablets or smartphones. MuPDF is a lightweight PDF renderer made by Artifex, the company behind Ghostscript. In contrary to Ghostscript,​ MuPDF is a pure PDF renderer. It does not contain a PostScript interpreter nor parts of it are written in PostScript. This makes it smaller, faster, and less resource-consuming,​ the ideal solution for mobile devices like tablets or smartphones.
gsoc/google-summer-code-2018-openprinting-projects.1517337762.txt.gz · Last modified: 2018/01/30 18:42 by till