通过群晖Docker给EPSON L301墨仓打印机装上无线Airprint
EPSON早期的墨仓式打印机在市场上有很大的销量,可能至今还在很多朋友家中服役中。本文记录了我在安装Airprint过程中的一些问题及解决方法,供想让EPSON老墨仓继续发挥余热的朋友们参考。
墨仓式打印机的打印头堵塞是个通病,这台服役七八年但一直黑色喷头有堵塞的L301打印机长期使用高质量打印模式才勉强能用。有点想扔掉买个新的并支持Airprint的打印机,但看看机器还有墨仓里的墨水废弃掉实在可惜。疫情期间小孩的作业打印量忽然增加,就决心趁着在家无聊的时间买个打印头自己更换。换上去终于喷头检查没有断线了,这台打印机还可以再用10年。既然已经复活了L301的打印头,那索性再帮它搞个Airprint吧。
家里有群晖,因为一直开着,用其挂打印机长期在线自然最合适。群晖里面有USB外接打印机支持,打印机设置里面也有Airprint选项,但是DSM里面没有任何L系列的驱动,官网也仅仅能查到L355曾经在DS216系列里面出现过。然后我也试过把L301打印机接到梅林固件的路由器上,华硕有打印驱动工具可以在PC上顺利使用,但在群晖里添加这个路由器上的网络打印机,还是因为没有驱动只好作罢。最后在张大妈这里搜索一下“Airprint”关键字,看了下面两位朋友写的3篇很有价值的文章,花了一个晚上终于搞好了。
我的安装过程主要参考这3篇文章,其中第3篇<第一台打印机,借助群晖让丐版打印机也能用手机打印>提供的EPSON驱动下载及升级LSB方法,对我也安装EPSON驱动特别有帮助,我就不重复说明一些细节过程,下面主要是记录我碰到的问题及解决方法,供遇到同样问题的朋友参考。
问题点
使用命令行还是容器向导创建容器
开始我也是参考第3篇文章用端口632建了Docker,装好了发现在容器-详情-终端机里面一直循环报错误。原因应该是这种非命令行方式新建容器过程中,无法在卷里面装载/dev,/var/run/dbus目录。我没有具体研究这两个目录的作用,但是错误信息看起来和其中一个目录有关。
另外考虑到631是CUPS的标准端口,我没有花时间去试验其他端口如632是否能在IOS设备上用系统打印功能直接输出,我尽量想避免因为非标准端口必须安装额外打印App。所以最终我使用了前2篇文章提供的命令行方式,并且用默认631端口建了容器。
命令行新建容器后无法访问CUPS Web控制界面
第一次用向导新建的容器没有问题。命令行新建的容器出现没法连接Web界面问题,也许因为我改了DSM的主机名,所以我把-e HOST_OS="Synology"这个环境变量从参数里面移除了,同时也此步骤移除了-e "TCP_PORT_631"="631",一番折腾后,最后可以工作的命令行参数如下。
如何进容器里升级LSB
第3篇文中的步骤7.1写的进入容器的步骤错误,作者其实在文首有追加修改更正了这个命令名错误,但是我已经一头扎进文中按部就班地执行命令,根本没有注意。我也是第一次使用容器,发现SSH执行错误,在Bing里面搜索如何进容器的方法才解决,这里花了一些时间。
原文进入Docker命令“docker run”错误,正确的是”docker exec“
我现在推荐的方法是直接用新建的容器名,如上面的“airprint“,直接执行sudo docker exec -it airprint /bin/bash,省去了docker ps查询容器id。新建的容器首先执行sudo apt-get update,然后sudo apt-get install lsb安装lsb。这个过程更加网速不同,安装需要大概20-30分钟左右。
EPSON L301驱动下载哪一个文件
爱普生国际官网的下载页里列出了多个驱动文件供下载,因为容器是ubuntu系统,.deb是Debian和ubuntu系统格式包,后面也是用对应的dpkg命令安装:sudo dpkg -i epson-inkjet-printer-201207w_1.0.0-1lsb3.2_amd64.deb
最后一个核心问题,如何解决群晖自带CUPS自动重启631端口
装好驱动后手机上打印了一张照片,一切很好,然后休息了一会儿,再次打印发现手机上报打印机脱机错误。然后我发现在DSM的任务计划里面执行下面两个停止系统CUPS的任务后,脱机错误就解决了,打印机马上又能正常工作。但是过一会儿,这个脱机问题又会出现,有时打印中的任务也因此会中断,纸张在打印机在突然停住。
synoservicectl --stop cups-lpd
synoservicectl --stop cupsd
我因此判断631端口被群晖系统自己的CUPS再次启用了,而和容器里的631端口冲突。在新建容器之前,实际上我不仅按照文章1和2停止了DSM系统的CUPS,还根据下面github项目里的提示把 /usr/share/init/cups-service-handler.conf 文件里面的语句注释掉避免再次启动DSM时系统CUPS服务又被自动启动。但似乎群晖还是有其他进程自动检查并再次启动CUPS。如大家在前面文章评论里面提到的,可以增加一个循环任务,定时每分钟地中止系统CUPS服务,但这看起来有点傻并带来一定的系统开销。
在bing上搜索有没有办法彻底禁止群晖CUPS服务无果,忽然灵机一动,我为什么不能把群晖自己的CUPS从631改到其他的,就像朋友们改容器里的CUPS到632一样。这样在SSH里面用vi或者vim查看文件,在DSM系统里(注意不是容器的ubuntu系统)执行sudo vi /etc/cups/cupsd.conf,进去后按i键到编辑模式,用#注释掉Listen *:631那行,增加Listen *:632。完成修改按ESC再冒号:wq保持退出。再次验证脱机问题解决了,也不用增加中止服务的循环任务了。甚至我又把上面github中说的 /usr/share/init/cups-service-handler.conf 文件注释掉的语句复原了。安装这个思路,我想有可能在新建容器前,我们把系统CUPS的631像这样改掉,也不用单独执行中止服务命令来避免631端口冲突了。我没有时间去验证,朋友们安装的时候可以考虑。
在Windows里安装打印机的一个小坑,在添加打印机时候开始按照前面文章说的https加密形式的打印机链接,但是一直提示登录用户名密码,用DSM用户名和新建CUPS时候的admin/pass都不行,然后我试了一下http的,居然成功了。所以大家遇到这个问题,可以把hppts改到http试一下。当然我先改了容器里面的/etc/cups/cupsd.conf配置(那些Allow from all)没用再试验的http,没有验证是否仅仅https引起。
总结
容器里面运行CUPS的方式,让这些老的USB端口的打印机具有的无线打印的功能,墨仓式喷墨打印机从用墨成本上看真的很低了(随机墨水可以支持一个小孩从幼儿园上完小学),有了Airprint支持,这些打印机可被再榨干几年。这个CUPS方法同样适用于其他Linux系统(如树莓派),EPSON其他打印机驱动安装方法也类似。
freeya110
校验提示文案
felix9332
校验提示文案
值友5855539994
用putty登录上去,都提升命令没找到
校验提示文案
扬没吐气
校验提示文案
值友1314764857
校验提示文案
有点儿胖2004
校验提示文案
很诧异
校验提示文案
无闻的
校验提示文案
selajones
校验提示文案
我真不会PHP
校验提示文案
AndroidOL
校验提示文案
新28
校验提示文案
值友6125074914
校验提示文案
值友7455035573
校验提示文案
inoooo
校验提示文案
我有一个逗比叫我
校验提示文案
值友5824167525
校验提示文案
cd532
校验提示文案
晒晒
校验提示文案
饮涧癫猿
校验提示文案
佳微哈
校验提示文案
石子路口
校验提示文案
饮涧癫猿
校验提示文案
selajones
校验提示文案
无闻的
校验提示文案
晒晒
校验提示文案
很诧异
校验提示文案
cd532
校验提示文案
有点儿胖2004
校验提示文案
值友1314764857
校验提示文案
我真不会PHP
校验提示文案
值友5824167525
校验提示文案
我有一个逗比叫我
校验提示文案
inoooo
校验提示文案
AndroidOL
校验提示文案
值友7455035573
校验提示文案
值友6125074914
校验提示文案
新28
校验提示文案
freeya110
校验提示文案
扬没吐气
校验提示文案