User Tools

Site Tools


gsoc:google-summer-code-2022-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-2022-openprinting-projects [2022/01/26 18:01]
till
gsoc:google-summer-code-2022-openprinting-projects [2022/03/05 22:51] (current)
till
Line 8: Line 8:
 Mailing list: [[http://​lists.linux-foundation.org/​mailman/​listinfo/​printing-architecture|printing-architecture at lists dot linux-foundation dot org]] Mailing list: [[http://​lists.linux-foundation.org/​mailman/​listinfo/​printing-architecture|printing-architecture at lists dot linux-foundation dot org]]
  
-IRC: #​openprinting on Freenode+IRC: #​openprinting on [[https://​libera.chat/​|Libera.Chat]]
  
-[[https://​github.com/​OpenPrinting|OpenPrinting GitHub]]+Our code repositories: ​[[https://​github.com/​OpenPrinting|OpenPrinting GitHub]]
  
 Keep in touch with [[https://​openprinting.github.io/​news/​|OpenPrinting'​s state of the art]]. Keep in touch with [[https://​openprinting.github.io/​news/​|OpenPrinting'​s state of the art]].
Line 55: Line 55:
 Having multi-function printers in mind (printer, scanner, also often fax in one device) the [[https://​ftp.pwg.org/​pub/​pwg/​candidates/​cs-ippscan10-20140918-5100.17.pdf|IPP Scan]] standard got created, which allows the use of IPP for both printing and scanning. Especially driverless scanning is possible using the same principles as with driverless printing. Manufacturers actually use eSCL and WSD for driverless scanning instead (also [[https://​github.com/​alexpevzner/​sane-airscan|supported in free software]]),​ but IPP Scan also helps to get scanning working in environments of only sandboxed packages and to more easily distribute scanner drivers. Having multi-function printers in mind (printer, scanner, also often fax in one device) the [[https://​ftp.pwg.org/​pub/​pwg/​candidates/​cs-ippscan10-20140918-5100.17.pdf|IPP Scan]] standard got created, which allows the use of IPP for both printing and scanning. Especially driverless scanning is possible using the same principles as with driverless printing. Manufacturers actually use eSCL and WSD for driverless scanning instead (also [[https://​github.com/​alexpevzner/​sane-airscan|supported in free software]]),​ but IPP Scan also helps to get scanning working in environments of only sandboxed packages and to more easily distribute scanner drivers.
  
-Currently, [[http://​www.sane-project.org/​|SANE]] is the standard platform for scanning. Here a frontend, for example a GUI user appication, like simple-scan or X-SANE, looks for backends (scanner drivers) which are supplied as dynamically loadable shared libraries in a given directory, runs each backend so that it returns back which of its supported scanners are currently present, having the frontend end up with a list of all currently available scanners and through which backend they are available.+Currently, [[http://​www.sane-project.org/​|SANE]] is the standard platform for scanning. Here a frontend, for example a GUI user application, like simple-scan or X-SANE, looks for backends (scanner drivers) which are supplied as dynamically loadable shared libraries in a given directory, runs each backend so that it returns back which of its supported scanners are currently present, having the frontend end up with a list of all currently available scanners and through which backend they are available.
  
-This architecture is not viable for sandboxed packaging, where the user applications are in separate sandboxed packages and one wants to be able to add scanner drivers, ​preferrably ​each scanner driver also in a sandboxed package.+This architecture is not viable for sandboxed packaging, where the user applications are in separate sandboxed packages and one wants to be able to add scanner drivers, ​preferably ​each scanner driver also in a sandboxed package.
  
 So as we create Printer Applications we create Scanner Applications emulating a driverless IPP scanner using the IPP Scan standard. Now scanner drivers can be distributed in individual sandboxed packages, OS-distribution-independent,​ and for multi-function devices one can even distribute a combined Printer/​Scanner Application. The sandboxed packages of user applications which scan only need a backend for IPP Scan and this discovers all Scanner Applications (and scanners in native network devices). So as we create Printer Applications we create Scanner Applications emulating a driverless IPP scanner using the IPP Scan standard. Now scanner drivers can be distributed in individual sandboxed packages, OS-distribution-independent,​ and for multi-function devices one can even distribute a combined Printer/​Scanner Application. The sandboxed packages of user applications which scan only need a backend for IPP Scan and this discovers all Scanner Applications (and scanners in native network devices).
Line 91: Line 91:
 ======Project Ideas====== ======Project Ideas======
  
-**Still needs to get updated!!**+=====GUI for discovering non-driverless printers and finding suitable Printer Applications for them=====
  
-=====GUI for listing and managing available IPP Print/Scan services (or DNS-SD-advertised network services in general)===== +contributor full-size (350 hours).
- +
-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 (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 (imagine 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. 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.+Printers which do not do driverless IPP are either legacy printers, ​the many 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.+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/the OpenPrinting web site to find Printer Applications which are not installed on the local system. There is already a concept to implement an appropriate [[https://​openprinting.github.io/​OpenPrinting-News-November-2021/#​printer-querying-on-the-openprinting-web-server|search index on OpenPrinting]] which will be used by this GUI.
  
-The student's task is to implement such a tool in GTK, ideally as a module for the GNOME Control Center.+The contributor'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 Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), GNOME/GTK developers, TBD
Line 130: Line 109:
 Code License: GPL-2+ and LGPL-2+ Code License: GPL-2+ and LGPL-2+
  
 +=====Scanning support in PAPPL=====
  
-=====Converting classic CUPS printer drivers into Printer Applications ​(multiple students)=====+1 contributor full-size ​(350 hours).
  
-To replace classic Linux distributions based on RPM or DEB packages by completely sandboxed/all-Snap distributions it is also needed to assure that hardware which worked before will still work in the new distribution.+In the Google Summer of Code 2021, Bhavna Kosta has started the work on [[https://​github.com/​Bhavna2020/​GSoC-2021|Scanning support ​in PAPPL]] so that [[https://​github.com/​michaelrsweet/​pappl/​|PAPPL]] not only can be used for creating Printer Applications (emulation of a driverless IPP printer) but also for creating Scanner Applications (emulation of a driverless IPP/eSCL scanner), or even an emulation of a driverless IPP multi-function device.
  
-For this we want to retro-fit all printer drivers into Printer Applications and make these available as Snaps in the Snap storeThis way for all printers which worked under Linux before, there is a driver in the Snap Store, so all distributions which support Snap packages (have snapd installed) will support all these legacy printers without needing to take the responsibility by themselves.+She has created ​the [[https://​github.com/​michaelrsweet/​pappl/​tree/​scanning|needed data structures and API functions]] needed to extend PAPPL for supporting scanners.
  
-Together with the CUPS Snap we can have all-Snap distribution with the same printing coverage as conventional distributions.+Next steps to complete ​the support are the following:
  
-The retro-fit should not be very complex, as we have the Printer Application library ​PAPPL and a printer driver retro-fit library (will be available before coding starts) containing most of the code of the PostScript Printer Application at handThe intention ​is to retro-fit all common ​printer ​driver ​projects using these tools and avoiding to modify the original driver'​s code, as we do not have the printer ​hardware for testing ​and in most cases the original driver code is not maintained any more.+  * IPP Scan interface: Extend ​the IPP server of PAPPL to understand IPP Scan requests ​and respond to them appropriately,​ so that the application emulates an IPP Scan device 
 +  * eSCL Scan interface: Add an eSCL interface to make the application emulate an eSCL scannereSCL is the most common ​communication protocol for driverless scanning, also used by AirPrint ([[https://​github.com/​SimulPiscator/​AirSane|Code example]]) 
 +  * Create a test scanner ​driver ​emulating a scanner withour needing actual scanner ​hardware 
 +  * Unit tests for both IPP Scan and eSCL interfaces
  
-Driver projects are (derived from "apt search printer-driver-" on Ubuntu Hirsute):+The contributor'​s task to implement the above-mentioned components to complete the framework needed by all Scanner Application. With this done, only code for the particular group of scanners to support ​(scanner ​driver) ​needs to be added to PAPPL.
  
-  * Foomatic/​Ghostscript built-in +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
-  * "​brlaser":​ (Some) Brother laser printers +
-  * "​c2050":​ Lexmark 2050 Color Jetprinter +
-  * "​c2esp":​ Kodak ESP AiO color inkjet Series +
-  * "​cjet":​ Canon LBP laser printers +
-  * "​dymo":​ DYMO label printers +
-  * "​escpr":​ Epson Inkjet that use ESC/P-R +
-  * "​foo2zjs":​ ZjStream-based printers +
-  * "​fujixerox":​ Fuji Xerox printers +
-  * HPLIP: HP printers and multi-function devices +
-  * "​m2300w":​ Minolta magicolor 2300W/2400W color laser printers +
-  * "​min12xxw":​ KonicaMinolta PagePro 1[234]xxW +
-  * "​oki":​ OKI Data printers +
-  * "​pnm2ppa":​ HP-GDI printers +
-  * "​ptouch":​ Brother P-touch label printers +
-  * "​pxljr":​ HP Color LaserJet 35xx/36xx +
-  * "​sag-gdi":​ Ricoh Aficio SP 1000s/SP 1100s +
-  * "​splix":​ Samsung and Xerox SPL2 and SPLc laser printers +
- +
-The student'​s task here is to retro-fit one or more driver projects, so that these new Printer Applications can be put into the Snap Store. +
- +
-In some cases there are also some special tasks: +
- +
-  * "​foo2zjs"​ should be able to let the user download/​add firmware files and color profiles and make the firmware files be loaded into the printer everytime when it is turned on. +
-  * Foomatic needs to support options of string or numeric style, which in the original are implemented with PPD extensions. +
-  * HPLIP retro-fit: HP should not maintain such a retro-fit as-is, they should go native, but this can be of help for them and also of help for users until HP switches over. Especially it should NOT be put into the Snap Store under the HPLIP name +
-  * Closed-source drivers (not in the example list) could need to run the filters in a chroot as they can have hard-coded directory paths +
- +
- +
-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
Line 178: Line 132:
 Code License: Apache 2.0 Code License: Apache 2.0
  
 +=====Print Dialogs: Make them use the Common Print Dialog Backends (CPDB)=====
  
-=====Firmware and other file handling in PAPPL=====+1 contributors full-size (350 hours).
  
-For some printers there are firmware files, either as an upgrade or if the printer is cheaper model which does not have non-volatile memory to hold the printer'​s firmwarerequiring the firmware be loaded from the computer each time the printer is turned on. Other printers could be enhanced ​with fonts or custom color profiles.+Most print jobs are sent via the print dialog of desktop applicationlike evince, Chrome, LibreOffice,​ DarkTable, … Print dialogs are usually, like “Open …” or “Save as …” dialogs, provided by the GUI toolkits, in most cases GTK or Qt, sometimes applications come also with their own creations, like LibreOffice ​or Chrome.
  
-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 somehowas loading them into the printer as update or enhancementloading them into the printer everytime when the printer ​is turned on, use them in the job filtering process, ...+Problem here is usually not the design of the dialog itselfmost are actually easy to usebut the way how they connect to CUPS (and also to other print technologies) and how well this connection code is maintained and kept up-to-date.
  
-An example already existsin 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.+GUI toolkit projects are large projectsoften with long release cycles and all with a certain inertia, and there are things which many people are eager to work onand others, like print dialogs, which have to be there but no one is really motivated to push their development forward and do the needed maintenance work.
  
-The student'​s task here is to generalize this featureadd common functionslike multiplearbitrary file uploadmanaging ​and removing already uploaded filescallback function support for applying ​the files, for example that the developer ​of a Printer Application can implement the code for the proprietary firmware upload method ​in a callback, ...+An important part of the maintenance of a GUI toolkit ​is that it interfaces well and correctly with the underlying operating systemgraphicssoundstorage, …, and printing! The OS is under continuous developmentthings are changing all the timecomponents get replaced by others, printing is CUPS for 22 years, but within CUPS we have also changes, and they need to be taken care of in the print dialogs.
  
-As an example application ​the student could retro-fit ​the "​foo2zjs"​ printer driver into Printer Application, as this driver ​supports ​appropriate printers ​and handles ​the types of files mentioned here.+Several years back, CUPS started to create temporary queues for driverless IPP network printers (or remote CUPS printers, which are emulations of IPP printers), which are only physically available when they are accessed (capabilities are polled or job printed). Print dialogs used an old API which did not support this, the temporary queues did not appear in the dialog, ​helper daemoncups-browsed had to convert the temporary queues into physical queues ​as a workaround. The correct solution had been to change the print dialogs to a newer CUPS API which supports ​these queues, but no one at the GUI toolkit projects has felt responsible ​and taken the time for this update for many years. Only recently this got fixed.
  
-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+This made me introducing the Common Print Dialog Backends ​(CPDBback in 2017a de-coupling ​of the print technology (CUPS, print-to-file,​ that time also Google Cloud Printfrom the GUI. The GUI projects have to adopt the CPDB support only once and then OpenPrinting ​(or any upcoming cloud printing projectstakes care of the CPDB backend for the print technologies to be up-to-date with any changes. This way print technology projects can react quickly and are not dependent any more on the GUI toolkit’s inertia.
  
-Desired knowledge: %%C/C++%%, CUPS+As far as I know the GTKQt, and LibreOffice print dialogs support temporary print queues now (but only recently, there are many old dialog versions around), but now we are at the next challenge as we have to assure that the print dialogs use CUPS APIs which do not handle PPDs on the dialog side, so that if the system switched to PPD-less CUPS 3.x that the dialog continues to work. If we get the dialogs using CPDB, these changes happen (if actually needed) only in the CUPS CPDB backend, not in each print dialog individually.
  
-Code License: Apache 2.0+The contributor'​s task is to get CPDB into the print dialogs upstream, the UI of them does not need to be changed. Dialogs to be treated are GTK, Qt, (LibreOffice has already CPDB support AFAIR), Chrome, and perhaps others. Also important are backports, as there are many apps based on old toolkit versions around in the distributions (Firefox? Thunderbird?​).
  
 +For the CPDB integration we do not need UI design work.
  
-=====Converting SANE scanner drivers to Scanner Applications=====+Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), GNOME/GTK developers, Qt developers, TBD
  
-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.+Desired knowledge%%C/C++%%, GTK or Qt, DNS-SD/Avahi, CUPS/IPP
  
-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 high, as mentioned above here for the retro-fitting of printer drivers.+Code License: GPL-2+ and LGPL-2+Apache 2.0
  
-Therefore we want to create ​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 fromtend, but 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.+=====Make ​native Printer ​Application ​from Gutenprint=====
  
-The student'​s task is to create this SANE retro-fit framework, especially making one Scanner Application from the sane-backends projects, but also allow to retro-fit any other SANE backend from a separate project ​(like HPLIPinto a Scanner Application.+1 contributor full-size (350 hours).
  
-MentorsTill 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+[[http://​gimp-print.sourceforge.net/​|Gutenprint]] is a high-quality printer driver for a wide range of inkjetsespecially Epson and Canondye-sublimation printers ​and even monochrome PCL laser printers. It does not only cover many printers to give them support under Linux and free software operating systems ​at allbut also is optimized for highest possible print qualityso that at least on some printers and with the right settings you can even get better print quality than with the original ​(Windows/Macdrivers.
  
-Desired knowledge: %%C/C++%%, CUPS+Gutenprint is usually used as classic CUPS driver with a CUPS filter and a PPD file generator. Asas mentioned above, CUPS will not support PPD files any more from version 3.x on and when using the CUPS Snap one cannot install PPD-based drivers already now.
  
-Code LicenseApache 2.0+So a Printer Application of Gutenprint is needed. There [[https://​github.com/​OpenPrinting/​gutenprint-printer-app/​|is already one]], but it is a retro-fit of the classic CUPS driver. The Printer Application simply calls the PPD generator and the filter at the right places to do its job.
  
 +As Gutenprint contains all its printer support and printer capability info in libgutenprint or in files which are read by libgutenprint,​ the PPD generator and the filter only containing calls of functions in libgutenprint,​ it should be easy to create a [[https://​github.com/​michaelrsweet/​pappl/​|PAPPL-based]],​ native Printer Application for Gutenprint.
  
-=====cups-filters: Move rastertopwg from CUPS into a filter ​function=====+Here on an incoming get-printer-attributes IPP request we call the same functions which the PPD generator calls, but instead of translating the responses ​into a PPD file we translate it into the IPP answer for the get-printer-attributes request. And when we have a job to print, we call the library functions which the filter ​calls, but directly.
  
-To print on driverless IPP printers following ​the AirPrint ​and/or IPP Everywhere standard CUPS got the rastertopwg filter ​which converts CUPS Raster into PWG Raster ​and Apple Raster.+This does not only save us from resource-consuming calls of external executables but we are also no harnessed by the PPD file syntax ​and so have more flexibility in the UI representations of the (often more than 100) printer-specific options. Also, generally we should completely do away with the PPDs. Retro-fitting is only an ugly interim solution or for drivers ​which are not actively maintained anymore ​and for printers we do not have at hand and so cannot test the drivers.
  
-With the move from filters as individual executables to filters as library functions we also want to convert this filter into a filter function in libcupsfilters,​ allowing the use in Printer Applications and especially also for replacing the CUPS filter chain by a single, universal filter.+The contributor'​s task is thus:
  
-The student'​s task is to take the code of the rastertopwg filter in CUPS into libcupsfilters,​ and convert it into a filter function, a function with standardized interfaces for input, output, logging, printer capabilities,​ job attributes, ...+  * Create a PAPPL-based Printer Application using the libgutenprint library and PAPPL 
 +  * Make sure all options and parameters ​of the Gutenprint driver are accessible from the Printer Application'​s web admin interface. 
 +  * Package the Printer Application as a Snap
  
-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), Gutenprint developers ​TBD
  
-Desired knowledge: %%C/C++%%, CUPS+Desired knowledge: %%C%%, PAPPL, CUPS
  
 Code License: Apache 2.0 Code License: Apache 2.0
  
 +=====Converting Braille embosser support into a Printer Application=====
  
-=====cups-filters: Create a single, universal CUPS filter to replace the chain of individual filters=====+1 contributor full-size (350 hours).
  
-To convert ​the job data format from the input data type to what the printer needs CUPS calls sequence of different individual filtersusually one filter to convert the incoming format ​into PDF (if needed)then the pdftopdf filter ​to flatten filled PDF forms and to apply page management options (N-up, selected pages, scaling, ...), and after that one or more filters to get the data into the printer'​s native PDL.+cups-filters currently supports Braille embossers through a series of PPD files and shell scripts that convert ​documents into textual layout, convert the text into Braille dotsand convert ​the Braille dots to braille embosser-specific formats.
  
-This makes CUPS call a lot of external executableswhich is resource-consuming. Therefore in this project we want to create a universal CUPS filter which causes filter functions in the libcupsfilters library in an appropriate order to replace ​the work of the currentindividual CUPS filters.+For long-term support and wide availability, this needs to be converted ​to the newer CUPS infrastructurePrinter Applications.
  
-It should check what the inout format and what the needed output format ​is and by this select the input filter to get PDF and the output filters to turn PDF into the desired output format, and then it should call the sequence of filter functions.+The contributor'​s task is thus:
  
-In addition, small improvements on the filter ​function mechanism could be made, too.+  * Converting these shell scripts into filter ​functions in libcupsfilters 
 +  * Creating a Printer Application that exposes Braille embossers configuration to users
  
-Mentors: Till KamppeterProject Leader OpenPrinting (till at linux dot com), Sahil Arora (sahilarora dot 535 at gmail dot com), Dheeraj Yadav (dhirajyadav135 at gmail dot com), TBD+The contributor does not need to own any specific hardwarea comparison can be made between the output of the existing shell-script-based implementation and the output of the converted implementation.
  
-Desired knowledge%%C/C++%%CUPS+MentorsTill KamppeterProject Leader OpenPrinting (till at linux dot com), Samuel Thibault, Braille expert (samuel dot thibault at ens-lyon dot org)
  
-Code License: Apache 2.0 +Desired knowledge: %%C/C++%%, Shell, CUPS
- +
- +
-=====cups-filters:​ Convert filters to filter functions (multiple students)===== +
- +
-cups-filters has always provided the filters which CUPS needs to convert job data from the input format (PDF in most cases) into the printer'​s native language. For use in Printer Applications the filters got converted from standalone executables to library functions, reducing the number of calls of separate executables and so saving resources. Also for Scanner Applications filters are needd, so that the user can choose the file format he wants. +
- +
-Most filtes are already converted, but some are still missing. These are especially:​ +
- +
-  * pdftoraster,​ mupdftoraster:​ Turn PDF into CUPS/PWG Raster with alternative tools/​libraries +
-  * texttopdf: Input filter for plain text files +
-  * bannertopdf:​ Filter to generate banner pages and a printer test page +
- +
-This task can be devided up for more than one student. +
- +
-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+
  
 Code License: Apache 2.0 Code License: Apache 2.0
  
  
-=====cups-filters: ​Make sure all filter functions ​work without PPD files=====+=====cups-filters: ​In filter functions ​call Ghostscript via libgs and not as external executable=====
  
-As already described in the introduction we want to get rid of PPD files in the printing process and control jobs by IPP attributes. +1 contributor half-size ​(175 hrs)
- +
-For this all filter functions also need to work correctly if there is no PPD file assigned to the print queue. They should as well understand standard IPP attributes as their options and printer IPP attributes for default settings. +
- +
-The filter function concept already provides the needed interfaces, but the code of each filter function needs to be checked to see whether the filter actually correctly works without a PPD file. +
- +
-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 +
- +
-Code License: Apache 2.0 +
- +
- +
-=====cups-filters:​ In filter functions call Ghostscript via libgs and not as external executable=====+
  
 cups-filters has always provided the filters which CUPS needs to convert job data from the input format (PDF in most cases) into the printer'​s native language. For use in Printer Applications the filters got converted from standalone executables to library functions, reducing the number of calls of separate executables and so saving resources. cups-filters has always provided the filters which CUPS needs to convert job data from the input format (PDF in most cases) into the printer'​s native language. For use in Printer Applications the filters got converted from standalone executables to library functions, reducing the number of calls of separate executables and so saving resources.
Line 287: Line 218:
 The filter functions themselves also often call external executables,​ and this we can also try to avoid. For example the ghostscript() filter function calls Ghostscript and Ghostscript also has a library, libgs, which allows Ghostscript to be called as library function. The filter functions themselves also often call external executables,​ and this we can also try to avoid. For example the ghostscript() filter function calls Ghostscript and Ghostscript also has a library, libgs, which allows Ghostscript to be called as library function.
  
-The student's task here is to convert the ghostscript() filter function to call Ghostscript via libgs. Here it is also important to make everything working in a multi-threading environment as Printer Applications can process jobs in parallel. Ghostscript has a special GS_THREADSAFE build mode for that.+The contributor's task here is to convert the ghostscript() filter function to call Ghostscript via libgs. Here it is also important to make everything working in a multi-threading environment as Printer Applications can process jobs in parallel. Ghostscript has a special GS_THREADSAFE build mode for that.
  
 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
Line 297: Line 228:
  
 =====cups-filters:​ Add Avahi calls for discovering and resolving driverless IPP printers to API and optimize the processes===== =====cups-filters:​ Add Avahi calls for discovering and resolving driverless IPP printers to API and optimize the processes=====
 +
 +1 contributor half-size (175 hrs)
  
 The cups-browsed daemon and the "​driverless"​ utility discover DNS-SD-advertised IPP printers in the network, for the former to automatically create queues and the latter to list the printers for printer setup tools and auto-generate PPD files for them. The cups-browsed daemon and the "​driverless"​ utility discover DNS-SD-advertised IPP printers in the network, for the former to automatically create queues and the latter to list the printers for printer setup tools and auto-generate PPD files for them.
Line 306: Line 239:
 The "​driverless"​ utility calls "​ippfind"​ to do the DNS-SD discovery and resolving, here further optimization would be possible if the utility directly deals with Avahi and then saves unneeded resolving steps. The "​driverless"​ utility calls "​ippfind"​ to do the DNS-SD discovery and resolving, here further optimization would be possible if the utility directly deals with Avahi and then saves unneeded resolving steps.
  
-The student's task is here to add a convenience API for Avahi discovery and resolving calls to libcupsfilters. For example create library functions avahiResolveService(),​ avahiBrowseResolve(),​ avahiBrowseOnly() in new files cupsfilters/​avahi.[ch],​ using code of cups/​http-support.c and tools/​ippfind.c from CUPS. In a next step these functions should be used in cups-browsed and in the "​driverless"​ utility to optimize their performance.+The contributor's task is here to add a convenience API for Avahi discovery and resolving calls to libcupsfilters. For example create library functions avahiResolveService(),​ avahiBrowseResolve(),​ avahiBrowseOnly() in new files cupsfilters/​avahi.[ch],​ using code of cups/​http-support.c and tools/​ippfind.c from CUPS. In a next step these functions should be used in cups-browsed and in the "​driverless"​ utility to optimize their performance.
  
 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
Line 316: Line 249:
  
 =====cups-filters:​ Create OCR filter to deliver scans as searchable PDFs===== =====cups-filters:​ Create OCR filter to deliver scans as searchable PDFs=====
 +
 +1 contributor half-size (175 hrs)
  
 Scanning with IPP Scan gives the user the possibility to request the scanned image in PDF format. If the IPP Scan server is a Scanner Application,​ a filter function from cups-filters would convert the the raster image coming from the scanner into PDF. Scanning with IPP Scan gives the user the possibility to request the scanned image in PDF format. If the IPP Scan server is a Scanner Application,​ a filter function from cups-filters would convert the the raster image coming from the scanner into PDF.
Line 323: Line 258:
 Ghostscript has a new "​pdfocr8"​ device with which Ghostscript takes raster graphics PDFs (or PostScript files) as input, applies OCR (Optical Character Recognition) to the raster image, and creates a PDF which contains the raster image to visually show the scan but adds data about the contained text and where it is located, so that you can find text with the search facility of a PDF viewer. Ghostscript has a new "​pdfocr8"​ device with which Ghostscript takes raster graphics PDFs (or PostScript files) as input, applies OCR (Optical Character Recognition) to the raster image, and creates a PDF which contains the raster image to visually show the scan but adds data about the contained text and where it is located, so that you can find text with the search facility of a PDF viewer.
  
-Here the student's task is to write a filter function (or extend the ghostscript() filter function) to make the "​pdfocr8"​ output device of Ghostscript being used so that a searchable PDF is obtained. ​+Here the contributor's task is to write a filter function (or extend the ghostscript() filter function) to make the "​pdfocr8"​ output device of Ghostscript being used so that a searchable PDF is obtained. ​
  
 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
Line 333: Line 268:
  
 =====Turn the scp-dbus-service methods - GetBestDrivers and MissingExecutables - of system-config-printer into C===== =====Turn the scp-dbus-service methods - GetBestDrivers and MissingExecutables - of system-config-printer into C=====
 +
 +1 contributor full-size (350 hrs)
  
 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 342: Line 279:
 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. 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 +The contributor'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.
- 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) Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), system-config-printer upstream developer Zdenek Dohnal (zdohnal at redhat dot com)
gsoc/google-summer-code-2022-openprinting-projects.1643220089.txt.gz · Last modified: 2022/01/26 18:01 by till