低成本的无线打印:群晖上通过Docker容器实现Airprint
群晖NAS得益于高质量的软件设计和方便的使用体验深受家庭用户喜爱。随着使用场景的扩展,各种功能的发掘也随着需求的增长不断出现。打印虽然是个古老的话题了,但是对于有打印需求的用户来说,有些时候还真的离不开。
于是利用群晖NAS配合低成本打印机,实现家庭(小型办公环境)打印机共享的方案深受欢迎。但是对于有无线打印需求的用户来说,如果打印机本身不带Airprint功能,那么有没有办法实现呢?
前一段时间,我写了个利用群晖的虚拟机实现无线打印的文章,有些同学提出来,能不能利用Docker来实现。于是周末抽空玩了一下,把结果分享一下。
方案描述
由于驱动支持的原因,有一部分打印机没有办法利用Synology内置的CUPS驱动实现AirPrint。但是Synology系统上没有很好的办法自定义驱动安装打印机。
由于Docker镜像可定制性高,可以很方便的安装自定义驱动和软件,所以利用Synology系统的Docker容器,挂载NAS上的打印机,实现局域网打印机共享,和移动设备打印需求。尤其是iOS,由于系统原因,很多无线打印都是通过安装第三方软件来实现。这个使用体验和系统原生支持的AirPrint还是有一些不同的。
准备工作
1. 打开系统的ssh服务,方便后续操作
2. 打开系统的Bonjour服务发现
3. 连接ssh。如果是Windows 10系统,可以安装一下ssh client或者使用其他软件如putty等
4. 停掉系统内置的CUPS服务,避免端口冲突
synoservicecfg--hard-stop cupsd
synoservicecfg --hard-stop cups-lpd
synoservicectl --stop cupsd
synoservicectl --stop cups-lpd
5. 为Docker容器创建文件夹,方便储存配置文件:我这里创建了docker-aiprint,里面两个子文件夹如图
步骤
1. 准备就绪之后,咱们就开始选docker镜像了,我这里选择的是:
也可以在ssh里面一步到位:
docker run -d --name=airprint
--net="host"
--privileged=true
-e "CUPS_USER_ADMIN"="admin"
-e "CUPS_USER_PASSWORD"="pass"
-e TZ="Asia/Shanghai"
-e HOST_OS="Synology"
-e "TCP_PORT_631"="631"
-v"/volume1/docker/airprint/config":"/config"
-v /dev:/dev
-v"/volume1/docker/airprint/avahi":"/etc/avahi/services"
-v /var/run/dbus:/var/run/dbus"mnbf9rca/cups-google-print"
备注:以手命令里面的"CUPS_USER_ADMIN"="admin"参数是CUPSD服务的管理页面账号,"CUPS_USER_PASSWORD"="pass"是密码。我这里保持默认,自己家用无所谓。
2. 命令执行完之后,容器已经运行了
3. 试一下登录管理页面:https://DSM的IP:631/admin/ 注意这里默认是https。
4. 添加打印机
打印机已经可以发现了
别忘记勾选共享
这一步的时候,如果找不到自己的打印机驱动,可以手动指定驱动。我的HP机器,可以去这里看看:
https://developers.hp.com/hp-linux-imaging-and-printing
我选择了默认A4纸,最佳打印质量
设置完后回到打印机这一页,可以看到打印机处于空闲状态
可以打印一个测试页
手机端打印测试
总结
是不是很简单?资源占用明显比之前的虚拟机方案小太多了。
顺便附上CUPSD的配置文件,如果登录CUPSD管理页面有问题的,可以参考(重点是注释掉AuthType Default和添加Allow from all)。
#比如默认位置
# Restrict access to the server...
#AuthType Default
Allow from all
Order deny,allow
#管理页面
# Restrict access to the admin pages...
#AuthType Default
#Require user @SYSTEM
Allow from all
Order deny,allow
其他位置酌情修改即可。
wayes
校验提示文案
三上的爸爸
校验提示文案
值友5573106180
校验提示文案
mikecn
校验提示文案
木头怀
校验提示文案
JORDAN7923
校验提示文案
jammaj
校验提示文案
wayes
校验提示文案
StevenS_1
校验提示文案
star_liu
校验提示文案
爱便宜
校验提示文案
jerryjp
校验提示文案
kline
校验提示文案
Pattern
校验提示文案
Dreamk
校验提示文案
Dreamk
前提:已经通过ssh禁用了4项服务,是在docker界面进行设置的容器,而不是用ssh命令,但是命令中设置的几个变量都在图形界面中添加到环境变量中,卷文件夹也设置了。
1、网络模式采用bridge桥接时,设置端口631会提示与其他服务冲突,设置成其他的,比如632可以成功。也能通过浏览器访问,用户名密码可以认证通过,并设置打印机。但是手机却无法发现打印机。
2、网络模式采用与本机相同,应该就是host模式,并在环境变量中添加631端口的变量。启动后通过631端口可以访问,但是用户名密码无论如何都无法通过验证。用户名和密码的环境变量是已经设置好了的。
请教楼主有没有什么解决办法?
校验提示文案
Duyes
校验提示文案
值友9192743829
校验提示文案
LtMaverick
校验提示文案
samway
校验提示文案
值友3830665591
校验提示文案
龙哥09271
校验提示文案
值友3570150159
校验提示文案
上帝也忙着数钱
校验提示文案
流沙馅饼
校验提示文案
Howisdoing
校验提示文案
cason800
请指教一下,谢谢!
校验提示文案
值友6204541424
校验提示文案
值友6204541424
校验提示文案
觅凤的梧桐
校验提示文案
明显没睡醒
校验提示文案
bsddt
校验提示文案
长着青春痘的青蛙
校验提示文案
samway
校验提示文案
宝剑
校验提示文案
雨夹雪
请问大神如何解决啊。。,,
校验提示文案
luc2014
校验提示文案
有点儿胖2004
等文件,没有ppd文件,请您详细指导一下呗。
校验提示文案
值友8394781585
我觉得是打印机驱动问题,但不会安装
校验提示文案
值友8754116133
重要提示1:
4. 停掉系统内置的CUPS服务,避免端口冲突,四行命令
缺少一个空格
2、这里还有一个大坑,就是olbat/cupsd的用户名密码,均为print (不是admin,pass等等>
3、在使用命令之前,先用系统自带假装添加运行,在高级----》文件夹里面,新建docker/airprint/config和airprint/avahi,两个文件夹。
4、安装成功之后。Win7/8/10使用http://你的IP:631/printers/打印机名称。比如:
http://你的IP:631/printers/usbprinter1
校验提示文案