CUPS是一个能够让传统的、简易的、带usb接口的打印机变成可以通过网络直接打印包括苹果的airprint的服务
本来N1的openwrt固件就集成了USB打印机,已经能实现通过内网直接打印,但是手机上的文件每次都需要发送到电脑才可以完成打印,所以有没有办法能够实现通过苹果自带的airprint直接打印呢?
答案是肯定的,就是CUPS!!
因为N1本身就运行着Docker CE,所以我更倾向于docker版本的cups。经过一番探索,最终实现了目标,以下记录搭建过程。
- 把打印机的usb接口和N1相连接
- 拉取镜像
docker pull Tigerj/cups-airprint
- 创建容器
docker run \
-d \
--name=cups \
--net=host \
--privileged=true \
--restart=always \
--device /dev/bus/usb \
--device /dev/usb \
-v /var/run/dbus:/var/run/dbus \
-e CUPSADMIN="admin" \
-e CUPSPASSWORD="password" \
tigerj/cups-airprint
- 访问
http://ip:631
账号密码分别是admin/password
- 添加打印机:
Administration
——Add Printesr
一般这个时候直接就能看到你的打印机了,接着勾选Share This Printer
,在Make
选择你的打印机品牌,在Model
处选择打印机的驱动,最后在General
处选择要更改的基本设置即可
如果window电脑要连接这台打印机,需要在cups网页中点击Printers
,选中你的打印机,复制该网页的网址,然后把https改成http
补充创建容器命令解析
docker run \
-d \
--name=cups \
--net=host \
--privileged=true \ //这一句在官方搭建教程中是没有,这一句意义是让容器获得真正的root权限,也是为什么我一直搭建失败的原因
--restart=always \
--device /dev/bus/usb \ //这一句需要根据实际设备usb路径而修改
--device /dev/usb \ //同上,作者只是多写了一个常用的usb路径,可删除
-v /var/run/dbus:/var/run/dbus \
-e CUPSADMIN="admin" \ //cups网页的用户名,可自行修改
-e CUPSPASSWORD="password" \ //cups网页的密码,可自行修改
tigerj/cups-airprint
如果是使用docker creat
命令(镜像作者更推荐)创建容器,记得再补充一句docker start cups
才会启动服务
有了CUPS服务后,就不再需要N1自带的usb打印机以及打印机服务器了
Comments | 13 条评论
博主 皇阳文隐
为什么按照以上步骤设置后,iPhone在隔空打印里搜不到共享打印机呢?
博主 香蕉弟弟
@皇阳文隐 不是特别清楚,你的驱动那些都对吗?得你自己打印机型号的驱动才行
博主 皇阳文隐
@香蕉弟弟 打印机型号hp laserjet P1008,驱动对的,网页和PC都能打印,就是iPhone 搜不到
博主 香蕉弟弟
@皇阳文隐 你iPhone连着和打印机同一个网了吗?电脑也能搜的到吗?
博主 皇阳文隐
@香蕉弟弟 是同一个网络,电脑能搜到打印机,而且能正常添加并打印
博主 香蕉弟弟
有点奇怪,我建议你试试换一个苹果设备,iPad什么的试试
博主 皇阳文隐
@香蕉弟弟 换了iPad也搜不到,真奇怪。除了提供的那些Docker命令外,N1里需要有什么设置吗?另外Docker命令里有没有要根据实际情况调整设置的?
博主 香蕉弟弟
@皇阳文隐 我看了一下,没有什么特别的啊,我的N1也没有其他额外设置,Docker命令基本每一行都有注释的。
博主 香蕉弟弟
@皇阳文隐 我知道具体原因了。我在我的笔记里找到了记录, 下面这一句一定要一模一样,否则无法实现隔空打印。
-v /var/run/dbus:/var/run/dbus
你修改一下试试吧
博主 皇阳文隐
@香蕉弟弟 这个环境变量加过了,可iPhone和iPad还是搜不到隔空打印机,网页测试页和电脑都能打印……难道N1需要开启无线网卡吗?
博主 香蕉弟弟
@皇阳文隐 应该不用吧,主要是我已经没有这样用了,换了一台新的,自带隔空打印,所以可能没办法看看当初我的设置
博主 s
感谢作者,但是到打印的时候,显示错误“filter failed”,打印停止。搜了很多都没解决,哎。我是N1 docker 安装的cups
博主 香蕉弟弟
@s 我也是docker阿,但是你的错误我没有遇到过