[Pkg-cups-devel] Bug#666447: cups: /usr/lib/cups/backend/usb removes /dev/usb/lpN

Vladimir Lebedev-Schmidthof dair.spb at gmail.com
Fri Mar 30 20:09:30 UTC 2012


Package: cups
Version: 1.5.2-9
Severity: normal

Dear Maintainer,
*** Please consider answering these questions, where appropriate ***

   * What led up to the situation?
I was installing HP LaserKet P1006 printer using CUPS and printer-driver-foo2zjs (version 20120223dfsg0-1).
After installation, my printer didn't work and my /var/log/messages was full of messages:

-------------------------------- /var/log/messages BEGIN
Mar 30 21:54:34 jbs kernel: [  165.508737] usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x03F0 pid 0x3E17
Mar 30 21:54:34 jbs /etc/hotplug/usb/hpljP1006: foo2zjs: usb://HP/LaserJet%20P1006?serial=AA0309W... download failed.
Mar 30 21:54:35 jbs /etc/hotplug/usb/hpljP1006: foo2zjs: loading HP LaserJet P1006 firmware /usr/share/foo2xqx/firmware/sihpP1006.dl to /dev/usb/lp0 ...
Mar 30 21:54:35 jbs kernel: [  165.567435] usblp0: nonzero write bulk status received: -108
Mar 30 21:54:35 jbs kernel: [  165.570203] usblp0: removed
Mar 30 21:54:35 jbs /etc/hotplug/usb/hpljP1006: foo2zjs: ... download failed.
-------------------------------- /var/log/messages END

I started the investigation;

First of all, I found out that printer-driver-foo2zjs udev file (/lib/udev/rules.d/85-hplj10xx.rules) calls its own script /usr/sbin/hpljP1006;
I got there and found out that it, subsequently,
1. Loads firmware into device file (function load_usblp(), line 218) in background
2. Loads same firmware into CUPS USB device (function load_cups(), line 238), also in background. It runs /usr/lib/cups/backend/usb to get the list of printers used in CUPS (as I get it) to put firmware in all of them. But it appears that /usr/lib/cups/backend/usb REMOVES usblp driver so removes device file.
This causes loading firmware into device file to fail (well, driver unloads in progress of firmware loading) so printer doesn't work without proper firmware.

Driver then loads back by hotplug or udev (I didn't digging this and it doesn't seem matter here) and that very script is loaded again causing flooding /var/log/messages with error messages.

I made a hotfix for my system by removing '&'s (i.e. making it working in foreground) in /usr/sbin/hpljP1006;
    
The result is that driver is reloading once in 3 seconds (cause /usr/sbin/hpljP1006 has ``sleep 3'' in it) and printer is highly unstable; but it's muich better that not working printer at all.

Proper solution I believe is make /usr/lib/cups/backend/usb to NOT reload usblp. I might dig into CUPS code if needed.

Another way to achieve correct result is to rewrite /usr/sbin/hpljP1006 script of printer-driver-foo2zjs package to catch driver reloading by calling /usr/lib/cups/backend/usb so maybe it should be passed to printer-driver-foo2zjs's maintainer.



-- System Information:
Debian Release: 6.0.4
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'unstable'), (500, 'testing'), (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 3.2.0-2-686-pae (SMP w/1 CPU core)
Locale: LANG=ru_RU.UTF-8, LC_CTYPE=ru_RU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages cups depends on:
ii  adduser                3.112+nmu2
ii  bc                     1.06.95-2
ii  cups-client            1.5.2-9
ii  cups-common            1.5.2-8
ii  cups-filters           1.0.11-1
ii  cups-ppdc              1.5.2-9
ii  debconf [debconf-2.0]  1.5.36.1
ii  dpkg                   1.15.8.12
ii  ghostscript            9.05~dfsg-4
ii  libavahi-client3       0.6.27-2+squeeze1
ii  libavahi-common3       0.6.27-2+squeeze1
ii  libc6                  2.13-27
ii  libcups2               1.5.2-8
ii  libcupscgi1            1.5.2-9
ii  libcupsimage2          1.5.2-8
ii  libcupsmime1           1.5.2-9
ii  libcupsppdc1           1.5.2-9
ii  libdbus-1-3            1.2.24-4+squeeze1
ii  libgcc1                1:4.7.0-1
ii  libgnutls26            2.12.18-1
ii  libgssapi-krb5-2       1.10+dfsg~beta1-2
ii  libkrb5-3              1.10+dfsg~beta1-2
ii  libldap-2.4-2          2.4.23-7.2
ii  libpam0g               1.1.1-6.1+squeeze1
ii  libpaper1              1.1.24+nmu1
ii  libslp1                1.2.1-9
ii  libstdc++6             4.7.0-1
ii  libusb-1.0-0           2:1.0.9~rc3-3
ii  lsb-base               3.2-23.2squeeze1
ii  poppler-utils          0.16.7-3
ii  procps                 1:3.2.8-9
ii  ssl-cert               1.0.28

Versions of packages cups recommends:
ii  avahi-daemon               0.6.31-1
ii  colord                     0.1.18-1
ii  foomatic-filters           4.0.15-1
ii  ghostscript-cups           9.05~dfsg-4
ii  printer-driver-gutenprint  5.2.7-5

Versions of packages cups suggests:
ii  cups-bsd                                   <none>
ii  cups-pdf                                   <none>
ii  foomatic-db-compressed-ppds [foomatic-db]  20120322-1
ii  hplip                                      <none>
ii  printer-driver-hpcups                      <none>
ii  smbclient                                  2:3.5.6~dfsg-3squeeze6
ii  udev                                       175-3.1

-- Configuration Files:
/etc/cups/cupsd.conf changed:
LogLevel warn
MaxLogSize 1m
SystemGroup lpadmin
Port 631
Listen /var/run/cups/cups.sock
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols cups dnssd ldap slp
DefaultAuthType Basic
WebInterface yes
<Location />
  # Allow remote administration...
  Order allow,deny
  Allow @LOCAL
</Location>
<Location /admin>
  # Allow remote administration...
  Order allow,deny
  Allow @LOCAL
</Location>
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  # Allow remote access to the configuration files...
  Order allow,deny
  Allow @LOCAL
</Location>
<Policy default>
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    Order deny,allow
  </Limit>
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Cancel-Job CUPS-Authenticate-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit All>
    Order deny,allow
  </Limit>
</Policy>
<Policy authenticated>
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    AuthType Default
    Order deny,allow
  </Limit>
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Cancel-Job CUPS-Authenticate-Job>
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit All>
    Order deny,allow
  </Limit>
</Policy>
FileDevice Yes
BrowseRemoteProtocols cups


-- debconf information:
  cupsys/raw-print: true
  cupsys/backend: ipp, lpd, socket, usb, snmp, dnssd





More information about the Pkg-cups-devel mailing list