[sane-devel] Is there any plan to support Web Devices Services (WDS) protocol?

Patrick Roncagliolo ronca.pat at gmail.com
Sat Feb 24 17:21:53 UTC 2018

Hi Steven,
Thank you for your interest in the project. I'll give here a status update
of the project:

On my github repo, now there is nearly-full python support for WSD
scanners. ADF works! And device-initiated scans work too, of course :)

All commands and events described by the ws-scan paper are implemented, and
now I just have to develop a simple runtime for event listening and devices

Now I need to target a more robust API and implementation, develop some CLI
tools and get more people to test this Python library.

Once done, I'll start with sane backend implementation.

Next, ws-print python lib and the cups backend imementation is coming. And
finally, server side libs implementation could be developed, in order to
enable open source applications and devices as WSD virtual or phisical
endpoints too.

Python for drafts, C for backends. Generic libraries in both languages (and
C++ bindings) should be coming for both printing and scanning.

This amount of work is pretty ambitious for me, because I'm a student with
lots of things to do already. If anyone wants to join and help me, well...
welcome :)

If you have some feedback specific on my wsd-python implementation, open a
issue on github and/or contact me. Sorry for the initial lack of

Patrick Roncagliolo

Il sab 24 feb 2018, 18:09 Steven Santos <steven at simplycircus.com> ha

> This is a great project.  If it is successful, you will open up a ton of
> scanners for use with SANE
> More importantly, it gives a path for supporting just about ANY
> windows-only scanner in SANE, as seems windows 10 can export any local
> scanner via WSD
> I am assuming you found this documentation?
> https://docs.microsoft.com/en-us/windows-hardware/design/whitepapers/implementing-web-services-on-devices-for-printing
> On Tue, Feb 6, 2018 at 11:10 AM, Patrick Roncagliolo <ronca.pat at gmail.com>
> wrote:
>> Hi all,
>> I found http://ws4d.org/dpws-explorer/ . It has a linux version, it can
>> help a bit with device detection and browse properties while developing a
>> proper scan software.
>> Here <https://sourceforge.net/projects/ws4d-javame/> is a java
>> implementation of the DPWS standard, and here
>> <http://trac.e-technik.uni-rostock.de/projects/ws4d-gsoap> a C/C++ one.
>> However, I found another batch of documentation of the standard, so
>> developing a simple working implementation targeted mainly to scan
>> capabilities isn't going to be difficult.
>> The C/C++ library posted above might be not suitable for sane backend
>> implementation, I don't think sane devs would allow adding such a large
>> gen-purpose dependency to codebase, and a lightweight implementation is
>> better IMHO.
>> Il giorno mar 6 feb 2018 alle ore 00:05 Patrick Roncagliolo <
>> ronca.pat at gmail.com> ha scritto:
>>> Hi,
>>> you can find a basic implementation of a WSD discovery scanner here:
>>> https://github.com/roncapat/WSD-python
>>> Here is a sample output (it detects a response from my MB2350):
>>> EndPoint Reference Address:
>>> urn:uuid:00000000-0000-1000-8000-f4813944662e
>>> Implemented Types:
>>> wsdp:Device
>>> wprt:PrintDeviceType
>>> wscn:ScanDeviceType
>>> Transport addresses:
>>> Basically, it retrieves an unique identifier, the capabilities of the
>>> devices (MB2350 is both printer and scanner), and an HTTP address for later
>>> use.
>>> More coming. Understanding the protocol with an easy language as Python
>>> with no API constraints helps to bootstrap a working implementation, but
>>> ideally the next step would be a true backend implementation.
>>> Patrick Roncagliolo
>>> Il giorno lun 5 feb 2018 alle ore 16:25 Patrick Roncagliolo <
>>> ronca.pat at gmail.com> ha scritto:
>>>> Hi Till,
>>>> WSD came in with Windows Vista IIRC.
>>>> It is HTTP/XML based, so yeah, it works only on network, in fact my
>>>> canon maxify uses an entirely different protocol on USB (similar, if not
>>>> equal, to the BJNP network protocol used by Canon for basic Linux LAN
>>>> support).
>>>> It defines a discovery protocol, a scan service, a print service, but
>>>> probably there are more, unrelated with the printer/multifunction/scanner
>>>> world (I started today to dig the docs).
>>>> By the way, I managed to fix the script found in the github repo I
>>>> linked, and maybe the first step for me to get comfortable with the
>>>> protocol will be to play a bit more from python, extending as much as I can
>>>> the short script as a more complete CLI tool with discovery support and all
>>>> the possible options. Then, I could manage to reimplement the protocol as a
>>>> sane backend, which I think is a bit more hard (I need to study sane api
>>>> first).
>>>> Beware I'm a student with not-so-much spare time, but I'm interested in
>>>> learning something new and get my canon working at best, and obviously
>>>> contribute as much as I can. I'd like to add or expand wireshark dissectors
>>>> for WSD and BJNP too. We'll see how much I can do.
>>>> NB. if in the coming days I start a github repo for a WSD python
>>>> playground, I'll share here the link.
>>>> Here are a few links:
>>>> -WS-Discovery (full spec)
>>>> http://specs.xmlsoap.org/ws/2005/04/discovery/ws-discovery.pdf
>>>> -WS-Print (at the bottom of the page there are links to all print &
>>>> scan XML schemas and tech specifications)
>>>> https://docs.microsoft.com/en-us/windows-hardware/drivers/print/ws-print-v1-1
>>>> -WS-Print 2.0 (only printing? 3d printers? have no time to check)
>>>> http://go.microsoft.com/fwlink/p/?LinkId=534008
>>>> Il giorno lun 5 feb 2018 alle ore 15:54 Till Kamppeter <
>>>> till.kamppeter at gmail.com> ha scritto:
>>>>> On 02/05/2018 01:32 PM, Patrick Roncagliolo wrote:
>>>>> > WDS is a protocol based on http connection with devices such as
>>>>> > scanners, printers and so on. Most of the work is based on a bunch of
>>>>> > XML schemas, that are publicly available on MSDN. Searched a lot, but
>>>>> > for Linux I only found this (https://github.com/al42and/WSDolefuls),
>>>>> > that fails to parse the scanner response, but succeeds to start the
>>>>> scan
>>>>> > job.
>>>>> > I tried to search around SANE for WDS support, but I understood there
>>>>> > isn't.
>>>>> >
>>>>> > Is there a technical motivation behind the lack of support for WDS?
>>>>> or
>>>>> > it's just not the top priority? Could it be possible to create a
>>>>> backend
>>>>> > for this protocol? A lot of Canon printers would work like a charm
>>>>> with
>>>>> > a single good implementation, and I think it would be the same with a
>>>>> > lot of modern hardware. I could try to start a simple implementation
>>>>> if
>>>>> > someone instructs me with the basics of the SANE internal API for
>>>>> > backends and working principles, I'm a student with (not much) free
>>>>> time
>>>>> > and it could be great to help a bit (and learn something) if
>>>>> possible.
>>>>> >
>>>>> This looks like a second driverless (meaning no device/model-specific
>>>>> software or data (aka driver) required) scanning method after PWG's
>>>>> (Printer Working Group, http://www.pwg.org/) IPP Scanning which I
>>>>> mentioned in another post on this list.
>>>>> It seems that WDS exists already for longer time and is already
>>>>> established, so that there are actually several scanners using it. Am I
>>>>> right? Which manufacturers are participating? Does it only work on
>>>>> network devices? Or only on USB? Does it only work on printer/scanner
>>>>> MF
>>>>> devices or also on stand-alone scanners?
>>>>> Patrick, it would be great if you could make a SANE module for that.
>>>>> Another step to making a scanner as easy to connect under Linux as a
>>>>> USB
>>>>> stick. Also great for MF devices which happily print with PWG's
>>>>> driverless IPP printing but do not support IPP scanning.
>>>>>     Till
>>>>> --
>>>>> sane-devel mailing list: sane-devel at lists.alioth.debian.org
>>>>> http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/sane-devel
>>>>> Unsubscribe: Send mail with subject "unsubscribe your_password"
>>>>>              to sane-devel-request at lists.alioth.debian.org
>> --
>> sane-devel mailing list: sane-devel at lists.alioth.debian.org
>> http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/sane-devel
>> Unsubscribe: Send mail with subject "unsubscribe your_password"
>>              to sane-devel-request at lists.alioth.debian.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/sane-devel/attachments/20180224/51a3523f/attachment.html>

More information about the sane-devel mailing list