User Tools

Site Tools


gsoc:google-summer-code-2021-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
Last revision Both sides next revision
gsoc:google-summer-code-2021-openprinting-projects [2021/02/08 16:21]
till
gsoc:google-summer-code-2021-openprinting-projects [2021/03/08 15:47]
till
Line 63: Line 63:
 This principally happens in the following projects: This principally happens in the following projects:
  
-  * [[https://​github.com/michaelrsweet/​pappl/|PAPPL]] - Printer Application Framework ​library for Printer/​Scanner Applications+  * [[https://openprinting.github.io/cups/|CUPS]] - The standard printing environment for Linux and other POSIX-style operating systems
   * [[https://​github.com/​OpenPrinting/​cups-filters/​|cups-filters]] - filters, backends, cups-browsed,​ ... - Everything which CUPS needs to be used on non-Mac systems   * [[https://​github.com/​OpenPrinting/​cups-filters/​|cups-filters]] - filters, backends, cups-browsed,​ ... - Everything which CUPS needs to be used on non-Mac systems
-  * [[https://​github.com/​OpenPrinting/​ps-printer-app/​|PostScript Printer Application]] - Printer Application for PostScript Printers+  ​* [[https://​github.com/​OpenPrinting/​cups-snap/​|CUPS Snap]] - Snap package of CUPS, for printing in all-Snap OS distributions ([[https://​snapcraft.io/​cups|in the Snap Store]]) 
 +  * [[https://​github.com/​michaelrsweet/​pappl/​|PAPPL]] - Printer Application Framework - library for Printer/​Scanner Applications 
 +  ​* [[https://​github.com/​OpenPrinting/​ps-printer-app/​|PostScript Printer Application]] - Printer Application for PostScript Printers ​([[https://​snapcraft.io/​ps-printer-app|in the Snap Store]])
   * [[https://​github.com/​michaelrsweet/​hp-printer-app/​|HP Printer Application]] - Printer Application for HP PCL printers   * [[https://​github.com/​michaelrsweet/​hp-printer-app/​|HP Printer Application]] - Printer Application for HP PCL printers
-  * [[https://​github.com/​OpenPrinting/​cups-snap/​|CUPS Snap]] - Snap package of CUPS, for printing in all-Snap OS distributions 
   * [[https://​github.com/​alexpevzner/​sane-airscan/​|sane-airscan]] - The "​airscan"​ SANE backend, supports driverless eSCL and WSD scanning, IPP Scan support is planned   * [[https://​github.com/​alexpevzner/​sane-airscan/​|sane-airscan]] - The "​airscan"​ SANE backend, supports driverless eSCL and WSD scanning, IPP Scan support is planned
 +
 +See also
 +
 +  * [[https://​openprinting.github.io/​news/​|OpenPrinting News and Events]] - Monthly news post, software releases, ...
 +  * [[https://​lists.linuxfoundation.org/​pipermail/​printing-architecture/​2021/​thread.html|OpenPrinting mailing list archive]] - Our recent discussions about the development of the printing architecture
  
 ======Project Ideas====== ======Project Ideas======
 +
 +=====GUI for listing and managing available IPP Print/Scan services (or DNS-SD-advertised network services in general)=====
 +
 +As described above, all available printers and scanners will simply be IPP services (physical network printers or Printer Applications) and drivers will be Printer Applications. They are managed by their web administration interfaces and/or IPP System Service. Local CUPS queues are simply automatically popping up for each IPP print service available.
 +
 +Due to this we do not need any more the classic printer management tools where the local CUPS queues are listed and you modify their properties. Instead, your printer/​scanner management tool should list all IPP services, native hardware devices, Printer Applications,​ shared CUPS queues on remote servers. For each service (1 service = 1 host:port) a main entry with sub-entries for each printer, scanner, or fax out facility. These entries should have action buttons, for main entries to open the web interface in a browser, pop up an IPP System Service status/​control window, ... and for sub-entries buttons to go to the web interface page of this printer, pause/​resume/​set-as-default quick-access buttons, ...
 +
 +This way the user knows which IPP services are available and can easily click to their management interfaces (many users do not know about web interfaces for network services or how to find them). Especially if he installs a Printer Application from the Snap Store he needs to know how to set up his printer with it.
 +
 +All the information needed to create the list is provided by DNS-SD (Avahi). DNS-SD advertises all printers, scanners, web interfaces, IPP System Service interfaces, ... see the output of "​avahi-discover"​ and "​avahi-browse"​.
 +
 +And with this one is already close to having a general network service management tool, also listing the DNS-SD services which are not related to printing with buttons to their web interfaces (imaging the user can open the web interface of his router with a simple mouse click). This would be the "​user-friendly"​ avahi-discover then, showing the services in a user-friendly order an presentation.
 +
 +The student'​s task is to implement such a tool in GTK, ideally as a module for the GNOME Control Center.
 +
 +Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), GNOME/GTK developers, TBD
 +
 +Desired knowledge: %%C/C++%%, GTK, DNS-SD/​Avahi,​ CUPS/IPP
 +
 +Code License: GPL-2+ and LGPL-2+
 +
 +
 +=====GUI to guide the user to the correct Printer Application=====
 +
 +Modern printers usually are driverless IPP printers, and those get discovered and set up fully automatically with CUPS, no Printer Application is required for them, so it is easy for users to get up and running with them.
 +
 +Printers which do not do driverless IPP are either legacy printers, themany older printers which got developed before driverless IPP printing existed, and specialty printers. These need Printer Applications. As there will be several different Printer Applications and each one supporting another set of printers it is not trivial for the user to discover available non-IPP-driverless printers and find out which is the Printer Application to use and whether it is already installed.
 +
 +So we need some guide for the user. The idea is a GUI tool which lists available, non-IPP-driverless printers, local (USB) and network devices. If the user selects one of them, all installed Printer Applications which support this printer are shown, and for each a button to open the Printer Application'​s web interface and also a quick auto-add-this-printer button. In addition to the list of suitable Printer Applications there should also be a button which does a fuzzy search for the printer make and model on the Snap Store to find Printer Applications which are not installed on the local system.
 +
 +The student'​s task is to implement such a tool in GTK, ideally as a module for the GNOME Control Center.
 +
 +Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), GNOME/GTK developers, TBD
 +
 +Desired knowledge: %%C/C++%%, GTK, DNS-SD/​Avahi,​ CUPS/IPP
 +
 +Code License: GPL-2+ and LGPL-2+
  
  
Line 116: Line 159:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Michael Sweet, author of CUPS and PAPPL (msweet at msweet dot org), Jai Luthra (luthrajaiji at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Michael Sweet, author of CUPS and PAPPL (msweet at msweet dot org), Jai Luthra (luthrajaiji at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
  
  
-=====Converting SANE scanner drivers to Scanner Applications=====+=====Firmware and other file handling in PAPPL=====
  
-By the time when coding starts we will have implemented IPP Scan server functionality ​to PAPPL and with this we have the base for creating Scanner Applications. To support ​the thousands of scanners which are already working with [[http://​www.sane-project.org/​|SANE]] ​with the new IPP Scan/​Scanner Application method, we need to create a retro-fit Scanner Application which uses SANE internally.+For some printers there are firmware files, either as an upgrade or if the printer is a cheaper model which does not have non-volatile memory ​to hold the printer'​s firmware, requiring the firmware be loaded from the computer each time the printer is turned onOther printers could be enhanced ​with fonts or custom color profiles.
  
-One could theoretically make use of the fact that most SANE backends are open-source ​and so extract ​the knowledge about how the scanners work and write native driversbut without having all these scanners at hand for testing ​the risk is too highas mentioned above here for the retro-fitting of printer drivers.+This can easily be handled by the Printer Application,​ offering an appropriate page in its administration web interface where the user can upload files into Printer Application'​s file space and the Printer Application would apply them somehow, as loading them into the printer as update or enhancementloading them into the printer everytime when the printer ​is turned onuse them in the job filtering process, ...
  
-Therefore we want to create a framework to encapsulate existing SANE backends ​in a Scanner ​Application ​and do not modify ​the code of the backends themselves. This would be a SANE fromtendbut not as the ones we know which are primarily operated by a GUI or by the command line. Instead, it will be operated by IPP Scan and an administration ​web interface, all with the help of PAPPL.+An example already exists, ​in the [[https://​github.com/​OpenPrinting/​ps-printer-app/​|PostScript Printer ​Application]] the facility to upload custom PPD files to support additional printer modelssee the "Add PPD files" page in its web interface.
  
-The student'​s task is to create ​this SANE retro-fit frameworkespecially making one Scanner Application from the sane-backends projectsbut also allow to retro-fit any other SANE backend from separate project (like HPLIP) into a Scanner ​Application.+The student'​s task here is to generalize ​this featureadd common functions, like multiple, arbitrary file upload, managing and removing already uploaded files, callback function support for applying ​the filesfor example that the developer of Printer ​Application ​can implement the code for the proprietary firmware upload method in a callback, ...
  
-Mentors: Till KamppeterProject Leader OpenPrinting (till at linux dot com), Michael Sweet, author ​of CUPS and PAPPL (msweet at msweet dot org), Jai Luthra (luthrajaiji at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), Alexander Pevzner (pzz at apevzner dot com), TBD+As an example application the student could retro-fit the "​foo2zjs"​ printer driver into a Printer Applicationas this driver supports appropriate printers and handles the types of files mentioned here.
  
-Desired knowledge: C/C++, CUPS+Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Michael Sweet, author of CUPS and PAPPL (msweet at msweet dot org), Jai Luthra (luthrajaiji at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD 
 + 
 +Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
  
  
-=====Firmware and other file handling in PAPPL=====+=====Converting SANE scanner drivers to Scanner Applications=====
  
-For some printers there are firmware files, either as an upgrade or if the printer is a cheaper model which does not have non-volatile memory ​to hold the printer'​s firmware, requiring the firmware be loaded from the computer each time the oprinter is turned onOther printers could be enhanced ​with fonts or custom color profiles.+By the time when coding starts we will have implemented IPP Scan server functionality ​to PAPPL and with this we have the base for creating Scanner Applications. To support ​the thousands of scanners which are already working with [[http://​www.sane-project.org/​|SANE]] ​with the new IPP Scan/​Scanner Application method, we need to create a retro-fit Scanner Application which uses SANE internally.
  
-This can easily be handled by the Printer Application,​ offering an appropriate page in its administration web interface where the user can upload files into Printer Application'​s file space and the Printer Application would apply them somehow, as loading them into the printer as update or enhancementloading them into the printer everytime when the printer ​is turned onuse them in the job filtering process, ...+One could theoretically make use of the fact that most SANE backends are open-source ​and so extract ​the knowledge about how the scanners work and write native driversbut without having all these scanners at hand for testing ​the risk is too highas mentioned above here for the retro-fitting of printer drivers.
  
-An example already exists, ​in the [[https://​github.com/​OpenPrinting/​ps-printer-app/​|PostScript Printer ​Application]] the facility to upload custom PPD files to support additional printer modelssee the "Add PPD files" page in its web interface.+Therefore we want to create a framework to encapsulate existing SANE backends ​in a Scanner ​Application ​and do not modify ​the code of the backends themselves. This would be a SANE fromtendbut not as the ones we know which are primarily operated by a GUI or by the command line. Instead, it will be operated by IPP Scan and an administration ​web interface, all with the help of PAPPL.
  
-The student'​s task here is to generalize ​this featureadd common functions, like multiple, arbitrary file upload, managing and removing already uploaded files, callback function support for applying ​the filesfor example that the developer of Printer ​Application ​can implement the code for the proprietary firmware upload method in a callback, ...+The student'​s task is to create ​this SANE retro-fit frameworkespecially making one Scanner Application from the sane-backends projectsbut also allow to retro-fit any other SANE backend from separate project (like HPLIP) into a Scanner ​Application.
  
-As an example application the student could retro-fit the "​foo2zjs"​ printer driver into a Printer Application,​ as this driver supports appropriate printers and handles the types of files mentioned here. +Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Michael Sweet, author of CUPS and PAPPL (msweet at msweet dot org), Jai Luthra (luthrajaiji at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), Alexander Pevzner (pzz at apevzner ​dot com), TBD
- +
-Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Michael Sweet, author of CUPS and PAPPL (msweet at msweet dot org), Jai Luthra (luthrajaiji at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD+
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
Line 167: Line 210:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
Line 184: Line 227:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
Line 203: Line 246:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
Line 218: Line 261:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
Line 233: Line 276:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
Line 252: Line 295:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
Line 269: Line 312:
 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), Alexander Pevzner (pzz at apevzner dot com), TBD Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), Alexander Pevzner (pzz at apevzner dot com), TBD
  
-Desired knowledge: C/C++, CUPS+Desired knowledge: ​%%C/C++%%, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
 +
 +
 +=====Turn the scp-dbus-service methods - GetBestDrivers and MissingExecutables - 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.
 +
 +GNOME Control Center uses two methods - GetBestDrivers and MissingExecutables - for its printer setup. The GetBestDrivers method is used for finding the right printer drivers from ones which are available on the system. The MissingExecutables method is checking method, which is run after finding the best driver and checks if any additional software is needed for getting the printer functional.
 +
 +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. 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 two mentioned methods of system-config-printer into C, first as a C library with API, then as a D-Bus service (would
 + work out-of-the-box with many GUIs) if the C library will be finished. This will make it easier to use those methods in other print tools in practically any programming language.
 +
 +Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), system-config-printer upstream developer Zdenek Dohnal (zdohnal at redhat dot com)
 +
 +Desired knowledge: C/%%C++%% programming,​ Python programming,​ autoconf/​automake(creating configure and Makefile), basic testing
 +
 +Code license: GPL 2+ or MIT
  
  
gsoc/google-summer-code-2021-openprinting-projects.txt · Last modified: 2021/04/19 09:08 by till