Docker安装CUPS让老旧打印机HP M1005实现无线打印(N1也可行)
家里的打印机是惠普的M1005,当初买这台机器看重它的皮实耐用、销量大、耗材便宜,缺点就是不支持网络功能,不能无线打印,在网上做了一番功课,发现可以通过安装CUPS实现无线打印以及打印机共享。docker命令如下:
一 容器部署及设置
docker run \
-d \
--name=cups \
--net=host \
-v /var/run/dbus:/var/run/dbus \
--device /dev/bus \
--device /dev/usb \
-e CUPSADMIN="admin" \
-e CUPSPASSWORD="password" \
tigerj/cups-airprint
我在hub.docker.com拉取了好几个cups,最后发现这个是最好用的,能直接识别出M1005,并且自带驱动,命令中 admin和password为cups系统的管理账户和密码 可以修改。 容器创建好了之后,就可以浏览器打开 192.168.1.20:631
进入cups控制台了,
打印机连接锐角云USB接口,通电。
单击上图菜单栏的 Administration
选项,输入用户名admin密码password,进入下图界面
点击图示按钮添加打印机
对照上图选择已识别出的打印机M1005。点击continue按钮。
这儿有个插曲,之前由于打印机数据线长度不够,我用了USB延长线,结果到这无论如何都识别不了打印机,一度以为是容器的问题,换了很多容器,最后去掉延长线顺利识别。当然其他容器即使没有延长线也识别不了M1005,这个我就不知道原因了。所以如果你用了延长线最好先去掉,否则会有不可预知的问题呵呵。
Name栏是给打印机命名,随便写,我就写M1005简单,其它不用写,下面sharing打勾,这样才能共享,点按钮下一步
选择驱动程序,对照上图选择。然后点击 Add Printer
添加打印机。
这里说下,如果是x86的系统,我试了几个M1005的驱动都能用,如果是arm的系统(比如N1、我家云),只能选图中的这个驱动,反正我就选这个了,毕竟后面的括号里也说的推荐嘛。
这里是设置打印机默认参数,直接用默认值,点击按钮设置默认值。跳转到下面设置成功的页面。
然后自动跳转到打印页面了
点上图按钮 打印一张测试页,顺利的话,打印机就工作了。
二 共享给电脑
我的电脑是WIN10,WIN7自行百度了
进入打印机扫描仪设置界面
这里图中的地址写你的打印机地址,这个地址http://192.168.1.2:631/printers/M1005
前面的IP改成你的NAS的IP,末尾的M1005改成你的打印机名,前面给打印机命名时在Name栏里填写什么这里就写什么。
这里选择打印机的驱动
打印测试页试试。OK 完工。
三 手机实现无线打印
苹果没研究自行百度,我的手机是三星,我试了小米也行,其他国产手机应该都行,设置步骤基本一样。
安卓需要手机安装cups打印服务端app Android CUPS Print,国内各大应用商店基本没有,谷歌商店才有
我提供个下载链接: https://pan.baidu.com/s/14ztCuITB58I4N5CjwIJXdg 提取码: n5tt
安装好了之后,不要打开app,直接进手机的系统设置找到打印设置,会看到多了一个cups打印服务,
点进去会提示正在搜索,是搜索不到的,跟电脑一样据说是什么协议的原因
点右上角三个点选择手动添加打印机
进入这个界面对照图填写
特别注意,这里有个坑,打印机地址跟电脑填写的时候不一样,前面是https,电脑填写的时候是http,是因为安卓9之后不允许使用http必须使用https。
填好点击ADD 添加打印机
完了下面就多出个打印机了,这时候就已经给手机添加了网络打印机了。
用wps打开一个word,打印,打印,选系统打印服务,进入下面界面,显示该打印机目前无法使用,底下会提示找到一台打印机
这时候是无法打印的,点小三角形按钮,下拉菜单中选 所有打印机...
在这里点 M1005 底下会小字提示,不管,不要返回退出,直接切换到手机桌面
这时打开安装好的Anddroid CUPS Print app,会有下图提示,点左边的按钮。
点了之后底下会有小字提示,再尝试打印一次,这时不要退出,直接窗口切换到wps打印窗口,
再点小三角形按钮,下拉菜单中选 所有打印机... 选m1005
再切换回cups app界面,会出现下面窗口,选左边按钮
这时退出app,回到打印窗口,下拉菜单选 所有打印机 选 m1005 是不是可以打印了?
每次打印都要在所有打印机里去选m1005 才能打印。
小米手机按照这个步骤也可以的。估计国产手机都行。
四 解决打印机重启之后无法打印问题
一切搞好之后,我又发现一个问题,打印机关机,再开机,就无法打印了,具体原因不得而知,推测可能是因为打印机断电之后没有将打印机状态反馈给cups容器,解决方法是重启cups容器,即可恢复,但是家用打印机基本上平时都是关机的,每次使用前还要进docker重启cups,太麻烦了,最关键是老婆一定掌握不了这个技术,会给差评,会让我弃用,这怎么行呢。于是百度古哥解决方法,最终让我找到了办法。
方法是利用udev, linux系统udev可以监测usb设备的接入,并且可以执行脚本。通过脚本让cups重启,步骤如下:
首先在root目录下新建个脚本文件cupsstart.sh
内容如下:
#!/bin/sh
docker restart cups
docker exec cups cupsaccept M1005
把权限改成0777
然后在 /etc/udev/rules.d
目录新建一条规则文件 usb-printer.rules
内容如下:
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_VENDOR_ID}=="03f0", ENV{ID_MODEL_ID}=="3b17", RUN+="/root/cupsstart.sh"
说明:规则中的03f0 3b17 要改成你的打印机的ID, ID可以在打印机联机上电后用命令lsusb查看。
然后重启udev服务
service udev restart
现在只要打印机上电,就会重启cups容器,即使cups容器没有启动,也会启动起来。完美。。
大佬,玩客云刷了这个docker后,提示不匹配,但玩客云也是arm的u,主要是你这个cups才有我这个打印机的驱动,麻烦大佬适配一下吧,辛苦了
玩客云是arm 32位的CPU N1是64位的,你可以拉去原作者的镜像试试 tigerj/cups-airprint 原作者的镜像支持arm和arm64