openwrt 接HP1020打印机,hotplug问题及解决办法

作者:csuper 发表于:2024-05-29

修改后记得重启openwrt 和断电重启打印机   否则无效


在Windows平台上安装好相应的驱动且按照步骤关闭好【双面打印】——————重复打印问题



主机型打印机(也叫windows 打印机,GDI打印机)需要每次上传固件,正巧,HP1020就是这种打印机

解决思路:用cat命令,将打印机固件传入HP1020中

 

提取到LaserJet 1020固件:sihp1020.dl,上传到 /etc

 

主机中运行:cat /etc/sihp1020.dl >/dev/usb/lp0   打印机开始有启动的声音



提取到LaserJet 1020固件

sihp1020.zip

10-usb_printer.zip

修订版:
一、驱动安装
1、安装usb内核驱动、usb打印机驱动如果没有安装的话,按需要安装:
kmod-usb-ohci kmod-usb-printer kmod-usb-uhci kmod-usb2 luci-app-p910nd

2、检查打印机驱动是否OK:
驱动安装后,打印机会被识别,不同版本的固件,打印机识别后稍有不同,backfire、dreambox等识别为“/dev/lp0”,trunk有的版本是“/dev/lp0”,有的版本是”/dev/usb/lp0“。
ls /dev/lp0
ls /dev/usb/lp0
如果看不到 lp0,说明打印机没有驱动起来,不能被路由器识别,检查驱动安装情况。

二、解决HP1020打印机的固件问题(打印机自身有固件的此步骤可省)
HP1020自身没有固件,打印机每次断电重启后,机身没有固件的,windows下固件保存在你的硬盘里,只要有打印任务,windows会把固件传到hp1020,在linux下面也需要把固件放到路由器里,再用同样的机制保证HP1020被识别后将固件传送给它。
1、把sihp1020.dl上传到路由里(为了刷机时备份方便,我是放在/etc/config下面的,刷机时可以选择保存配置,这个不用再上传了。)
2、在/etc/hotplug.d/下面放一条规则,当检测到HP1020打印机的时候,把固件“sihp1020.dl”传送到HP1020打印机。
就用这条命令发送固件,对应'/dev/lp0”的:

  1. cat  /etc/config/sihp1020.dl  /dev/lp0

复制代码

对应“/dev/usb/lp0”的:

  1. cat  /etc/config/sihp1020.dl  /dev/usb/lp0

复制代码

以前没注意,所以用的是手工再添加一项"/dev/lp0"(见楼上的文字),
以上是为了说明原理,不能每次都进ssh设置,直接把相关检测、发送固件的命令放到hotplug.d里,建一个文件”20-hp1020“内容如下,放到/etc/hotplug.d/目录下:

  1. # Upload the firmware to the printer


  2. FIRMWARE=/etc/config/sihp1020.dl

  3. if [ "$PRODUCT" = "3f0/2b17/100" ]

  4. then

  5.       if [ "$ACTION" = "add" ]

  6.       then

  7. #         sleep 10

  8. #         rm /dev/lp0

  9. #         mknod /dev/lp0 c 180 0

  10.          echo "`date` : Sending firmware to printer..." >> /var/hp1020

  11.          cat $FIRMWARE > /dev/usb/lp0

  12.          echo "`date` : done." >> /var/hp1020

  13.       fi

  14. fi

复制代码

三是修改/etc/config/p910nd,/dev/lp0?还是/dev/usb/lp0跟第二条的一致。

  1. config p910nd

  2.         option device        /dev/usb/lp0

  3.         option port          0

  4.         option bidirectional 1

  5.         option enabled       1


#!/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


版权声明

本文仅代表作者观点,不代表Csuper立场。
本文系作者授权百度百家发表,未经许可,不得转载。