LearnHub

  • 首页
  • 科学上网
  • 网络相关
  • 谷歌相关
  • 实用工具
  • 在线视频
  • 搭建工具
  • 新闻快讯
  • 原创类
  • 教程类
Kratos
专注于用户阅读体验的响应式博客主题
  1. 首页
  2. 教程类
  3. 正文

DOCKER安装CUPS容器实现无线打印(支持大部分ARM设备)

2023年 10月 13日 17次阅读 0人点赞 1条评论

一.锐角云等X86机器

执行代码拉取镜像并运行容器,这里仍然选择tigerj/cups-airprint的,因为其他的我都试过识别不了我的M1005,不知道是不是个案。而且这个镜像带avahi,能实现airprint,支持安卓及苹果设备直接使用系统自带打印服务搜索到打印机,非常方便。只是有点瑕疵,让我花了点时间解决了。
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" \       
tigerj/cups-airprint
后面步骤都一样,参考老版步骤,选择驱动,共享打印机,直到cups里能打印出测试页面。这时如果去电脑或者手机的打印服务里搜索打印机是搜索不到的。接下来执行命令
docker exec cups service dbus start
docker exec cups service avahi-daemon start
执行之后去电脑或者手机系统自带的打印服务里搜索打印机,怎么样,是不是搜索到了? 这时候打印机能正常工作了,但是不能关,一关,再打开,打印作业就会被挂起,无法继续打印,只有手动重启cups,要想实现打印机上电自动重启cups,解决方法如下: 在/etc/udev/rules.d目录下新建一条规则,如m1005.rules 内容如下:
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_VENDOR_ID}=="03f0", ENV{ID_MODEL_ID}=="3b17", RUN+="/root/cupsstart.sh" 
ACTION=="remove", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_VENDOR_ID}=="03f0", ENV{ID_MODEL_ID}=="3b17", RUN+="/root/cupsstop.sh"
  这步操作是让系统在发现打印机接入及断开时执行脚本,这段代码也是百度来的,原本add和remove两段代码是一样的,唯一区别是最后执行的脚本不一样,但是实际执行的时候我发现只有打印机接入能执行add这段代码,而打印机断电,不能执行remove这段代码,继续百度,从https://blog.csdn.net/weixin_30610431/article/details/114562335找到了答案,执行 udevadm monitor --kernel --property --subsystem-match=usb之后分别给打印机通电和断电,对比输出发现,断电时没有 MODEL_ID参数,所以代码不执行了,根据实际输出,将断电代码如上修改之后,就顺利执行了。其中add段代码中的03f0 3b17 两个数据要跟你你的实际修改,这两个参数可以通过执行lsusb查看到   然后在/root目录里建立两个脚本:cupsstart.sh和cupsstop.sh  
#!/bin/sh
docker restart 容器ID
docker exec 容器ID cupsaccept 打印机名
docker exec 容器ID service dbus start
docker exec 容器ID service avahi-daemon start
重新加载udev规则udevadm control --reload-rules
这个脚本实现系统一发现打印机接入,就重启cups容器,并设置打印机接受打印任务,另外将avahi服务启动起来。
#!/bin/sh
docker exec 容器ID cupsreject 打印机名
这个脚本是实现当打印机断电了,设置打印机拒绝打印任务,为什么要这么设置呢,因为打印机断电之后重新上电,cups会接受打印任务,但是却不打印,这时如果重启,重复发送的打印任务全部会打印出来,为了避免这种情况发生,需要在打印机断电之后设置cups拒绝打印任务。 好了这样就完美实现,打印机上电自动启动cups,断电cups拒绝打印任务,并且完美支持airprint,安卓,ios,电脑都能直接搜索到打印机。

二.我家云、贝壳云、N1等arm机器

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
花了点时间修改了镜像,直接支持airprint了。 我既有我家云也有N1,都刷的是荒野无灯大神的小钢炮系统,这个系统非常精简,里面管理热插拔硬件的是mdev 这个是简化版的udev,研究了许久只实现了打印机上电自动重启cups,也可以啦。方法如下: 在/etc/mdev.conf文件的最下面添加一行:
usb/lp0       0:0 660   @/root/cupsstart.sh
然后执行/etc/init.d/S10mdev restart重启mdev服务。 如为armbian系统,可在/etc/udev/rules.d目录下新建文件命名为99-usb-cups.rules,文件内容如下:
SUBSYSTEM=="usb", ACTION=="add", RUN+="/root/cupsstart.sh"
如为openwrt系统,可在/etc/hotplug.d/usb/10-usb_printer文件里面添加2行,内容如下:
sleep 10
/etc/rc.d/S70usb_printer restart
这表示识别打印机接入,就执行/root/cupsstart.sh脚本,脚本内容:
#!/bin/sh
docker restart cups
记得把脚本权限改成0777
标签: 暂无
最后更新:2023年 10月 13日

骑着毛驴看世界

我们是一个汇集了各种教程的在线知识宝库。无论您是寻找如何精通编程、烹饪美食、学习新技能,还是探索创意艺术和健康生活的窍门,我们的网站都为您提供了丰富的教程资源。不仅可以浏览他人的精彩教程,还可以轻松创建和分享自己的知识,与全球的学习者互动。无论您是一位导师还是一名学徒,『LearnHub』都是您不可或缺的学习伙伴,助您在各种领域不断成长。加入我们,开启学习的无限可能!

点赞
< 上一篇
下一篇 >

文章评论

  • Avatar photo
    睡瞌睡

    标记下

    2023年 10月 13日
    登录以回复
  • 您需要 登录 之后才可以评论

    归档

    • 2026 年 11 月
    • 2023 年 10 月

    分类

    • 原创类
    • 搭建工具
    • 教程类
    • 科学上网
    • 网络相关

    近期文章

    • WordPress一键替换域名
    • 绿盾客户端文件加密不显示锁的图标,加密功能正常
    • centos 9 安装 详细步骤,包含安装环境,软件,分区等简单使用以及讲解
    • WordPress自适应WebP格式图片加速方法-Nginx,WP插件和CDN三种方式
    • SmartDNS +dnsmasq+Passwall+AdguardHome 优化

    近期评论

    1. 睡瞌睡 发表在 DOCKER安装CUPS容器实现无线打印(支持大部分ARM设备)
    2. 萨达加 发表在 centos stream9 设置网卡IP
    3. 骑着毛驴看世界 发表在 centos stream9 设置网卡IP

    COPYRIGHT © 2023 LearnHub. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang