N1盒子通过openwrt的docker安装cups让古董usb打印机实现无线打印和扫描

news/2024/10/22 17:38:28/

一、打印功能

家里有一台 HP LaserJet M1005 MFP 古董打印机,只有usb接口,本来是通过windows电脑实现家庭局域网共享的。在电脑上安装Air Printert软件,可以实现苹果手机无线打印。不过每次打印都要开电脑,比较麻烦。也不可能为了个打印机电脑24小时开机。最近折腾了一下,通过N1盒子安装cups,实现了无线打印,记录一下,以免以后自己忘了怎么操作。

过程主要参考恩山论坛大佬jysky的文章《[N1盒子] docker安装cups让打印机实现无线打印(支持PC、IOS、安卓airprint)》,文章链接为:https://www.right.com.cn/forum/thread-8220309-1-1.html 。

另外还参考了这篇文章:openwrt软路由(x86)做打印服务器,用docker安装cups/airprint_NAS存储_什么值得买

将打印机连接到N1的usb接口。

进入openwrt——系统——TTYD终端,输入以下代码:

docker run \--name=cups \--restart=always \--net=host \-v /var/run/dbus:/var/run/dbus \-v ~/airprint_data/config:/config \-v ~/airprint_data/services:/services \--device /dev/bus \--device /dev/usb \-e CUPSADMIN="admin" \-e CUPSPASSWORD="password" \jysky007/cups:v1

此容器只支持N1、贝壳云、我家云、粒子云、等arm处理器的机器。

浏览器打开192.168.XXX.XXX:631 (前面为N1盒子ip地址,端口631)进入cups管理界面。cups的默认用户名和密码是print/print,不过看上面的代码,大佬已经把用户名和密码改成admin/password了。

之后点击Add Printer,选择自己的打印机,再选择驱动,N1等ARM处理器的要选带Foomatic/foo2xqx字样的驱动,别的驱动是适配X86的。

后面全部默认,最后完成打印机添加。

大佬的帖子中PC端直接搜索打印机就能搜到,我自己的情况不行,需要手动添加,win7和win10方法一样:

设备和打印机——添加打印机——添加网络、无线或Bluetooth打印机——我需要的打印机不再列表中——按名称选择共享打印机——http://192.168.XXX.XXX:631/printers/HP_LaserJet_M1005——添加驱动。 

如果windows提供的列表中没有匹配的驱动(比如我的古董打印机),可以去Microsoft Update Catalog 搜索打印机型号,我搜索的是M1005,选择合适的驱动下载。

下载下来的cab文件解压缩,里边包含inf安装文件。

接着上面的添加驱动——从磁盘安装——浏览找到cab文件里的HPLJM1005.INF——完成驱动安装。如此windows电脑端打印机就添加成功了。

HP打印机的驱动安装方法可以参考下面的文章:HP LaserJet - 在 Windows 10 电脑上,通过网络安装面向 HP 打印机的 Windows 驱动程序 | HP®客户支持

iOS端能直接搜索到打印机,不用安装第三方软件。没有安卓手机,未测试,大佬帖子里说也能直接搜到。

最后,大佬帖子中提到打印机如果断电再开机, 发送打印任务就无法打印了,必须重启cups。

二、扫描功能

最近发现上述操作只能实现无线打印,但无法使用扫描功能。网上搜了一下,也有能实现扫描的docker镜像,是通过SANE实现的。

网址如下,里面有详细介绍:

https://github.com/sbs20/scanservjs

项目SANE的网址如下:

SANE - Scanner Access Now Easy

安装方法一样,进入openwrt——系统——TTYD终端,输入以下代码:

docker pull sbs20/scanservjs:latest
docker rm --force scanservjs-container 2> /dev/null
docker run -d \-p 8080:8080 \-v /var/run/dbus:/var/run/dbus \--net=host \  #此行是我自己添加的,默认bridge模式貌似无法访问,改成host模式可行--restart unless-stopped \--name scanservjs-container \--privileged sbs20/scanservjs:latest

浏览器打开192.168.XXX.XXX:8080 (前面为N1盒子ip地址,端口8080)进入扫描管理界面,即可直接扫描。

另外docker网络模式参看下文:Docker学习:容器五种(3+2)网络模式 | bridge模式 | host模式 | none模式 | container 模式 | 自定义网络模式详解_docker的五种网络模式总结_血煞长虹的博客-CSDN博客

三、常见问题

问题1:打印机一旦关机再开机默认就不能用了,必须重新去luci里面重启cups服务才行,如何解决?

/etc/hotplug.d/usb/10-usb_printer文件里面添加

sleep 10/root/cupsstart.sh

然后到/root目录添加脚本cupsstart.sh

#!/bin/sh
docker restart cups

把脚本的权限改为0777

问题2:N1在openwrt的docker中运行的cups,如何实现开启打印机自动启动?

第一步:找到目录/etc/hotplug.d/usb,里面有一个10-usb_printer的文件,使用命令:

vi /etc/hotplug.d/usb/10-usb_printer

打开文件后修改里面的内容为:

if [ x"$INTERFACE" = x"7/1/1" ] || [ x"$INTERFACE" = x"7/1/2" ]; then
        /usr/bin/usb_printer_hotplug "$PRODUCT" "$ACTION"
              sleep 10
                  /root/cupsstart.sh
fi
第二步:进入root目录,新建cupsstart.sh文件,命令为:vi cupsstart.sh,然后修改其内容为

#!/bin/sh
docker restart cups

保存,设置文件权限为0775,命令为:chmod 0775 cupsstart.sh
第三步,把打印机关闭后再开机,等待十几秒后,再看看是不是又可以愉快的打印了!
此方法在打印机开机时,会触发docker中的cups自动运行,关机时,cups也会自动运行,但是因为找不到打印机,所以此时的cups是不能正常工作的,相当于打印机关机的效果。

问题3:docker容器时区不对导致时间不对

最近又遇到一个问题,docker容器部署cups,发现时间少了8个小时,于是想到是docker容器的内部时区问题。docker容器一般是debian系统,默认是UTC标准时间。可通过以下命令修改docker时区:

# 1.先进容器内部
docker exec -it 容器ID bash   
# 2.设置上海时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

如果进入容器修改的时候总是报/etc/localtime 文件只读,不让修改,也可以用以下命令:

docker cp /etc/localtime:容器ID/etc/localtime


http://www.ppmy.cn/news/784435.html

相关文章

超详细保姆级vue3和代码规范项目搭建

vue3-admin项目搭建 项目初始化 创建 git 仓库 npm 管理工具 pnpm 安装 pnpm create vite zf-v3-admin –template vue-ts pnpm init 初始化package.json 创建pnpm-workspace.yaml 定义工作区 pnpm-lock.yaml 和 package-lock.json 都是项目中的锁定文件,它…

win7扫描仪在计算机,怎么在win7我的电脑里显示hp1005扫描仪图标

官网win7系统laserjet M1005打印机完整驱动链接如下http://h20565.www2.hp.com/portal/site/hpsc/template.PAGE/public/psi/swdDetails/?sp4ts.oid1839459&spf_p.tpstswdMain&spf_p.prp_swdMainwsrp-navigationalState%3Didx%253D%257CswItem%253Dma_124621_1%257Csw…

惠普扫描应用程序当前正由此计算机上的其,惠普打印机 打印扫描的时候显示“由于另一个程序或另一台计算机正在使用联网的HP成像设备因此无法执行”...

一、避免网络内的用户同时使用一体机 当一体机连接在网络中时,请避免网络中的多个用户同时使用一体机,例如打印、扫描等功能,特别是多位用户同时使用扫描功能时会出现“另一程序或电脑正在使用该联网设备,无法执行扫描”的信息。遇到这种情况时建议重新启动电脑、一体机、路…

怎样把计算机扫描放到桌面上,Win10系统怎么把画图/扫描等小工具添加到桌面

常要用到画图工具来给图片添加一些标注箭头或圆圈什么的,然而每次都是通过右键-打开方式-画图这种方法编辑图片不免有些麻烦,Win10系统怎么把画图工具添加到桌面上呢?下面是学习小编给大家整理的有关介绍Win10系统怎么把画图/扫描等小工具添加到桌面&am…

标识符的命名规则和规范

标识符概念 Java对各种变量、方法和类等命名时使用的字符序列称为标识符。凡是自己可以起名字的地方都叫标识符。 标识符的命名规则 由26个英文字母大小写,0-9,_或$组成数字不可以开头不可以使用关键字和保留字,但能包含关键字和保留字Jav…

接口文档设计的12个注意点

前言 我们做后端开发的,经常需要定义接口文档。 最近在做接口文档评审的时候,发现一个小伙伴定义的出参是个枚举值,但是接口文档没有给出对应具体的枚举值。其实,如何写好接口文档,真的很重要。今天田螺哥,给你带来接…

三大运营商2G3G4G频段分布

中国移动: 2G:GSM900:890-909(上行)935-954(下行),GSM1800:1710-1725(上行)1805-1820(下行)。 3G:TDD\(TD-SCDMA) 1880MHz-1900MHz和2010MHz-2025MHz。 4G:1880-1900MHz、2320-2370 MHz、25…

2022.2.4-----leetcode.1725

public int countGoodRectangles(int[][] rectangles) {Map<Integer,Integer> hashnew HashMap<>();//哈希表存储正方形边长及数量int max0;//最大正方形边长int mini0;//每个矩形能切出的最大正方形边长//遍历模拟for (int i 0; i < rectangles.length; i) {i…