I'm using an HP 1102w b/w laser printer for almost 10 years now. It's a great printer!
Unfortunately, it suffers from an annoying bug/issue with CUPS:
Most of the time, the printer needs to be reset after each print, otherwise it will not spit out any following print jobs.
Turning the printer off-and-on again works, but causes the printer to do its mechanical power-on-initialization movement (you can hear it), which is unnecessary here and may age the mechanics faster than necessary. Unplugging the USB cable also works, but just seems wrong. For some time I've also added an extra USB hub that I could power on/off - but that also seems like a very ugly workaround.
[SOLUTION]
On GNU/Linux, it's possible to reset a certain USB device, given that you know the "USB path" (=which hub/port) it's connected to.
1) Soft reset the USB port
Here's a small shell script I wrote that I run after each printout now. It soft-resets (unbind/bind) that specific USB port the printer is connected to. Works like a charm. Still a workaround, but I didn't have the time (or nerves) yes to actually debug the CUPS/driver that causes this issue.
Code: Select all
USB_SYSFS="/sys/bus/usb/drivers/usb"
USB_PATH="$1" # Syntax is like "1-1.2", etc.
echo "Resetting '$USB_PATH'..."
# Disconnect:
echo $USB_PATH > $USB_SYSFS/unbind
# Reconnect:
echo $USB_PATH > $USB_SYSFS/bind
echo "Done."
Code: Select all
$ sudo usbreset 1-1.3
2) How to find out "where" your printer is actually connected
You can use "lsusb" to find out on which USB path your printer is connected.
Your output will look different, but something like this:
Using "lsusb -t" shows a tree-like structure (but a bit harder to find which is the printer):
If you have multiple printers connected, just running "lsusb" may help narrowing down which one you mean:/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 480M
|__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
|__ Port 2: Dev 17, If 0, Class=Vendor Specific Class, Driver=, 480M
|__ Port 2: Dev 17, If 1, Class=Printer, Driver=usblp, 480M
|__ Port 2: Dev 17, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 21, If 0, Class=Printer, Driver=usblp, 480M
|__ Port 3: Dev 21, If 1, Class=Vendor Specific Class, Driver=, 480M
As you can see, on my setup I have 2 printers: One HP (=the laserjet) and 1 Epson (actually just used as a network scanner with "sane" )Bus 001 Device 021: ID 03f0:102a Hewlett-Packard
Bus 001 Device 017: ID 04b8:0898 Seiko Epson Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub