[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