低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

2020-02-27 20:21:42 56点赞 552收藏 123评论

上一篇文章写了怎么利用家里剩余生产力(NAS)实现低成本无线打印(移动打印),看到很多朋友留言反馈各种问题。实在抱歉,这里就不找各种借口了,借这篇文章略作解答,不尽之处望各位朋友海涵。

上一篇文章链接:

低成本的无线打印:群晖上通过Docker容器实现Airprint小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励。2020年新人计划正在进行,点击查看活动详情群晖NAS得益于高质量的软件设计和方便的使用体验深受家庭用户喜爱。随着使用场景的扩展,各种功能的发掘也随着需求的增长不断出现。打印虽然是个古老的话题了,但是对于有打印需求的用户来说我的昵称已被注册| 91 评论138 收藏1k查看详情

前题回顾:

由于驱动支持的原因,有一部分打印机没有办法利用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下进行,所以这一步算是必要步骤。

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

1.3 禁用Synology内置的CUPS打开系统的Bonjour服务发现. 很多人忽略这一步,会直接导致后面的步骤劳而无功。提示,此命令需要root权限。
sudo synoservicecfg --hard-stop cupsd
sudo synoservicecfg --hard-stop cups-lpd
备注:请注意synoservicecfg和后面的两个杠中间有个空格,由于网页会莫名其妙吃掉某些空格,所以这里略坑。

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

另外为了防止系统重启之后,系统自带的CUPS抢占端口,可以在开机脚本里面加上这两个命令。

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

1.4 为Docker容器创建文件夹,比如我这里创建了Docker --> Airprint --> Avahi, Config,结构如图:

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

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/

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

如果严格按照这个指引来操作,是不会遇到部分网友提到的无限登录循环。如果出现这个,那么说明你的机器内置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
然后按照向导安装完成即可

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

HP打印机,也有2中方式,第一种去官网下载:
解压后

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

第二种办法,直接在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插件下载安装,可以在应用商店搜索云打印(谷歌

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

使用截图:

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

2.3 Docker下载镜像失败/慢

参考这里

2.4 打印机一定要通过USB接到群晖上吗?

不一定。假如你已经有一个网络打印机,但是不支持苹果/安卓打印,那么也是有办法加入CUPS的。具体操作提示:

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

2.4 网络模式采用bridge桥接时,设置端口631会提示与其他服务冲突

停掉系统自带的CUPS服务。

2.5 Windows下安装CUPS共享的打印机

CUPS中设置好打印机之后,点到打印机界面,复制打印机队列地址(就是如图依次点Printers, 找到相应的打印机,点击开之后,浏览器里面的地址):

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

然后在Windows上,开始菜单搜索print,找到添加打印机

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

一般情况下会自动发现可用的打印机。如果没有,点击我的打印机没有列出

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

低成本的无线打印:群晖上通过Docker容器实现Airprint - 之二

填上上一步里面复制的打印机地址,安装好驱动就可以了。注意驱动不要装错了,一定严格按照品牌型号安装,并且设置好默认纸张大小,这一点非常重要。很多人前面的步骤都没问题,但是设置了错误的默认纸张,就会出现各种奇怪的问题。

后记

虽然群晖号称把打印机变无线打印,也号称支持Airprint和Google云打印,但是支持的型号非常有限。自带的CUPS也是阉割的面目全非。不过接下来有空闲的时候,我还是想研究一下有没有可能在群晖上的原生实现。下一篇文章见。

展开 收起
123评论

  • 精彩
  • 最新
  • 请问楼主,群晖直接共享打印机是独占的,这个模式的打印机是不是独占的,打印完会自动断开打印机吗?

    校验提示文案

    提交
    不是独占的,是共享的

    校验提示文案

    提交
    收起所有回复
  • 想问问大佬我是EPSON的老机器,有希望吗? [口水] [口水]

    校验提示文案

    提交
    具体型号?

    校验提示文案

    提交
    折腾过,EPSON L353,官网只有X86平台的Linux驱动

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 楼主这篇文章好,提供了一个非常好的思路。按这个思路,应该可以解决很多打印机驱动的问题。俺自己是在群晖VMM上安装了一个linux虚拟机,在虚拟机中安装打印机需要的驱动,解决打印机无线打印的问题。运行了一段时间,非常稳定。

    校验提示文案

    提交
    虚拟机也是好方案,只是对系统的压力比较大。如果内存吃紧,docker可能就比较有优势了

    校验提示文案

    提交
    收起所有回复
  • 我在启动docker的时候,日志里面有两个报错。第一个是 “ * Starting Avahi mDNS/DNS-SD Daemon avahi-daemon,fail”,然后是“Failed to connect to CUPS server localhost:631 because 1282 Transport endpoint is not connected”,然后可能导致了我用设置好的admin和pass无法登陆后台,不知道up主能否帮忙一起解决下。。。

    校验提示文案

    提交
    这个报错其实不影响,不能登录的原因是NAS上自带的CUPS抢占了端口。可以参照文章里面的几个命令。也可以在NAS的控制面板,任务计划里面加个任务,比如每1分钟执行一次:
    synoservice --hard-disable cupsd
    synoservice --hard-disable cups-lpd
    synoservicecfg --hard-disable cupsd
    synoservicecfg --hard-disable cups-lpd
    synoservicectl --stop cups-lpd
    synoservicectl --stop cupsd

    校验提示文案

    提交
    好的我试试看,多谢

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 请问这些在哪里实现?sudo synoservicecfg --hard-stop cupsd
    sudo synoservicecfg --hard-stop cups-lpd
    备注:请注意synoservicecfg和后面的两个杠中间有个空格,由于网页会莫名其妙吃掉某些空格,所以这里略坑。

    校验提示文案

    提交
    ssh连接到NAS之后执行。也可以通过添加计划任务。我是加了任务计划,每分钟执行一次:
    synoservice --hard-disable cupsd
    synoservice --hard-disable cups-lpd
    synoservicecfg --hard-disable cupsd
    synoservicecfg --hard-disable cups-lpd
    synoservicectl --stop cups-lpd
    synoservicectl --stop cupsd

    校验提示文案

    提交
    收起所有回复
  • 你好啊,有问题咨询一下你,登陆cups还是无限循环,按你步骤先停用自带cups,但是提示
    synoservicecfg --hard-disable cupsd
    warn: The runkey of service [cupsd] and its dependency services have been set to "No"
    不知道是什么意思,麻烦帮忙看一下
    [领券防身]

    校验提示文案

    提交
    synoservice --hard-disable cupsd
    synoservice --hard-disable cups-lpd
    synoservicectl --stop cupsd
    synoservicectl --stop cups-lpd
    synoservicecfg --hard-disable cupsd
    synoservicecfg --hard-disable cups-lpd 这几个命令都执行一遍,然后重启一下容器

    校验提示文案

    提交
    还是不行啦,重启了,登陆还是循环

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 已经支持无线打印但不能airprint的不知道是不是适用?

    校验提示文案

    提交
    可以,紫薯补丁

    校验提示文案

    提交
    然而登陆不了。。

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 整个树莓派直接usb接口中转简单点吧 群晖功耗不如树莓派 不知道能否支持airprint了

    校验提示文案

    提交
    功耗这一块也还好,Docker本身并不会明显增加NAS的功耗。我都是设置了定时开关机,上班时间关机,下班之前自动开机

    校验提示文案

    提交
    收起所有回复
  • 这个打印机还是独占的吗?有一台电脑加上了,其他电脑再加提示“Windows无法连接打印机。打印处理器不存在”

    校验提示文案

    提交
    不是独占的,我家里有2台笔记本同时连接打印正常使用

    校验提示文案

    提交
    我弄好了,应该是驱动的问题,但是扫描仪不能用了,在官方Linux驱动里面找的PDD,只有打印机,没有扫描仪,群晖的多功能事物机可以用扫描仪,群晖的是虚拟usb模式,独占

    校验提示文案

    提交
    收起所有回复
  • docker: invalid reference format: repository name must be lowercase.
    提示这个 怎么处理呀

    校验提示文案

    提交
    把命令里面的大写字母都换成小写

    校验提示文案

    提交
    方便联系吗,目前用你做的容器还是无法连接

    校验提示文案

    提交
    收起所有回复
  • 大佬,我想问一下,这个可以远程在浏览器里面添加打印任务不?家里老人不会用这些东西,DDNS已经设置好,但是苦于没有好的打印管理器(能够添加doc、JPG打印的)

    校验提示文案

    提交
    理论上是可以的,设置好端口映射可以实现

    校验提示文案

    提交
    收起所有回复
  • 怎么切换纸张大小?直接设置一个A4需要打印A5的时候怎么办

    校验提示文案

    提交
    打印的时候可以选择的

    校验提示文案

    提交
    收起所有回复
  • 求救,我现在的情况是:
    1. CUPS用bridge模式运行,能用admin登陆,我手动装了EPSON驱动,可以打印测试页。
    2. 但是由于bridge模式,avahi无法运行,airprint找不到打印机。
    3. 改用host模式,命令行方式建立DOCKER以后,admin账号无法登录,不知道用户名密码是啥,完全没法进入WEB页面,这咋办啊?

    校验提示文案

    提交
    我也是这个问题,能打印测试页,没法搜到打印机

    校验提示文案

    提交
    收起所有回复
  • 去看看 这个才是最新2.3.1的 驱动全
    账号密码都是 print
    USB接了打印机,识别不到怎么回事?

    校验提示文案

    提交
    谢谢,我下载了olba的cups,驱动果然够全!(你连接的是群辉哪个设备?外设里看不到吗)

    校验提示文案

    提交
    老哥 链接里的docker命令怎么运行不起来啊

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 最近有点时间做了一个Docker镜像,自带CUPS 2.2.7,支持Airprint和谷歌云打印(本地模式)。可以在群晖的Docker里面“注册表”市场中搜索cups-google-airprint。项目地址:
    去看看

    校验提示文案

    提交
    支持!但安装好之后,容器一直重启。

    校验提示文案

    提交
    @我的昵称已被注册 你好!运行了你这个,ip:631可以访问,但是用户名密码不晓得?进不去啊 [高兴]

    校验提示文案

    提交
    收起所有回复
  • 弄好了,但是只能打印扫描仪用不了啊

    校验提示文案

    提交
  • 大佬,按照你的方法弄好了,但是在打印机状态那里显示:Idle - "File "/usr/lib/cups/filter/brother_lpdwrapper_DCP1608" not available: No such file or directory"
    请问大神如何解决啊。。

    校验提示文案

    提交
  • 如何实现打印机外网唤醒

    校验提示文案

    提交
  • 多么古老的开源软件,

    校验提示文案

    提交
  • 大佬给指导一下通过nas远程打印吧,摸索很久没实现

    校验提示文案

    提交
    vpn拨号连接再打印

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
目录
552
扫一下,分享更方便,购买更轻松