[sane-devel] [janitorial] New backend: escl (seems to also work via USB)

Till Kamppeter till.kamppeter at gmail.com
Sun Dec 15 19:39:49 GMT 2019


It seems that one can also use the eSCL backend via USB, with the help of the 
IPP-over-USB daemon ippusbxd (the backend is probably not exactly IPP, ippusbxd 
is more to understand as an HTTP-over-USB daemon).

Get ippusbxd from

https://github.com/OpenPrinting/ippusbxd

or install the "ippusbxd" package of your distribution.

Connect your device via USB. Depending on how your distribution is configured it 
can happen that a CUPS queue for the printing part of the device gets created, 
so you will not sacrifice printing to get your scanner to work.

Check with "ps -aux | grep ippusbxd" whether ippusbxd is actually running (an 
auto-created print queue can also be an HPLIP one if the device is from HP).

If ippusbxd is not running, simply fire it up manually, if your device is the 
only IPP-over-USB-capable printer connected to your machine you do not even need 
command line arguments:

ippusbxd

The daemon outputs its port and its PID. The port is usually 60000. Now use 
curl, wget, or a browser and access

http://localhost:60000/eSCL/ScannerCapabilities

Correct the port if yours is not 60000.

You get back the capabilities XML list of the eSCL scanning part of your device. 
So it seems that eSCL scanning is possible through ippusbxd.

Note that ippusbxd does not advertise this capability through DNS-SD. The DNS-SD 
record of ippusbxd is completely artifical and is mainly based on the USB 
(printer) device ID. I need to extend the record, but I need a reliable way to 
find out via USB whether the device is only a printer or has also a scanner 
built-in.

With a deeper look into the source code of HPLIP one can perhaps also find a way 
to use eSCL via USB without ippusbxd but I do not recommend it. With ippusbxd 
one gets both printing and scanning to work in a driverless (driver = 
device-model-specific software and/or data) manner, using the capability of the 
hardware to advertise itself and to provide a full list of capabilities and 
having universal software to do the job (cups-filters for printing and the eSCL 
SANE backend for scanning).

See the output of

wget http://localhost:60000/eSCL/ScannerCapabilities

on my device below.

    Till

----------

<?xml version="1.0" encoding="UTF-8"?>
<!---->
<scan:ScannerCapabilities 
xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03" 
xmlns:pwg="http://www.pwg.org/schemas/2010/12/sm" 
xmlns:dest="http://schemas.hp.com/imaging/destination/2011/06/06" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://schemas.hp.com/imaging/escl/2011/05/03 
../../schemas/eSCL-1_92.xsd">
	<pwg:Version>2.0</pwg:Version>
	<pwg:MakeAndModel>xxxx</pwg:MakeAndModel>
	<pwg:SerialNumber>25</pwg:SerialNumber>
	<scan:Platen>
		<scan:PlatenInputCaps>
			<scan:MinWidth>8</scan:MinWidth>
			<scan:MaxWidth>2550</scan:MaxWidth>
			<scan:MinHeight>8</scan:MinHeight>
			<scan:MaxHeight>3508</scan:MaxHeight>
			<scan:MaxScanRegions>1</scan:MaxScanRegions>
			<scan:SettingProfiles>
				<scan:SettingProfile>
					<scan:ColorModes>
						<scan:ColorMode>Grayscale8</scan:ColorMode>
						<scan:ColorMode>RGB24</scan:ColorMode>
					</scan:ColorModes>
					<scan:ContentTypes>
						<pwg:ContentType>Photo</pwg:ContentType>
						<pwg:ContentType>Text</pwg:ContentType>
						<pwg:ContentType>TextAndPhoto</pwg:ContentType>
					</scan:ContentTypes>
					<scan:DocumentFormats>
						<pwg:DocumentFormat>application/octet-stream</pwg:DocumentFormat>
						<pwg:DocumentFormat>image/jpeg</pwg:DocumentFormat>
						<pwg:DocumentFormat>application/pdf</pwg:DocumentFormat>
					</scan:DocumentFormats>
					<scan:SupportedResolutions>
						<scan:DiscreteResolutions>
							<scan:DiscreteResolution>
								<scan:XResolution>75</scan:XResolution>
								<scan:YResolution>75</scan:YResolution>
							</scan:DiscreteResolution>
							<scan:DiscreteResolution>
								<scan:XResolution>100</scan:XResolution>
								<scan:YResolution>100</scan:YResolution>
							</scan:DiscreteResolution>
							<scan:DiscreteResolution>
								<scan:XResolution>200</scan:XResolution>
								<scan:YResolution>200</scan:YResolution>
							</scan:DiscreteResolution>
							<scan:DiscreteResolution>
								<scan:XResolution>300</scan:XResolution>
								<scan:YResolution>300</scan:YResolution>
							</scan:DiscreteResolution>
							<scan:DiscreteResolution>
								<scan:XResolution>600</scan:XResolution>
								<scan:YResolution>600</scan:YResolution>
							</scan:DiscreteResolution>
							<scan:DiscreteResolution>
								<scan:XResolution>1200</scan:XResolution>
								<scan:YResolution>1200</scan:YResolution>
							</scan:DiscreteResolution>
							<scan:DiscreteResolution>
								<scan:XResolution>2400</scan:XResolution>
								<scan:YResolution>2400</scan:YResolution>
							</scan:DiscreteResolution>
						</scan:DiscreteResolutions>
					</scan:SupportedResolutions>
					<scan:ColorSpaces>
						<scan:ColorSpace>YCC</scan:ColorSpace>
						<scan:ColorSpace>RGB</scan:ColorSpace>
						<scan:ColorSpace>sRGB</scan:ColorSpace>
					</scan:ColorSpaces>
				</scan:SettingProfile>
			</scan:SettingProfiles>
			<scan:SupportedIntents>
				<scan:Intent>Document</scan:Intent>
				<scan:Intent>Photo</scan:Intent>
				<scan:Intent>Preview</scan:Intent>
				<scan:Intent>TextAndGraphic</scan:Intent>
			</scan:SupportedIntents>
			<scan:MaxOpticalXResolution>2400</scan:MaxOpticalXResolution>
			<scan:MaxOpticalYResolution>2400</scan:MaxOpticalYResolution>
			<scan:RiskyLeftMargin>34</scan:RiskyLeftMargin>
			<scan:RiskyRightMargin>33</scan:RiskyRightMargin>
			<scan:RiskyTopMargin>34</scan:RiskyTopMargin>
			<scan:RiskyBottomMargin>46</scan:RiskyBottomMargin>
		</scan:PlatenInputCaps>
	</scan:Platen>
	<scan:BrightnessSupport>
		<scan:Min>0</scan:Min>
		<scan:Max>2000</scan:Max>
		<scan:Step>1</scan:Step>
	</scan:BrightnessSupport>
	<scan:ContrastSupport>
		<scan:Min>0</scan:Min>
		<scan:Max>2000</scan:Max>
		<scan:Step>1</scan:Step>
	</scan:ContrastSupport>
	<scan:HighlightSupport>
		<scan:Min>0</scan:Min>
		<scan:Max>255</scan:Max>
		<scan:Normal>179</scan:Normal>
		<scan:Step>1</scan:Step>
	</scan:HighlightSupport>
	<scan:ShadowSupport>
		<scan:Min>0</scan:Min>
		<scan:Max>255</scan:Max>
		<scan:Normal>25</scan:Normal>
		<scan:Step>1</scan:Step>
	</scan:ShadowSupport>
	<scan:SharpenSupport>
		<scan:Min>0</scan:Min>
		<scan:Max>255</scan:Max>
		<scan:Step>1</scan:Step>
	</scan:SharpenSupport>
	<scan:ThresholdSupport>
		<scan:Min>0</scan:Min>
		<scan:Max>255</scan:Max>
		<scan:Normal>128</scan:Normal>
		<scan:Step>1</scan:Step>
	</scan:ThresholdSupport>
</scan:ScannerCapabilities>





On 15/12/2019 15:54, Till Kamppeter wrote:
>> I didn't see any device managing Tiff, send me the capability file, I could 
>> add the support.
>> curl http://<ip>:<port>/eSCL/ScannerCapabilities
>> or
>> curl -k https://<ip>:<port>/eSCL/ScannerCapabilities
>>
> 
> Below is the output of my HP DeskJet 2540, it seems to only support JPEG and 
> PDF, so the backend should also support PDF (and if SANE does not support PDF, 
> SANE needs either to get appropriately extended (preferred solution) or the 
> backend should convert PDF to TIFF, which would not need a PDF interpreter as 
> this PDF consists only of bitmaps).
> 
> Note that these outputs should not be collected and added to the backend as a 
> database, but rather the backend should poll this from the scanner whenever it 
> is called.
> 
> By the way, the output has PWG in it, so it seems that this eSCL scanning 
> standard was developed by or in cooperation with the Printer Working Group.
> 
>     Till
> 
> ----------
> <!--  -->
> <scan:ScannerCapabilities 
> xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03" 
[...]



More information about the sane-devel mailing list