打印机接上 Linux 就罢工?foo2zjs 免费开源驱动让 100+ 款老机型重获新生
【免费下载链接】foo2zjsA linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs
把一台在 Windows 下兢兢业业干了十年的 HP LaserJet 1020 插进 Linux 电脑,打印队列瞬间变成一长串"已停止"的红字——这种尴尬,几乎每个转投 Linux 的人都会撞上。foo2zjs 就是专门收拾这个烂摊子的免费开源打印机驱动:它靠逆向工程解读厂商的私有协议,让一百多款"官方不支持 Linux"的老激光机重新吐纸。全程不用花一分钱,也不用懂底层技术,照着本文一步步来就行。
为什么打印机一接 Linux 就集体"失语"
先澄清一个误会:打印机并没坏,硬件好得很,是你的系统听不懂它说话。
多数家用、办公激光机不使用通用的打印语言,而是内置了厂商私有的数据格式——ZJ-Stream、QPDL、LAVAFLOW、HIPERC、OAKT、SLX、XQX、HBPL2,这些词对普通用户很陌生,却是打印机真正的"母语"。厂商只给 Windows 和 macOS 发布配套驱动,Linux 这块被有意无意地遗忘了。
CUPS 虽是 Linux 打印体系的中枢,但它只负责调度与排队,面对这些加密的私有协议同样没辙。于是打印任务发出去了,机器毫无反应,任务卡在队列里,直到超时报错。
每台打印机都是一把锁,foo2zjs 则是一串万能钥匙
foo2zjs 的思路很朴素:厂商不肯配钥匙,那就自己开锁。开发者把各家协议逐条逆向、吃透,再用 C 语言把它们翻译成 CUPS 能理解的数据流,让打印机终于"听"得懂 Linux 的话。
这套驱动实际是一整个钥匙串,每把钥匙对应一种协议、接管一类机型:
| 驱动组件 | 攻克的协议 | 代表性机型 |
|---|---|---|
| foo2zjs / foo2hp | ZJ-Stream | HP LaserJet 1000/1018/1020/1022、CP1215、1600、2600n |
| foo2qpdl | QPDL | Samsung CLP-300/315/600、Xerox Phaser 6110 |
| foo2lava | LAVAFLOW | Konica Minolta magicolor 2530 DL、2480 MF |
| foo2hiperc | HIPERC | Oki C301dn、C310dn、C511dn、C810dn |
| foo2oak | OAKT | HP LaserJet 1500、Kyocera KM-1635/2035 |
| foo2slx | SLX | Lexmark C500n |
| foo2xqx | XQX | HP LaserJet M1005 MFP、P1005、P1505 |
| foo2hbpl2 | HBPL2 | Dell 1355、Epson AcuLaser CX17NF、Fuji Xerox DocuPrint 系列 |
这张表你完全不用背——安装时系统会自动按打印机型号挑选合适的钥匙,你只需确认自己的机型在支持名单里。
foo2zjs 的安装:四条命令打通全流程
安装不涉及复杂的依赖处理,把源码拉下来直接编译:
git clone https://gitcode.com/gh_mirrors/fo/foo2zjs cd foo2zjs进入目录后依次执行两条:
make sudo make installmake负责把 C 源码编译成可执行文件,make install则把驱动、PPD 打印说明文件和色彩配置统一放进系统目录。最后让 CUPS 认识新驱动:
sudo make cups这一步会生成并注册各机型的打印配置。重启 CUPS 服务后,到系统打印设置里搜你的型号,就能看到它了。
HP 老机型开机前必须"喂固件"
用 HP LaserJet 1000/1005/1018/1020 这类老打印机的朋友要注意:它们的固件不放在机器里,而是保存在电脑端,每次通电都得先接收一次固件,否则只有指示灯亮,怎么点打印都不出纸。
项目自带的 getweb 脚本,一行命令就能取回固件:
./getweb 1020下载好的固件会放进/usr/share/foo2zjs/firmware/目录,手动加载只需把它直接灌进打印口:
cat /usr/share/foo2zjs/firmware/sihp1020.dl > /dev/usb/lp0每次都手动喂太麻烦?项目提供了热插拔方案:
sudo make install-hotplug装上之后,USB 一插上就自动喂固件,往后即插即打,彻底告别"开机先喂药"的日常。
彩色打印偏色?做一次正经的色彩校准
彩色激光机打出来的颜色偶尔偏红、偏绿,别急着怪打印机,多半是色彩配置文件没配对。项目仓库里躺着大量厂商提供的 ICC/ICM 文件,比如 Samsung CLP-300 的samclp300-0.icm、Oki C3200 的OK3200L1.icm、Konica Minolta 2430 的km2430_0.icm。
也可以用 getweb 直接拉取对应型号的配置:
./getweb 300拿到配置后,配合项目内置的 icc2ps 色彩管理工具做转换,再打印一张测试页对比。偏一点就微调参数重打,一般两三轮就能调准。
打印失败时的排查工具箱
打印不成功最怕两眼一抹黑,好在 foo2zjs 自带一套"数据流体检"工具。zjsdecode、qpdldecode、hipercdecode 这类解码器,能把你发给打印机的数据流逐段拆开,判断问题出在格式转换还是传输环节。
识别设备则用 usb_printerid:
usb_printerid /dev/usb/lp0它能读出打印机的设备 ID 和型号,帮你确认驱动匹配是否正确。再配合这条命令盯 CUPS 日志:
tail -f /var/log/cups/error_log大部分打印故障,都能借此一步步定位到具体环节。
老手划重点:三个容易踩的坑
- Ghostscript 版本别乱升:8.54 到 8.71 是公认的稳妥区间,部分新版本会出现颜色偏差或横向打印异常,升级前记得先备份当前版本;
- 网络打印机按协议填地址:LPD 用
lpd://IP地址/lp,JetDirect 用socket://IP地址:9100,IPP 用ipp://IP地址/ipp,照着填基本不会错; - 手动双面打印有技巧:先打奇数页,翻面后再打偶数页,并给打印命令加上
-o outputorder=reverse,保证页码顺序正确。
说到底,foo2zjs 最打动人的地方,是把厂商不愿做的脏活累活,用开源协作的方式补齐了。无论是角落里吃灰十年的二手激光机,还是办公室那台总被说"Linux 不支持"的彩色一体机,只要型号在名单里,插上、装好、出纸,就这么简单。免费、开源、逆向工程——这正是开源社区送给 Linux 用户的一份厚礼。
【免费下载链接】foo2zjsA linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考