[sane-devel] Driverless IPP Scanning with SANE - Google Summer of Code 2019

Till Kamppeter till.kamppeter at gmail.com
Tue Mar 12 16:03:00 GMT 2019


Hi,

I posted this already last year (see my mail from then below) but there 
we finally decided to give preference to other student projects.

It is about driverless scanning using the IPP (Internet Printing Protocol).

"Driverless" means that on the client side no software specific to the 
scanner model in use is required. The client can ask the scanner for all 
its capabilities and use standard commands to do the scanning work.

For printing this is already standard for several years, originally 
developed to allow printing from smartphones. We have support for this 
already completely implemented in Linux, so every printer on which you 
can print with you phone should also print jobs from Linux clients.

Now we want to implement this also for scanning, with the help of the 
Google Summer of Code.

We did not do it last year as there was no manufacturer yet who had 
adopted driverless IPP scanning. This year we also do not have any 
further notice from hardware manufacturers, but we have a new idea of 
nmaking use of driverless IPP scanning.

In SANE scanner drivers are libraries which need to be present in a 
given directory of the system so that applications find them and so the 
applications can scan on all scanners which are supported by the 
available SANE backend libraries.

This works well on systems with standard Debian or RPM packaging but not 
on systems with sandboxed packaging, like Snap for example. Here one 
cannot simply let one package (the scanner driver) drop a library in a 
directory where other packages (applications) search for it. For printer 
drivers we introduce the so-called Printer Applications, a simple 
daemon, emulating a driverless IPP printer on localhost and passing jobs 
on to the physical printer (which can be on USB or on the network and 
Printer Application converts incoming PDF to the printer's native 
language). The network-style communication on localhost is no problem 
for communication between two sandboxed applications.

For scanners we want to do the same. We put a collection of SANE 
backends with SANE frontend library into a so-called Scanner Application 
and let it emulate a driverless IPP scanner on localhost. Such a Scanner 
Application can contain the standard SANE modules or it can be a Scanner 
Application provided by a scanner manufacturer to hold their 
(proprietary) driver. Applications scan then via IPP and for legacy 
applications which use SANE we need an IPP backend for SANE.

This makes up two GSoC projects, one to write the Scanner Application 
framework for a sandboxed SANE driver collection and a second for a SANE 
backend for IPP driverless scanning.

The project ideas are in our project idea list:

Scanner Application framework:
https://wiki.linuxfoundation.org/gsoc/google-summer-code-2019-openprinting-projects#ipp_scan_or_virtual_mf_device_server_scanner_application

IPP scanning SANE backend:
https://wiki.linuxfoundation.org/gsoc/google-summer-code-2019-openprinting-projects#sane_module_for_ipp_driverless_scanning

Now I want to ask all of you whether you would like to help us by 
mentoring the students who will take these projects.

Note the following about mentorship:

1. Google only permits a student [project when it has a dedicated 
mentor. One cannot even tell them that one mentor will mentor two 
students. But what we can do if mentoring a student alone is too much 
for you, is that you are listed as an official mentor and in reality you 
do only a part of the actual mentoring and one of us the rest.

2. Google tells that for mentoring you will need around5 hours/week if 
you do the mentoring of one student alone at least.

3. We pre-select our students with several assignments, so you will 
usually get a good student.

I am very grateful if someone could step up.

    Till


----------

Hi,

the Printing Working Group (http://www.pwg.org/) has developed several 
standards for printers and multi-function devices (print, scan, copy, 
fax) to allow its use without hardware-model-specific software or data 
(aka driver).

There are already all standards needed for driverless printing and they 
are actually implemented in printers on the market. The PWG's own 
driverless printing standard is IPP Everywhere, but AirPrint, Wi-Fi 
Direct, and Mopria us also a lot of the PWG's standards. All of these 
standards use the PWG's Internet Printing Protocol (IPP) and DNS-SD but 
different standardized formats for the print jobs. Wi-Fi Direct adds a 
printer-internal Wi-Fi server for wireless printing without Wi-Fi 
router. Via IPP-over-USB also devices connected to USB are supported 
(Linux support via ippusbxd, https://github.com/OpenPrinting/ippusbxd).

These driverless printing standards are fully supported in Linux, from 
Ubuntu 17.10 on and continuously improved.

The PWG has recently also developed an IPP scanning standard, which 
provides a standard protocol for communicating with scanners in IPP 
multi-function devices (via network or IPP-over-USB):

http://ftp.pwg.org/pub/pwg/candidates/cs-ippscan10-20140918-5100.17.pdf

The best way to access this class of scanners from Linux would be to 
create a SANE backend for IPP Scan.

Therefore I have opened a project for the Google Summer of Code 2018:

https://wiki.linuxfoundation.org/gsoc/google-summer-code-2018-openprinting-projects#sane-module-for-ipp-driverless-scanning

----------

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+

----------

I want to ask whether someone of you would (together with me) mentor a 
student to do this project.

The SANE project does not need to be mentoring organization at the GSoC 
for that. Mentoring organization will be the Linux Foundation.

Thank you very much in advance

    Till




More information about the sane-devel mailing list