The problem seems to be caused by some kind of war between software projects. There are two packages taking care of the automatic firmware upload into the cheap HP LaserJet printers: HPLIP and foo2zjs. Both packages do not ship the firmware files itself, because they are proprietary.
HPLIP has one plugin package with all proprietary software pieces used by different HP printers, including the firmware files. This package is downloaded if a printer which needs it is detected (using hp-plugin), but the user is asked before the download happens. This package contains also the UDEV rules and the firmware uploader scripts, as these software pieces do not make sense without the firmware files themselves.
foo2zjs contains all scripts and UDEV rules in its base package which is shipped with the distro. It comes with a script named getweb which allows to download the proprietary files (firmware or color profiles) for a given printer. With the firmware file once downloaded, it gets automatically uploaded by the firmware uploader script.
Problems occur when one downloads the firmware file with both HPLIP's and foo2zjs' methods. Then one has two copies of the firmware file which are tried to upload concurrently. This leads to a crash of the printer. This problem is discussed in bug 732450.
It seems that the author of foo2zjs is either angry about HPLIP's way to download and install a big package of proprietary files when only the firmware is actually needed or he simply wants to prevent the concurrent upload when one sees his radical approach: In the firmware uploader script (/usr/sbin/hplj1000) which is run triggered by UDEV rules, even if no firmware file is downloaded for it, he simply deletes HPLIP's UDEV rule for the firmware upload using these lines:
This is a radical violation against the etiquette of living together of software projects.
I have wasted several hours of searching on my system and discussing on IRC, fearing that we have a severe problem in our UDEV subsystem and not finding the problem's cause some weeks ago. Now, as I looked into the /usr/sbin/hplj1000 file to prepare for a patch to upload the firmware without using the usblp kernel module (we have decided to deprecate it today) I have found these lines.
I was really upset about this behavior.
The author of foo2zjs has broken the out-of-the-box printing experience of all users of Natty with these printers. The main intention of an author of a printer driver is to allow users to use their printers as easy as possible. And if he dislikes the way how other driver authors solve this problem he should not make the users suffering under the expression of his angriness.
I will patch out these lines now and issue that as an SRU (Stable Release Update) for Natty.
I think that this problem is urgent, therefore I have set the bug's priority to "High" and I will do the SRU before doing the fix for Oneiric, as Oneiric also needs additional work as there the usblp kernel module got deprecated and blacklisted today. So doing the SRU after the Oneiric fix will only delay it.
The problem seems to be caused by some kind of war between software projects. There are two packages taking care of the automatic firmware upload into the cheap HP LaserJet printers: HPLIP and foo2zjs. Both packages do not ship the firmware files itself, because they are proprietary.
HPLIP has one plugin package with all proprietary software pieces used by different HP printers, including the firmware files. This package is downloaded if a printer which needs it is detected (using hp-plugin), but the user is asked before the download happens. This package contains also the UDEV rules and the firmware uploader scripts, as these software pieces do not make sense without the firmware files themselves.
foo2zjs contains all scripts and UDEV rules in its base package which is shipped with the distro. It comes with a script named getweb which allows to download the proprietary files (firmware or color profiles) for a given printer. With the firmware file once downloaded, it gets automatically uploaded by the firmware uploader script.
Problems occur when one downloads the firmware file with both HPLIP's and foo2zjs' methods. Then one has two copies of the firmware file which are tried to upload concurrently. This leads to a crash of the printer. This problem is discussed in bug 732450.
It seems that the author of foo2zjs is either angry about HPLIP's way to download and install a big package of proprietary files when only the firmware is actually needed or he simply wants to prevent the concurrent upload when one sees his radical approach: In the firmware uploader script (/usr/sbin/ hplj1000) which is run triggered by UDEV rules, even if no firmware file is downloaded for it, he simply deletes HPLIP's UDEV rule for the firmware upload using these lines:
# rules.d/ *hpmud* laserjet_ ${model} * rules.d/ *hpmud_ support. rules
# Remove HPLIP proprietary rules!
#
model=` echo "$MODEL" | tr 'A-Z' 'a-z' `
rm -f /etc/udev/
rm -f /etc/udev/
This is a radical violation against the etiquette of living together of software projects.
I have wasted several hours of searching on my system and discussing on IRC, fearing that we have a severe problem in our UDEV subsystem and not finding the problem's cause some weeks ago. Now, as I looked into the /usr/sbin/hplj1000 file to prepare for a patch to upload the firmware without using the usblp kernel module (we have decided to deprecate it today) I have found these lines.
I was really upset about this behavior.
The author of foo2zjs has broken the out-of-the-box printing experience of all users of Natty with these printers. The main intention of an author of a printer driver is to allow users to use their printers as easy as possible. And if he dislikes the way how other driver authors solve this problem he should not make the users suffering under the expression of his angriness.
I will patch out these lines now and issue that as an SRU (Stable Release Update) for Natty.
I think that this problem is urgent, therefore I have set the bug's priority to "High" and I will do the SRU before doing the fix for Oneiric, as Oneiric also needs additional work as there the usblp kernel module got deprecated and blacklisted today. So doing the SRU after the Oneiric fix will only delay it.