APP下载 微博 微信

Hao4K影音


[群晖] 教你怎么在群晖上通过Docker容器实现Airprint 实现低成本无线打印

[复制链接]

发表于 2020年02月27日 20:21 196958 3 来源:媒体存储> 群晖 回帖奖励 |正序浏览 |

WoDeN 帖主

2020-2-27 20:21

教你怎么在群晖上通过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。
这里以BrotherHL-T4000DW为例, 可以这样安装:
ssh连接到群晖NAS, 用putty或者其他工具,然后执行:sudo docker exec -it airprint /bin/bash
进入到airprint容器里面,然后
wgethttps://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 开启远程管理,允许共享打印机
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也是阉割的面目全非。不过接下来有空闲的时候,我还是想研究一下有没有可能在群晖上的原生实现。下一篇文章见。
回复

使用道具 举报

全部回复3

mjiang99 4

2020-3-16 20:04

本帖最后由 mjiang99 于 2020-3-17 10:47 编辑

非常感谢楼主。我是用网上另外一个评论的"olbat/cupsd"的Dockers, 成功安装并且完美使用HP CP 1025不带网络的laserject打印机。


这是我的单行完整命令
docker run -d --name=airprint --net="host" --privileged=true -e "CUPS_USER_ADMIN"="print" -e "CUPS_USER_PASSWORD"="print" -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 "olbat/cupsd"




重要提示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

5、在NAS的计划任务里面添加,启动时的触发命令:

synoservicectl --stop cups-lpd
synoservicectl --stop cupsd

docker stop airprint
docker start airprint

6、在NAS的计划任务里面添加,计划,每分钟 执行
synoservicectl --stop cups-lpd
synoservicectl --stop cupsd

第5,6步可以解决以下问题:
提示 The web interface is currently disabled. Run "cupsctl WebInterface=yes" to enable it.


回复 支持 反对

使用道具 举报

leonardo86 3

2020-3-9 20:41

你好,麻烦问一下,我在“用putty或者其他工具ssh连接到群晖NAS, 然后执行:sudo docker exec -it airprint /bin/bash  
进入到airprint容器里面” 时,提示 sudo: docker: command not found,这是怎么回事呢?
回复 支持 反对

使用道具 举报

alexdean 2

2020-3-2 19:52

那段代码执行失败啊,显示"docker run" requires at least 1 argument.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

返回列表 本版积分规则



绑定微信 + 关注公众号,第一时间获得消息通知!
:
新手玩家
:
介绍未填写

主题

帖子

积分7

图文推荐

  • 家庭NAS+HTPC组建及注意事项(一)(内网穿

    原创篇一:家庭NAS+HTPC组建及注意事项(一)(内

  • 搭建私有云—华芸AS6404T NAS+华硕 AC68U体

    帮朋友搭建私有云—华芸AS6404T NAS+华硕 AC68U体

  • 小量的影视、音频存储方案之我见

    最近,一块使用了近十年的4T移动硬盘挂了(曾被摔

  • 科普:什么是硬盘MTBF?那MTTF、MTTD、MTTR

    买固态硬盘,我们会比较关注颗粒寿命,机械硬盘虽

  • 入了极空间,从黑群晖到极空间谈谈区别

    之前用过黑群晖,现在改了极空间 1、为什么从

  • 机械硬盘该怎么选?教你最全机械硬盘选购指

    机械硬盘该怎么选?教你最全机械硬盘选购指南

  • 极空间挂载阿里云、115、百度、夸克等20个

    理论上使用如下教实现程极空间可以挂载阿里云网盘

  • 红米AC2100刷Padavan固件超全详细教程

    刷机全过程图解 准备工作这部分,网上教程几乎都

  • NAS都有哪些品牌?带你了解几大NAS名牌介绍

    NAS都有哪些品牌?带你了解几大NAS名牌介绍 前

  • 群辉加USB3.0千兆网卡成功,教程分享

    具体安装替换参考此贴https://www.hao4k.cn/threa

  • Hao4K影音app客户端下载