Comment 19 for bug 1883898

Revision history for this message
zdohnal (zdohnal) wrote :

Hi Shivani,

thank you for looking into the issue!

> Could you please provide the printer model name you are using?

HP LaserJet M1536dnf MFP

> HPLIP does not need to install plugin in order to print. It only requires plugin in order to > scan.

Unfortunately, it is not true for several devices, e.g.:

hp laserjet cp 1025nw
hp laserjet professional p 1102w

Their PDL is zjstream, which is supported only by binary blob downloaded via hp-plugin.

> Previously, few entities in models.dat had remained as plugin=1 , which has been removed in
> 3.20.6 release.

Actually, 'plugin=1' doesn't mean the plugin is needed for printing, but it means whether it is needed or not. The reason why the plugin is needed is covered by 'plugin-reason' (e.g. plugin-reason=64 means the plugin is needed for scanning). So when all 'plugin=1' entries were removed, all those devices think they don't need a plugin (for printing, or scanning, or both) and fail to print/scan anything if the plugin wasn't installed previously (common use case when installing a printer on freshly installed OS).

If I look into current upstream models.dat, it seems only scanjet models are marked as they need plugin. Multi-function devices are not taken into account.

Ad previous 'plugin=0/1' settings - I'm not sure how many HP devices you have at hand for testing, but at least when I look into scan/sane/hpaio.c:

if ((ma.scantype == HPMUD_SCANTYPE_MARVELL) || (ma.scantype == HPMUD_SCANTYPE_MARVELL2))
       return marvell_open(devicename, pHandle);
if (ma.scantype == HPMUD_SCANTYPE_SOAP)
       return soap_open(devicename, pHandle);
if (ma.scantype == HPMUD_SCANTYPE_SOAPHT)
       return soapht_open(devicename, pHandle);
if (ma.scantype == HPMUD_SCANTYPE_LEDM)
       return ledm_open(devicename, pHandle);
if ((ma.scantype == HPMUD_SCANTYPE_SCL) || (ma.scantype == HPMUD_SCANTYPE_SCL_DUPLEX) ||(ma.scantype == HPMUD_SCANTYPE_PML))
       return sclpml_open(devicename, pHandle);
if (ma.scantype == HPMUD_SCANTYPE_ESCL)
       return escl_open(devicename, pHandle);
if (ma.scantype == HPMUD_SCANTYPE_ORBLITE)
       return orblite_open(devicename, pHandle);
else
       return SANE_STATUS_UNSUPPORTED;

all device types except for SCL and PML call bb_load() function, which loads symbols from binary plugins downloaded via hp-plugin.
To sum it up, I would say most devices which are able to scan and didn't have 'plugin=1' and 'plugin-reason=64' had bad entries in models.dat and supposed to require a binary plugin for scanning.

> Also plugin has nothing to do with python version. It will work on python3 as well.

I wasn't the one who thought it is a python issue.

> Please install plugin via ,
> $sh hplip-3.20.6.plugin.run

This will certainly help, but you are missing the point. Before hplip-3.20.6, hp-setup (with models.dat help) was able to install the plugin automatically, when it recognized that found device needs it. models.dat is used as a database about device features, including plugin.

After hplip-3.20.6, models.dat lost info for several models regarding plugin, making them unusable unless you manually install the plugin.

IMO making a device work, which your suggestion does, is quite different from 'making a device work in user-friendly way', which hp-setup offered (for those devices, which plugin/plugin-reason were set correctly) before version 3.20.6 and which should be preferred for a long-term solution.