家里的打印机是惠普的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控制台了,

2022-03-28T14:27:06.png

打印机连接锐角云USB接口,通电。
单击上图菜单栏的 Administration 选项,输入用户名admin密码password,进入下图界面

2022-03-28T14:36:00.png

点击图示按钮添加打印机

2022-03-28T14:40:01.png

对照上图选择已识别出的打印机M1005。点击continue按钮。
这儿有个插曲,之前由于打印机数据线长度不够,我用了USB延长线,结果到这无论如何都识别不了打印机,一度以为是容器的问题,换了很多容器,最后去掉延长线顺利识别。当然其他容器即使没有延长线也识别不了M1005,这个我就不知道原因了。所以如果你用了延长线最好先去掉,否则会有不可预知的问题呵呵。

2022-03-28T14:42:45.png

Name栏是给打印机命名,随便写,我就写M1005简单,其它不用写,下面sharing打勾,这样才能共享,点按钮下一步

2022-03-28T14:48:01.png

选择驱动程序,对照上图选择。然后点击 Add Printer添加打印机。
这里说下,如果是x86的系统,我试了几个M1005的驱动都能用,如果是arm的系统(比如N1、我家云),只能选图中的这个驱动,反正我就选这个了,毕竟后面的括号里也说的推荐嘛。

2022-03-28T14:49:25.png

这里是设置打印机默认参数,直接用默认值,点击按钮设置默认值。跳转到下面设置成功的页面。

2022-03-28T14:50:49.png

然后自动跳转到打印页面了

2022-03-28T14:51:21.png
2022-03-28T14:53:03.png

点上图按钮 打印一张测试页,顺利的话,打印机就工作了。

二 共享给电脑

我的电脑是WIN10,WIN7自行百度了

进入打印机扫描仪设置界面

2022-03-28T15:35:54.png

2022-03-28T15:37:12.png

2022-03-28T15:40:26.png

这里图中的地址写你的打印机地址,这个地址http://192.168.1.2:631/printers/M1005 前面的IP改成你的NAS的IP,末尾的M1005改成你的打印机名,前面给打印机命名时在Name栏里填写什么这里就写什么。

2022-03-28T15:50:42.png

这里选择打印机的驱动

2022-03-28T15:52:11.png

2022-03-28T15:52:43.png

打印测试页试试。OK 完工。

三 手机实现无线打印

苹果没研究自行百度,我的手机是三星,我试了小米也行,其他国产手机应该都行,设置步骤基本一样。
安卓需要手机安装cups打印服务端app Android CUPS Print,国内各大应用商店基本没有,谷歌商店才有
我提供个下载链接: https://pan.baidu.com/s/14ztCuITB58I4N5CjwIJXdg 提取码: n5tt
安装好了之后,不要打开app,直接进手机的系统设置找到打印设置,会看到多了一个cups打印服务,

Screenshot_20220329-002558_Settings.jpg

点进去会提示正在搜索,是搜索不到的,跟电脑一样据说是什么协议的原因

Screenshot_20220329-002618_Settings.jpg

点右上角三个点选择手动添加打印机

Screenshot_20220329-002724_Settings.jpg

进入这个界面对照图填写
特别注意,这里有个坑,打印机地址跟电脑填写的时候不一样,前面是https,电脑填写的时候是http,是因为安卓9之后不允许使用http必须使用https。
填好点击ADD 添加打印机

Screenshot_20220329-003116_Android CUPS Print.jpg

完了下面就多出个打印机了,这时候就已经给手机添加了网络打印机了。

Screenshot_20220329-003131_Settings.jpg

用wps打开一个word,打印,打印,选系统打印服务,进入下面界面,显示该打印机目前无法使用,底下会提示找到一台打印机

Screenshot_20220329-003330_Print Spooler.jpg

这时候是无法打印的,点小三角形按钮,下拉菜单中选 所有打印机...

Screenshot_20220329-003412_Print Spooler.jpg

在这里点 M1005 底下会小字提示,不管,不要返回退出,直接切换到手机桌面

Screenshot_20220329-003421_Print Spooler.jpg

这时打开安装好的Anddroid CUPS Print app,会有下图提示,点左边的按钮。

Screenshot_20220329-003544_Android CUPS Print.jpg

点了之后底下会有小字提示,再尝试打印一次,这时不要退出,直接窗口切换到wps打印窗口,
再点小三角形按钮,下拉菜单中选 所有打印机... 选m1005

Screenshot_20220329-003552_Android CUPS Print.jpg

再切换回cups app界面,会出现下面窗口,选左边按钮
Screenshot_20220329-003625_Android CUPS Print.jpg

这时退出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容器没有启动,也会启动起来。完美。。

文章目录