低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二
上一篇文章写了怎么利用家里剩余生产力(NAS)实现低成本无线打印(移动打印),看到很多朋友留言反馈各种问题。实在抱歉,这里就不找各种借口了,借这篇文章略作解答,不尽之处望各位朋友海涵。
上一篇文章链接:
前题回顾:
由于驱动支持的原因,有一部分打印机没有办法利用Synology内置的CUPS驱动实现AirPrint。但是Synology系统上没有很好的办法自定义驱动安装打印机。
由于Docker镜像可定制性高,可以很方便的安装自定义驱动和软件,所以利用Synology系统的Docker容器,挂载NAS上的打印机,实现局域网打印机共享,和移动设备打印需求。尤其是iOS,由于系统原因,很多无线打印都是通过安装第三方软件来实现。这个使用体验和系统原生支持的AirPrint还是有一些不同的。
网友们反馈比较多的地方在于Docker容器的启动,和CUPS配置方面。这里列出了几个典型问题,略作说明:
1. 准备工作
1.1 这篇文档以群晖NAS为例,家里有其他NAS设备的,比如unRaid,FreeNAS等也是没有问题的。安装好Docker之后,开始玩耍。。。
1.2 打开系统的SSH服务,这一步非常重要,因为Docker容器的运行和后续排错都在ssh下进行,所以这一步算是必要步骤。
1.3 禁用Synology内置的CUPS,打开系统的Bonjour服务发现. 很多人忽略这一步,会直接导致后面的步骤劳而无功。提示,此命令需要root权限。
sudo synoservicecfg --hard-stop cupsd
sudo synoservicecfg --hard-stop cups-lpd
备注:请注意synoservicecfg和后面的两个杠中间有个空格,由于网页会莫名其妙吃掉某些空格,所以这里略坑。
另外为了防止系统重启之后,系统自带的CUPS抢占端口,可以在开机脚本里面加上这两个命令。
1.4 为Docker容器创建文件夹,比如我这里创建了Docker --> Airprint --> Avahi, Config,结构如图:
1.5 接下来就是展示网站强大吃空格能力的时候了,很多朋友在这一步直接放弃了,因为命令运行不起来:)。我当时也是一头雾水,明明自己机器上运行好好的命令,到了网友那里就不行了,仔细一看,空格和换行符都被吃了。。。
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管理页面了。
https://DSM的IP:631/
如果严格按照这个指引来操作,是不会遇到部分网友提到的无限登录循环。如果出现这个,那么说明你的机器内置CUPS服务没有关闭。另外请务必设置好默认纸张大小。
2. 常见问题解决
2.1安装自定义驱动
打印机驱动支持是个老大难的问题,因为硬件型号众多,各厂家支持力度不一,所以奉劝大家在购买的时候也多做考量。虽然家庭打印群体较小,但是鉴于家庭中移动设备占据主流,比如平板,一体机,手机等等其实打印需求反而会超过传统PC,移动打印的支持其实很重要。目前市面上自带Airprint的打印机不在少数,同时支持Android各种品牌手机的产品也有,但是如果你手里的老打印机还能发挥余热,这也未尝不是个好选择。废话这么多,那么怎么搞定驱动问题呢?
通常有几个选项:
2.1.1. 打印机官方驱动下载中心,如果有支持Linux的驱动程序,那么多半就是有希望的,比如HP,Brother。
这里以Brother HL-T4000DW为例, 可以这样安装:
ssh连接到群晖NAS, 用putty或者其他工具,然后执行:sudo docker exec -it airprint /bin/bash
进入到airprint容器里面,然后
wget https://brother-device.oss-cn-shanghai.aliyuncs.com/FAX2820/linux-brprinter-installer-2.2.1-1.gz
下载完成后: gunzip linux-brprinter-installer-2.2.1-1.gz
bash linux-brprinter-installer-2.2.1-1
然后按照向导安装完成即可
HP打印机,也有2中方式,第一种去官网下载:
解压后
第二种办法,直接在Docker Container里面安装:
用putty或者其他工具ssh连接到群晖NAS, 然后执行:sudo docker exec -it airprint /bin/bash
进入到airprint容器里面,然后执行
apt-get -y install hplip hplip-data
完成后重启一下airprint容器。然后愉快的玩耍吧。
2.1.2 手里有ppd文件,可以在CUPS添加打印机向导中指定,具体向导参考第一篇文章。
2.2 CUPS登录问题
如果用的是我这里介绍的Docker镜像,那么是不需要做什么调整的。如果用的是其他镜像,也许你需要调整CUPS的设置。常见的几个操作这里介绍一下:
2.1.2.1 启用WebInterface
用putty或者其他工具ssh连接到群晖NAS,然后执行:sudo docker exec -it airprint /bin/bash
进入到airprint容器里面,然后执行
cupsctl WebInterface=yes #开启Web管理
cupsctl --remote-admin --remote-any --share-printers #开启远程管理,允许共享打印机
cupsctl DefaultEncryption=Never #关闭默认加密
对于完全按照本文操作,但是CUPS登录不进去的情况下,一般是群晖本身的CUPS没有关闭,所以请参考准备工作里面的步骤。
关于登录账号密码:注意到开始的新建Docker容器的命令了吗?
-e "CUPS_USER_ADMIN"="admin"
-e "CUPS_USER_PASSWORD"="pass"
所以账号就是这里的admin,密码就是pass。当然你可以改成自己喜欢的。
2.2 安卓端打印
本方案自带Google Cloud Print。有些朋友可能有疑问,这玩意儿能用吗?事实上,GCP也是支持本地模式的,即局域网内安装了GCP插件的安卓手机是可以用的。关于google cloud print插件下载安装,可以在应用商店搜索云打印(谷歌)
使用截图:
2.3 Docker下载镜像失败/慢
2.4 打印机一定要通过USB接到群晖上吗?
不一定。假如你已经有一个网络打印机,但是不支持苹果/安卓打印,那么也是有办法加入CUPS的。具体操作提示:
2.4 网络模式采用bridge桥接时,设置端口631会提示与其他服务冲突
停掉系统自带的CUPS服务。
2.5 Windows下安装CUPS共享的打印机
CUPS中设置好打印机之后,点到打印机界面,复制打印机队列地址(就是如图依次点Printers, 找到相应的打印机,点击开之后,浏览器里面的地址):
然后在Windows上,开始菜单搜索print,找到添加打印机
一般情况下会自动发现可用的打印机。如果没有,点击我的打印机没有列出
填上上一步里面复制的打印机地址,安装好驱动就可以了。注意驱动不要装错了,一定严格按照品牌型号安装,并且设置好默认纸张大小,这一点非常重要。很多人前面的步骤都没问题,但是设置了错误的默认纸张,就会出现各种奇怪的问题。
后记
虽然群晖号称把打印机变无线打印,也号称支持Airprint和Google云打印,但是支持的型号非常有限。自带的CUPS也是阉割的面目全非。不过接下来有空闲的时候,我还是想研究一下有没有可能在群晖上的原生实现。下一篇文章见。
高配古天乐
校验提示文案
解毒药
校验提示文案
渔夫唱晚
校验提示文案
朱哲__
校验提示文案
puck
sudo synoservicecfg --hard-stop cups-lpd
备注:请注意synoservicecfg和后面的两个杠中间有个空格,由于网页会莫名其妙吃掉某些空格,所以这里略坑。
校验提示文案
值友7087899251
synoservicecfg --hard-disable cupsd
warn: The runkey of service [cupsd] and its dependency services have been set to "No"
不知道是什么意思,麻烦帮忙看一下
校验提示文案
mikecn
校验提示文案
非著名坐家
校验提示文案
高配古天乐
校验提示文案
值友6918821971
提示这个 怎么处理呀
校验提示文案
jamesbandjava
校验提示文案
Walker-J
校验提示文案
zhuhongchao
1. CUPS用bridge模式运行,能用admin登陆,我手动装了EPSON驱动,可以打印测试页。
2. 但是由于bridge模式,avahi无法运行,airprint找不到打印机。
3. 改用host模式,命令行方式建立DOCKER以后,admin账号无法登录,不知道用户名密码是啥,完全没法进入WEB页面,这咋办啊?
校验提示文案
mickeywaley
账号密码都是 print
USB接了打印机,识别不到怎么回事?
校验提示文案
我的昵称已被注册
去看看
校验提示文案
高配古天乐
校验提示文案
雨夹雪
请问大神如何解决啊。。
校验提示文案
值友4846687769
校验提示文案
wk9999
校验提示文案
西风剪雪
校验提示文案
licmsj
校验提示文案
鄂北渔夫
校验提示文案
值友3142274419
校验提示文案
值友9655986456
Web Interface is Disabled
The web interface is currently disabled. Run "cupsctl WebInterface=yes" to enable it.
校验提示文案
peopleou
校验提示文案
koko666666
校验提示文案
chantion
关于作者在“2.4 打印机一定要通过USB接到群晖上吗?”这一节不需这么麻烦,在添加打印机那一步时直接添加打印机的ip地址就行,或者在发现打印机里选择出现的网络打印机。
不要使用olbat/cupsd那个包,虽然可以安装,iPhone也能识别到,但是用iPhone打印时会出现自动打双份,打印机不自动进纸等bug,而楼主提供的那个映像包一切正常。
进管理页面出现无法登录的情况详见“晒晒 :修改容器裏面的cups配置,把DefaultAuthType改成 None,註釋掉Require開頭的行,然後重啓容器”
校验提示文案
我的车牌号6666
校验提示文案
值友5978083928
校验提示文案
davidquake
校验提示文案
cason800
很奇怪的问题
校验提示文案
值友1484581651
校验提示文案
随便的god
校验提示文案
哈哈小声笑
校验提示文案
东方月明
校验提示文案
值友2128476206
校验提示文案
值友2128476206
校验提示文案
Walker-J
校验提示文案
jamesbandjava
校验提示文案
Currently_Lewis
校验提示文案