11月22日新增:如不需要无线打印的功能,只有电脑连接NAS进行打印的需求,那么这个方法可能更适合你:群晖下virtualhere实现无时间限制的方法
前言
我的打印机是佳能MP288,通过USB连接群晖,虽然可以无线打印,但在通过群晖内置的打印功能打印的时候很慢,经过折腾发现是群晖误将传统打印机认为是网络打印机了,出现了spooling假脱机的现象(此现象在OpenWrt上也出现了)。后发现群晖内置的是阉割版CUPS,并没有给WebInterface。因此无法进行更详细的配置,所以这个教程的大致思路是将群晖内置的CUPS停用,并通过共享usb介质利用docker中的完整版CUPS解决上述的问题。如果你的打印机在群晖上工作很出色,那么请忽略此教程。
由于群晖是基于Linux系统的,CUPS是Apple开发的开源项目,因此此教程理论上支持Unix和类Unix操作系统(如果性能够的话,OpenWrt理论也能用)安装打印机并实现无线打印功能。具体请自行测试。
过程
-
通过套件中心下载Docker,这是一个潘多拉魔盒。
-
创建共享文件夹docker,创建目录如下述目录树所示。
-
打开ssh,使用
sudo -i
-
执行下述命令,禁用群晖自带CUPS(如无自带CUPS,可以跳过)synoservicecfg--hard-stop cupsd synoservicecfg --hard-stop cups-lpd synoservicectl --stop cupsd synoservicectl --stop cups-lpd
并将上面的命令添加到计划任务,让它开机自动运行。【2021年7月10日更新】
上述方法比较繁琐,可以直接修改
/etc/cups/cupsd.conf
将监听端口从631修改到其他不需要用到的端口,比如632,让它不要干扰我们Docker里面的CUPS工作,重启即可。 -
执行下述命令,下载并启动容器。
其中CUPS_USER_ADMIN的值设置成登陆的账户名,
CUPS_USER_PASSWORD是登陆的密码。
账户名和密码请设置成得比较复杂,或者在设置完成后关闭WebInterface避免被恶意侵入。
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"
-
打开
http://NAS的IP地址:631
使用设置的账号密码登陆。(如果和我一样遇到了循环登陆的问题,则将
docker/config/cups/cupsd.conf
文件备份并将文件内的WebInterface
修改为On
,DefaultAuthType
设置成None
,并将文件内任何Request开头的行注释或删除,重启容器即可无需密码登入。但请记住,这样操作会给系统带来巨大风险,请在配置完成后及时替换回原来的文件并重启容器,或将DefaultAuthType
设置为Basic
并将WebInterface
置为Off并重启容器。) -
USB连接打印机,并选中Administration->AddPrinter。
-
选择Local Printers上连接的打印机,Continue。
-
勾选Share This Printer,向网络共享打印机(此是无线打印的关键),Continue。
-
选择相应的驱动程序。本文使用的CUPS镜像已经内置大多数打印机驱动,一般是能搜到的。下图是macOS下的CUPS,只安装了这一个驱动。Add Printer。
-
大功告成。测试无线打印。如先前打印速度慢,可以找一张图片试试,是不是变快了。
-
为了安全起见,请关闭WebInterface。将
docker/config/cups/cupsd.conf
文件备份并将文件内的WebInterface
修改为Off
。如先前修改过无密码登陆,请将备份的文件替换回去。 -
重启容器。
写在后面
其实以前装过的Linux系统中,除了Deepin还是Ubuntu(记不清了),貌似都有打印慢的问题,而且没有无线打印。貌似内置的还是CUPS,理论上也可通过上述教程选择性修改系统上部分配置解决。另外Docker镜像也是一个不错的解决方案。