家里有台玩客云一直吃灰,又有一台经典的惠普LaserJet 1020 Plus打印机,过去一直插在电脑上当本地打印机用。后来换了笔记本,每次打印都要重新插USB线,手机和平板根本没法打。干脆把玩客云改造成打印机服务器,让这台老打印机变成局域网里的共享设备。这个方案我跑了快半年,非常稳定,写出来给手里同样有这两样设备的朋友做个参考。
整个思路并不复杂:玩客云刷入Linux系统,装上CUPS打印服务,通过USB连接惠普LaserJet 1020 Plus,再通过局域网把打印服务共享出去。之后Windows电脑、Mac、iPhone、安卓手机都可以直接用IP地址或局域网协议打印,不用再插线,也不用在每台设备上装那种老式USB驱动。本文适合有一定刷机基础、愿意折腾但不想买几百块钱打印服务器的朋友。
1. 为什么是"玩客云 + 1020 Plus"这对组合
1.1 闲置盒子变废为宝
玩客云本质是一台小型ARM盒子,原厂系统是给下载和NAS用的。但这台设备的硬件能力被浪费得很厉害,刷成Linux之后它就是一台低功耗服务器,常年开机不超过几瓦,非常适合做这种7x24小时待命的打印服务节点。
我最初也想过直接买市面上的打印服务器盒子,但那些产品对惠普LaserJet 1020 Plus的支持一直不太友好。1020 Plus是典型的host-based打印机,打印数据主要依靠主机端的驱动程序转换成特定格式,再交给打印机执行。很多打印服务器自带的是通用驱动,对这类打印机的兼容性不稳定,刷完固件后经常出现打印乱码、识别不到墨盒、只能打半页等问题。
玩客云刷Linux后,系统里跑的是完整的CUPS,可以加载和桌面Linux几乎一致的开源打印机驱动。只要电脑上能用Linux驱动解决的打印机,这台盒子基本都能扛下来,兼容性比那些封闭式打印服务器强得多。
1.2 打印服务器方案横向对比
我在动手之前认真比较了几种方案,最终才确定用玩客云。
第一类是路由器USB打印共享,很多路由器都带USB口,官网上说能支持打印机共享。但老路由器的固件支持列表很有限,惠普1020 Plus这种不标准的打印机经常识别出来但无法正常打印,只有一个光秃秃的USB设备节点,连驱动格式都没法处理。新路由器偶尔能支持,可设置界面也偏黑盒,出了问题很难排查。
第二类是旧电脑当打印服务器,功耗高、占地方,还会经常被家里人当普通电脑乱动,稳定性反倒不如小盒子。我用一台旧笔记本电脑试过,风扇噪音和待机功耗让人无法接受。
第三类就是买成品打印服务器,一百到三百不等。先不说价钱,光是兼容性反馈就让人心里没底。很多用户反馈惠普老激光机在成品打印服务器上偶发掉线,需要断电重启盒子才能恢复,这是我最不能接受的一点。
玩客云方案的优势在于:成本几乎是零(硬件本来就闲置),系统完全可控,CUPS日志能看到每一步的打印过程,驱动更新也方便,即使将来换打印机,只要更换CUPS驱动就行,不需要重新买硬件。
1.3 这套方案适合谁
如果你满足下面几个条件,这套方案很适合你:
- 手头正好有闲置的玩客云设备,不想再花额外成本;
- 还在用惠普LaserJet 1020 Plus或类似的老式USB打印机;
- 家里或办公室有多台电脑、多部手机,需要局域网共享打印;
- 愿意花半小时刷机装系统,并且有一点点Linux操作基础。
如果你完全没接触过Linux,也不用太担心。下面每个步骤我都会解释来龙去脉,照着做就能跑起来。真正花时间的地方不在于刷机,而在于打印机驱动匹配那一步,我会在后面的章节里重点讲。
2. 刷机与网络配置:打印服务器的基础环境
2.1 刷入Linux系统
玩客云原厂系统不适合直接跑CUPS,它是基于下载器定制的Android系统,没有完整的打印机后台服务,包管理器也不好用。所以要先把系统换成Armbian这类Linux发行版。
刷机过程大致分为三步:准备一个U盘,把Armbian镜像写入U盘,然后通过短接或U盘启动进入Linux,最后把系统写入盒子的内置存储。
我用的方式是U盘启动法:把镜像写入U盘后,按住设备上的某个触点,再插电开机,让盒子先进入刷机模式。具体短接触点因不同批次主板略有差异,建议根据自己手头的机器版本搜索对应教程,这一步不展开太多。
重点说一下版本选择。Armbian镜像分为老内核和新内核,打印服务器不需要追求最新,稳定优先。我试过内核版本比较新的分支,USB打印机偶尔出现无法唤醒的问题;换回老内核版本后,打印异常消失。如果你遇到USB设备识别不稳定,第一反应不要怀疑打印机,先换一个内核风格的Armbian固件试试。
2.2 固定IP与基础配置
刷完系统后,第一次进入系统建议直接用网线连接路由器,然后用SSH登录。玩客云只有一个千兆网口,稳定性和速度都很理想。Wi-Fi我不是很推荐,原因在后面会说。
登录后的第一件事是修改root密码,然后配置固定IP。打印机服务器必须有固定IP,否则电脑里保存的打印机地址一旦发生变化,所有客户端都会失联。
固定IP有两种方法:一种是在路由器后台给玩客云的MAC地址绑定固定IP,另一种是在系统里直接改配置文件。我习惯双保险,路由器绑定一个固定地址,系统内也设置为静态IP。配置静态IP时要注意正确的网关和DNS,如果配错了,局域网访问没问题,但后续安装软件包时可能无法解析软件源。
另外建议顺手开启SSH密钥登录,避免长期使用密码登录。玩客云这类设备如果暴露在公网,用默认密码很危险,但如果你只在家庭局域网使用,风险相对可控,不过改掉默认密码仍然是最基本的操作。
2.3 安装CUPS依赖
在玩客云上运行的是精简版Linux,很多桌面环境组件都没有。打印服务只需要命令行层面的CUPS服务,不需要完整的桌面界面,所以安装包的体积并不大。
系统进入后先执行一遍系统更新,等软件源和软件包列表变新后,再安装CUPS。Debian系的Armbian安装命令是:
apt update && apt upgrade -y apt install cups printer-driver-foo2zjs -y这里安装printer-driver-foo2zjs是因为惠普LaserJet 1020 Plus在Linux下最常用的开源驱动就是foo2zjs系列。如果你看到系统提示需要安装额外的固件,记得一并装上,1020 Plus需要从驱动固件包中加载打印机固件才能正常工作。
安装完CUPS后不要急着操作Web界面,先确认服务已经启动:
systemctl status cups如果状态是active (running),说明基础环境已经就绪。接下来要让CUPS监听局域网访问,默认下它只监听本机访问,需要改一下配置文件。
3. 接上打印机:识别与驱动匹配是最大关卡
3.1 物理连接与USB识别
把惠普LaserJet 1020 Plus的USB线从电脑上拔下来,插到玩客云的USB口上。这个时候不要开打印机电源,有些激光机在上电时没有数据请求会直接进入待机模式,反而让系统识别不到设备,我习惯先让盒子系统启动完成,再接打印机并打开电源。
在终端里执行:
lsusb正常情况下会看到HP 1020相关条目。如果看不到,问题基本在USB线或内核驱动上,可以先换一根线试试,排除线材供电或数据线损伤的情况。
注意,1020 Plus打印机本身有独立的电源适配器,USB口只传输数据,并不依赖玩客云供电。所以不用担心打印时USB口供电不足的问题,但插线时尽量插在玩客云靠近电源输入的那个USB口上,实测里那个口的信号质量更稳。
再执行:
dmesg | grep usb确认系统有没有出现USB printer相关提示。如果你看到类似"usb 1-1: new full-speed USB device"之类的信息,说明物理链路已经通了。接下来才进入最关键的驱动环节。
3.2 选择合适的驱动程序
惠普LaserJet 1020 Plus是一台host-based打印机,它与普通PCL打印机最大的区别在于:打印机本身不负责把文档渲染成图像,而是依赖驱动在主机端把打印内容转换成特定格式。因此在Linux里必须加载专用驱动。
我在Debian系Armbian上使用foo2zjs驱动。安装完printer-driver-foo2zjs包后,旧版内核可能会自动加载固件,新版则可能需要手动放入固件文件。如果打印机一直提示红灯闪,或者打印出来全是乱码,通常就是固件没加载成功。
一个比较容易踩的坑是:CUPS网页界面里列出的驱动名称是"HP LaserJet 1020",而不是"HP LaserJet 1020 Plus",别以为选错了。1020 Plus使用的是和1020相同的打印引擎,驱动通用。选择"HP LaserJet 1020 Foomatic/foo2zjs"这类驱动即可。
如果系统里能看到"HP LaserJet 1020 Plus hplip"选项,我建议不要优先选HPLIP。HPLIP对1020系列的支持需要额外安装闭源插件,而且在ARM盒子上插件经常装不上,排查起来很麻烦。foo2zjs一条命令搞定,是社区里验证次数最多的方案。
3.3 在CUPS中创建打印机实例
驱动准备好后,打开浏览器输入:
http://玩客云IP:631这是CUPS的Web管理界面。第一次可能需要用管理员账号登录,直接用系统root和密码登录即可。
添加打印机的按钮一般叫"Administration - Add Printer"。点击后会让你选择连接类型,选择"USB"设备,后面对话框里会看到类似"HP LaserJet 1020"的设备名。选上后进入驱动选择界面,从列表里找"HP LaserJet 1020 Foomatic/foo2zjs"。
名称填一个易记的名字,比如hplj1020。这个名字就是客户端访问时的打印机名称,不建议包含空格和中文字符,因为某些Windows客户端的打印协议对空格处理不友好,后续共享时容易出现莫名其妙的错误。
设置完成前,CUPS会问是否共享打印机,务必勾选"Share This Printer"。这一步很多人会漏掉,导致局域网其他电脑找不到打印机。
3.4 第一次测试打印
添加完成后,先到CUPS界面点击"Maintenance"里Print Test Page打印测试页。如果一切正常,打印机应该会马上出纸。如果卡在原地,先看CUPS的日志:
tail -f /var/log/cups/error_log绝大多数问题是驱动选择错误,或者固件没有加载。日志里出现ABORTING或"filter failed"时,基本可以确定是驱动问题,重新配置打印机即可。
4. Windows、Mac、iPhone共用一台打印机的三种姿势
4.1 Windows电脑用IP地址添加
Windows系统添加网络打印机最直接的方式是使用IPP协议。以Windows 10/11为例,在"设置 - 蓝牙和其他设备 - 打印机和扫描仪"里选择"添加打印机",当它搜索不到设备时,选择"我需要的打印机不在列表中",然后选择"使用TCP/IP地址或主机名添加打印机"。
这里的地址格式需要特别注意,如果直接填玩客云IP可能识别不出来,正确做法是在下拉框里选择"IPP",然后在地址栏填写:
http://玩客云IP:631/printers/hplj1020后面的hplj1020就是之前在CUPS里设置的打印机名称。Windows会尝试自动匹配驱动,如果找不到,就手动选择通用驱动,或者先在本机装上惠普1020的Windows驱动,然后选择"替换现有驱动"。
在实际操作中,Windows第一次打印会偏慢,因为需要发送驱动配置信息。之后打印速度取决于文件复杂度,打纯文档基本和原来插USB线差不多,打印比较大的PDF时能感觉到网络传输的开销,但完全在可接受范围内。
4.2 Samba打印共享配置
除了IPP协议,很多Windows系统还习惯通过Samba网络共享来发现打印机。这种方式在经典"添加打印机-网络打印机"流程里更顺手,不用手输入地址很长一串。
玩客云上如果安装了Samba服务,可以在smb.conf里加入打印机配置,把CUPS管理的打印机通过SMB协议暴露出来。此时Windows打开"网络"也能看到这台打印机,双击即可安装。
Samba打印共享最容易坑的地方是权限和协议版本。旧版Windows可能默认使用SMB1协议,新版Armbian默认禁用了低版本SMB,需要在配置里手动允许。不过,我建议优先使用IPP方式,配置更简单,而且不用额外装Samba服务,打印可靠性也更高。
如果非要Samba,评论区我可以再单独讲,这篇文章里不过度展开。毕竟我们的目标是怎么最简单最稳定地把打印服务跑起来。
4.3 手机AirPrint免驱打印
移动设备打印是这台打印服务器最爽的地方。玩客云上的CUPS默认启用IPP协议,苹果的AirPrint底层用的就是IPP协议加Bonjour服务发现。只要CUPS开启了Bonjour通告,iPhone、iPad在局域网里就能直接发现打印机。
手机上打开要打印的内容,点击分享菜单里的"打印",系统会自动搜索局域网里的打印机。如果发现不了,检查CUPS配置里有没有取消"Advertise AirPrint Printers"的选项,Armbian版本的CUPS应当默认开启该功能。
安卓手机略有不同,不同品牌的打印服务对IPP协议的支持不一样。部分安卓手机自带打印功能可以识别,部分需要安装第三方打印应用。安卓手机打印时重点确认手机与玩客云在同一局域网,并且没有启用访客网络隔离。路由器开了AP隔离的话,手机和打印机服务器虽然是同一个Wi-Fi,实际上却互不相通,这是打印失败最常见的网络层面的原因。
5. 稳定性调优与常见故障自检
5.1 打印队列卡死怎么救
打印机服务器跑久以后,最常见的故障就是打印队列卡住。有时候是某个文件格式转换出错,有时候是打印机缺纸状态下任务堆积。表现为:所有客户端发送任务后打印机毫无反应,CUPS界面里任务状态一直停留在"处理中"或"已停止"。
排查思路很简单,先把卡住的任务取消:
cancel -a然后停止CUPS队列,再重新启动打印机,让打印机硬件的状态复位:
systemctl restart cups如果是固件加载失败导致红灯,还需要把打印机断电再上电。我发现激光打印机和玩客云之间的USB连接偶尔会进入一种"假死"状态,单纯重启CUPS无法恢复,必须给打印机断电几秒钟重新初始化。把这个动作记熟,能解决大半的疑难问题。
5.2 打印机休眠唤醒异常
惠普1020 Plus默认有休眠模式,长时间不打印后会进入低功耗状态。打印服务器的一个问题是,CUPS在发送打印任务时,需要先唤醒打印机,但有些固件版本唤醒不完整,导致打印任务发送了,打印机却没有反应。
遇到这种情况,先打开打印机的电源按钮,或者在CUPS里发送一张测试页,等待几秒钟。多数情况下打印机会自动唤醒并完成当前任务。如果每次都这样,可以考虑关闭打印机的自动休眠功能。虽然这样会略微增加功耗,但对打印服务器场景来说,可靠性更重要。
5.3 玩客云长时间运行的保养
玩客云这类设备虽然设计上是常年开机的,但长期高负载运行还是需要一点养护。第一,建议在路由器定时任务中每天凌晨重启一次玩客云。打印机服务器不需要保持零停机,每天重启一次可以清理内存碎片,减少USB设备偶尔失联的几率。
第二,不要把SD卡或U盘当成系统盘长期运行,玩客云最好把Armbian写入机身存储。如果你之前用U盘跑的,请尽快改掉,打印服务虽然写入量不大,但U盘容易出现文件系统损坏。
第三,系统日志定期清理。CUPS的日志正常情况下增长不快,但遇到反复打印失败时,error_log可能迅速膨胀。可以配置logrotate限制日志大小,也可以通过任务定期清空日志。
5.4 网络层面的定位范围
如果手机和电脑都发现不了打印机,先不要怀疑CUPS,查一下路由器的AP隔离设置。很多路由器为了安全默认开启"访客网络隔离",设备之间不能互访,打印服务自然不可达。解决办法是打印设备连接的是主网络,而不是访客网络。
另外,路由器如果是双频Wi-Fi,手机连5GHz,玩客云连着有线网口,两者通常可以互通;但有些路由器默认开启了"无线隔离"选项,只在无线设备之间隔离,而有线设备不受影响。排查时先看路由器后台的隔离设置,再考虑网络协议问题。
6. 一些超出常规的经验补充
6.1 用命令行测试打印能更快定位问题
CUPS图形界面虽然直观,但在排查阶段我更推荐直接命令行打印测试文件。先生成一个最简单的文本文件,然后通过CUPS的lp命令发送到打印机:
echo "print test" > /tmp/test.txt lp -d hplj1020 /tmp/test.txt如果这个能正常打印,说明驱动、命名、设备识别全部正常,问题一定出在客户端或网络上。这样可以快速把五百行的排错范围缩小到明确的一小块。
6.2 给打印机服务器配一个远端管理小页面
玩客云性能不强,跑一个CUPS已经足够,没必要再去安装一堆监控面板。但我后来还是加了最简单的访问约束:CUPS默认是需要登录才能做管理操作的,建议保留这个功能,不然局域网内任何一个人都能进管理界面篡改打印配置。
家庭用户可能觉得无所谓,但在公共环境里就很重要了。我见过有人不小心把驱动改错,导致整个打印机服务器瘫痪,最后只能重配。
6.3 从物理上把设备放置得更合理
玩客云和打印机最好摆在同一区域,不要让USB线穿过几个房间。USB线如果太长或者穿过强电线路,信号容易出问题。实测三米内是稳定距离,超过五米就要考虑用带屏蔽的USB线。
另外,玩客云的工作温度也不低。打印服务器放在通风处,不要塞进密闭的弱电箱里。夏天高温时,盒子过热会自动降频,打印任务变慢事小,频繁死机就麻烦了。
6.4 这套方案的迁移空间
如果你以后换了打印机,这套玩客云的基础架构可以继续使用。只要把USB打印机换成支持通用驱动的型号,在CUPS里重新添加一台打印机就行,不需要再刷系统。一些支持AirPrint的现代打印机甚至可以直接被CUPS发现并桥接,这意味着一台老旧的轻量盒子还能继续充当打印网关。
即使玩客云不小心系统崩溃,重新刷机再装CUPS,整个过程最快半小时也能跑通。打印机的网络配置信息都在系统配置文件里,备份好配置以后恢复非常快。
我实际操作下来的最大心得是:很多人在惠普LaserJet 1020 Plus这类打印机的网络共享问题上卡住,不是因为硬件不支持,而是因为选错了驱动和协议。只要把foo2zjs驱动老老实实配上,再用IPP协议共享,这台老打印机的稳定性甚至超出预期。半年用下来,除了偶尔换墨盒,我几乎没有再动过它。如果你家里也有这对闲置组合,真心建议花一个下午折腾一下,以后全家人的打印需求都省事了。