OpenWrt/PandoraBox/LEDE做打印服务器连接HP1020问题汇总

此解决方案适用于HP 1000 1005 1018 1020打印机

需要在路由器上面禁用双向模式,否则无法正常打印

问题一
能识别,能添加网络打印机,不能打印,下发打印任务之后,发现打印机根本没反应,Windows系统日志有报错

Administrator 拥有的文档 打印文档 无法在打印机 HP LaserJet 1020 上打印。请尝试再次打印文档,或重新启动后台打印程序。
数据类型: RAW。后台文件大小(以字节为单位): 1414944。打印的字节数: 1414944。文档页面总数: 1。打印页面总数: 0。客户端计算机: \DESKTOP-EOG90GN。打印处理器返回的 Win32 错误代码: 1803。打印机命令无效。

原因:主机型打印机(也叫Windows 打印机,GDI打印机)需要每次上传固件,1020就是这种的

复制固件sihp1020.dl到路由器/etc

执行cat /etc/sihp1020.dl >>/dev/usb/lp0加载固件到打印机(/dev/usb/lp0为打印机挂载点),会发现打印机有反应,能正常打印

问题二
手动加载固件后成功打印一次,然后无法打印,错误和问题一相同

原因:打印机工作时每次打印都需要加载固件

添加脚本到路由器,自动加载固件到打印机
脚本内容

#!/bin/sh

set -e

# change this to the location where you put the .dl file:
FIRMWARE=/etc/sihp1020.dl
DEVICE=/dev/usb/lp0
LOGFILE=/tmp/hp1020

if [ "$PRODUCT" = "3f0/2b17/100" -a "$ACTION" = "add" -a "$DEVTYPE" = "usb_interface" ]; then
   echo "$(date): STARTING" > $LOGFILE
   for i in $(seq 30); do
       echo "$(date): Attempt number $i on $DEVICE" >> $LOGFILE
       if [ -c $DEVICE ]; then
          echo "$(date): Device $DEVICE found." >> $LOGFILE
          if [ -z "`usb_printerid $DEVICE | grep FWVER`" ]; then
              echo "$(date): No firmware found on $DEVICE" >> $LOGFILE
              echo "$(date): Sending firmware to printer…" >> $LOGFILE
              cat $FIRMWARE > $DEVICE
              echo "$(date): done." >> $LOGFILE
          else
              echo "$(date): Firmware already there on $DEVICE" >> $LOGFILE
          fi
          echo "$(date): EXITING" >> $LOGFILE
          exit
       fi
       sleep 1
    done
fi

保存为/etc/hotplug.d/usb/10-usb_printer(替换原有的10-usb_printer文件)

usb_printerid需要自行编译

问题三
HP1020打印一次后打印一直重复打印

设置打印机属性,禁用打印机双向支持

重启路由器,测试

相关文件下载:https://dl.t2.re/Others/Openwrt%E6%8C%82%E8%BD%BDHP%E6%89%93%E5%8D%B0%E6%9C%BA/

来源:
http://blog.51cto.com/zbh3c/2084350

http://www.right.com.cn/forum/thread-212810-1-1.html

https://wiki.openwrt.org/doc/howto/p910nd.server

http://oleg.wl500g.info/hplj/