很多朋友都用各种带有USB接口的家用路由器刷了openwrt,用p910nd打印服务器来接普通打印机作为打印服务器。但是,有一些GDI打印机,在打印之前需要把特定的固件发送到打印机上,p910nd 力有不逮,于是翻了下中古的软件,发现CUPs还是比较方便的。自己就写了一个 查询-传输脚本,探查USB打印机是否接入,如果接入了,就把固件发送过去,使得这种比较“廉价”的打印机也能变身为网络打印机....^_^
====================================
【实操:我用的是HP-P1007 openwrt运行在16+64M的7620路由器上,AP模式】
0:根据你路由器的处理器架构,自行下载并安装CUPs 的ipk
(ytwl333大神的编译:https://gitee.com/ytwl333/openwrt-musl-cups/tree/master )
1:创建一个 /etc/123 目录,将 轮询脚本 dl_sent.sh 和 dl驱动文件放进去,记得设置脚本可运行权限 +x
在使用SPI-Flash的普通openwrt路由器里,etc目录是通过overlay方式叠加在root_rom文件系统之上的。写入 /etc目录的文件变化,可以在后台被保存到Flash里,从而持久化,重启之后仍旧存在,你仅需要注意的是Flash里是否有足够的空间即可(df -h 看一下 overlayfs:/overlay对应的 / 目录的使用情况就知道了)。在使用 tf卡、eMMC 的arm处理器或者x86处理器的路由器里,/etc空间有如PC上的硬盘容量足够,你随便用。
2:修改 /etc/rc.local 让脚本以crontab方式运行
(或在路由器web界面修改 自启动脚本:http://192.168.1.1/cgi-bin/luci/admin/system/startup)
在 exit 0 之前增加:
3: dl_sent.sh 脚本内容如下:
if [ -e /dev/usb/lp0 ]
then
if [ -f /tmp/dl_sent.mark ]
then
return
else
cat /etc/123/sihpP1007.dl > /dev/usb/lp0 && touch /tmp/dl_sent.mark && echo "PRN:lp0=UP mark=0, sent dl and marked..." >> /tmp/syslog
fi
else
if [ -f /tmp/dl_sent.mark ]
then
rm /tmp/dl_sent.mark && echo "PRN:lp0=DOWN mark=1, rm mark..." >> /tmp/syslog
fi
fi
#解释:
# if判断,-e 表示是否存在此文件,-f表示是否普通文件
# 如果探查到usb打印机,且标记mark存在,说明一切正常,直接退出本sh
# ------如果mark文件不存在,则说明刚启动,要发送驱动给打印机,并记录事件到日志文件/tmp/syslog
#如果探查不到usb打印机,且mark标记存在,
#-------说明打印机掉线,需删除已发送mark标记,防止打印机连接后mark文件存在 从而不发送驱动了
4: PC上安装HP的驱动: ljP1000_P1500-HB-pnp-win64-sc.exe
5:浏览 http://192.168.1.2:631/ (根据你的实际情况修改IP) 配置CUPs,增加插入的USB打印机
6:在PC上添加网络共享打印机,通常是 http://192.168.1.2:631/printers/1007 等等这样的格式,请从CUPs的管理界面里获得
OK了!
该脚本会每分钟自动运行一下,探查打印机状态,并做相应设置,你也可以修改crontab,改为2、3、5分钟均可。
无论打印机和openwrt谁先开机,无论中间打印机是否断线、断电,在设置的巡查时间间隔之后,打印机都能正常联机打印。
================================================
【参考文章】
https://www.likecs.com/show-204015396.html 加入 sihpP1007.dl > /dev/usb/lp0 就行了
【教训:丢失了 kmod-usb-printer】
不知道为啥丢失了,于是乎,找不到 /dev/usb/lp0 !!! 为此搞了3个小时不得其解。
后来重新 update 一下源,在 kmod-usb 开头的软件包里寻找,找到后,Install之,
再 ll /dev/usb/lp0 正常了。