告别打印驱动地狱:foo2zjs 让 100+ 款激光打印机在 Linux 下免费复活
【免费下载链接】foo2zjsA linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs
你是否曾对着刚买回来的打印机发愁——Windows 上一切正常,一插到 Linux 电脑就变成一块"沉默的砖头"?又或者,你手里那台 HP LaserJet 1020、Samsung CLP-300 明明还能再战十年,却因为厂商只提供 Windows 驱动,被迫在"换打印机"和"装双系统"之间做选择?今天要介绍的 foo2zjs,正是为解决这个 Linux 打印机兼容性难题而生的开源驱动套件。它通过逆向工程,为 100 多种采用专有打印协议的激光打印机提供了完整驱动支持,全程免费、无需破解,跟着本文操作,最快 5 分钟就能打出第一张测试页。
先从一次"抓狂"说起:打印机为什么听不懂 Linux 的话
要理解 foo2zjs 的价值,得先弄清楚问题出在哪。打印机和电脑沟通,靠的是打印协议——你可以把它想象成一种"方言"。大多数主流打印机说 PostScript 或 PCL 这种"普通话",CUPS(Linux 的通用打印系统)听得懂。但 HP、Samsung、Oki 等品牌的许多激光打印机,私下里说的是 ZJ-Stream、QPDL、LAVAFLOW 这类"方言",只被厂商的 Windows 驱动使用,官方从没打算给 Linux 用户翻译。
结果就是:系统能识别 USB 设备,却打不出一个字。而 foo2zjs 做的事情,恰恰是给这些"方言打印机"当翻译官——它把 Linux 上常见的图像数据,转换成打印机真正听得懂的专属语言。
这个项目到底"会"几门方言?一张表看懂
foo2zjs 不是一个单一驱动,而是一整个"翻译官团队"。它的工作流程很清晰:先用 Ghostscript 把文档转成 PBM(黑白位图)或 CMYK 位图,再由对应的驱动模块转换成打印机的专属数据流。项目核心目录下,每个驱动对应一门协议,各有分工:
| 驱动模块 | 翻译的"方言"(协议) | 代表机型 |
|---|---|---|
| foo2zjs | ZJ-Stream | HP LaserJet 1020/1005/1018、Minolta/QMS 2300 DL |
| foo2hp | ZJ-Stream 变体 | HP Color LaserJet CP1215/1600/2600n |
| foo2qpdl | QPDL | Samsung CLP-300/600 系列、Xerox Phaser 6110 |
| foo2lava | LAVAFLOW | Konica Minolta magicolor 2530/2480/1690MF |
| 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/P1005/P1006/P1505 系列 |
| foo2hbpl2 | HBPL 2 | Dell 1355、Epson AcuLaser CX17NF、Xerox WorkCentre 系列 |
可以看到,这些机型大多不是"一线热门",恰恰是厂商最容易放弃 Linux 支持的部分。而项目目录里 89 个 PPD 配置文件(在PPD/目录)、89 份打印机定义 XML(在foomatic-db/printer/)、41 个 ICC 色彩配置文件,共同构成了一个相当完整的驱动生态。
四件"值回票价"的事:为什么要选它
- 完全免费且开源:整个套件遵循 GPL 协议,源码随意查看、修改、分发,不需要像某些商业驱动一样按打印机"收费解锁"。
- 没有厂商支持也不慌:驱动全部通过逆向工程实现,属于"从零重写"的干净实现,不依赖官方闭源驱动。
- 买打印机不再看 Linux 脸色:支持 HP、Samsung、Oki、Konica Minolta、Xerox、Lexmark、Dell、Epson、Kyocera 等众多品牌,覆盖面远超想象。
- 色彩管理是加分项:项目内置 icc2ps 色彩转换工具链(位于
icc2ps/目录),配合厂商 ICC 配置文件,彩色打印的准确度有保障。
上手前的 60 秒自检:你的电脑准备好了吗
在动手编译前,先确认环境里是否具备这几样东西(大多发行版默认就有):
- 编译工具:
gcc、make(用于把源码编译成可执行文件) - Ghostscript(gs):负责把文档光栅化成位图,是整个链路的起点
- CUPS:Linux 打印服务,驱动最终要挂靠它工作
- foomatic-rip:安装时若缺少它,
make install会直接报错提醒你
快速验证命令:
gcc --version && make --version gs --version顺带一提,项目在安装文档(INSTALL)里专门提醒过 Ghostscript 版本坑:推荐 8.54~8.71 之间的版本,避开 8.64(颜色处理有 bug)、9.00 及以上(横排模式字体有问题,9+ 颜色也有问题)。老版本 gs 反而是最佳搭档,这在开源世界里是件挺有趣的事。
零基础上手:从拉取源码到打出测试页的完整五步
下面这套流程,对应项目根目录的INSTALL、README文档,照抄即可。
第 1 步:获取源码
git clone https://gitcode.com/gh_mirrors/fo/foo2zjs cd foo2zjs第 2 步:编译
make第 3 步:按你的打印机型号下载"附加装备"
这一步最容易忽略,却至关重要。很多打印机需要固件或 ICC 色彩配置文件才能工作,项目为此专门提供了./getweb脚本,直接输入型号关键字即可:
./getweb 1020 # HP LaserJet 1020 固件 ./getweb 1215 # HP Color LaserJet CP1215 的 ICC 文件 ./getweb 300 # Samsung CLP-300 的 ICC 文件 ./getweb c310 # Oki C310dn 的 ICC 文件./getweb不带参数运行,会列出所有支持型号的关键字,对着自己的打印机选就行。
第 4 步:安装驱动与配置
sudo make install # 安装驱动、PPD、foomatic 配置 sudo make install-hotplug # 仅 HP 1000/1005/1018/1020/P100x/P1505 需要 sudo make cups # 修改 CUPS 配置并重启服务装完热插拔支持后,记得把 USB 打印机拔掉再插上,让 udev 规则(项目里的hplj10xx.rules)重新生效。
第 5 步:添加打印队列
图形界面用户直接打开system-config-printer(Ubuntu/Debian/Fedora)或yast2 printer(openSUSE),选择 "Foomatic + foo2zjs" 即可。命令行用户更直接:
sudo lpadmin -p hp1020 -v "usb://HP/LaserJet%201020" -E \ -P /usr/share/cups/model/HP-LaserJet_1020.ppd.gz sudo lpadmin -d hp1020 # 设为默认打印机到这里,用lp testpage.ps或打印任意文档测试,第一张纸就该出来了。
三种典型场景,按需选择你的部署姿势
家庭用户 · 老打印机复活记手里有 HP 1020、Samsung CLP-300 这类"功勋老将"?照着上面的五步走,它们立刻焕发第二春。值得多提一句:HP 1000/1005/1018/1020 这类机型本身不带持久固件,需要每次开机后加载——热插拔规则就是干这个的,所以install-hotplug千万别跳过。
办公室 · 网络打印机怎么连办公室里多数是网络打印机,直接用 CUPS 支持的 URI 就能对接,配置时把设备 URI 填对即可:
| 协议 | URI 格式 | 适用场景 |
|---|---|---|
| LPD | lpd://192.168.1.100/lp | 传统 Unix 打印队列 |
| JetDirect | socket://192.168.1.100:9100 | HP 网络打印端口 |
| IPP | ipp://192.168.1.100/ipp | 现代网络打印机 |
开发测试 · 用解码器看清数据流如果你在折腾打印问题,项目自带一票调试神器:zjsdecode、qpdldecode、hipercdecode、slxdecode分别解码各协议的数据流,usb_printerid /dev/usb/lp0可以读取打印机的 USB 身份信息。想判断打印机是否正常响应,它们是第一道排查工具。
进阶玩法:色彩校准、手动双面与多页合并
① 色彩管理彩色激光打印机默认输出可能偏色。做法是:先用./getweb拉取对应机型的 ICC/ICM 文件(项目根目录已有 41 个,如hp-cp1025-rgb-392-bpp1.icm、samclp300-0.icm),再在打印队列的"色彩管理"选项里指定配置文件。项目还提供了printer-profile.sh脚本和 Argyll 工具的配合方案,能生成专属于你这台机器的定制色彩档案,追求极致色彩的专业用户值得一试。
② 手动双面打印机身不带自动双面器的机器,可以靠命令完成"半自动双面":
lp -o page-set=odd document.pdf # 先打奇数页 # (把纸翻面放回纸盒) lp -o page-set=even -o outputorder=reverse document.pdf # 再打偶数页③ 多页合并(N-up)装好 psutils 后,配合 CUPS 的-o number-up=2等选项,就能把两页或四页内容拼到一张纸上,省纸又省钱。
常见报错与排查自查清单
把社区里出现频率最高的问题整理成一张自查表,遇到情况直接对号入座:
| 症状 | 可能原因 | 排查动作 |
|---|---|---|
| 打印机完全没反应 | USB 模块未加载 / 固件未加载 | sudo modprobe usblp;确认已运行./getweb并配置热插拔 |
| 安装报 foomatic-rip 缺失 | 系统缺少 foomatic 组件 | 安装foomatic-db相关包后重试make install |
| 彩色打印偏色或出现斜纹 | Ghostscript 版本不兼容 | 把 gs 换回 8.54~8.71,避开 8.64 和 9.0+ |
| 输出有横向条纹 | 分辨率或色彩模式设置不当 | 在队列选项中尝试不同 DPI 和 Color Mode |
| 固件加载失败 | 设备节点权限不足 | 检查hplj10xx.rules是否生效,拔插 USB 重试 |
| 打印队列卡住 | CUPS 缓存异常 | sudo service cups restart,再用lpstat -o查看作业状态 |
排查思路永远是从外到内:先看 USB 连接(lsusb),再看 CUPS 状态(lpstat -t),再看固件是否加载,最后查/var/log/cups/error_log。
想读懂它的内核?从这几个文件入口开始
如果你对"打印机驱动是怎么写出来的"感兴趣,这个项目是绝佳的学习样本:
foo2zjs.c:ZJ-Stream 协议主引擎,驱动的中枢神经zjs.h:ZJ-Stream 协议头文件,定义了数据格式的底层约定jbig.c/jbig_ar.c:集成的 JBIG-KIT 压缩库,负责压缩位图数据、提高传输效率icc2ps/目录:完整的色彩管理工具链,含 CIECAM02/97 色彩外观模型实现PPD/目录:89 个现成 PPD 文件,是学习 PPD 语法的最佳范文foo2zjs.1in等 man 手册模板:每个驱动都有对应的文档,命令参数一览无余
配套的解码器源码(zjsdecode.c、qpdldecode.c等)更是"双向理解"协议的绝佳教材——会编码就会解码,看懂一个,整类协议都通了。
写在最后:一次投入,长期免费打印
foo2zjs 的核心价值,一句话概括:让厂商放弃的打印机,在 Linux 下继续发光发热。它适合这三类人——手头有老款激光打印机想继续用的家庭用户;需要为多台异构打印设备做统一管理的办公室管理员;以及对打印机协议和驱动开发感兴趣的开发者。它用一个完全免费、开源、可持续维护的方案,打破了"换打印机"和"买驱动"两座大山。
给你的行动建议:动手永远比收藏有价值。按照本文的五步流程,从git clone https://gitcode.com/gh_mirrors/fo/foo2zjs开始,今晚就能让你书桌那台"吃灰打印机"重新吐出热腾腾的纸张。遇到问题也别慌,INSTALL和README两份文档写得非常详尽,./getweb列出全部支持型号,配合本文的自查清单,多数坑都能绕过去。
下次再有人说"Linux 打印机是个老大难",你可以笑着把这份驱动套件甩给他——不是所有问题都需要换台打印机来解决,有时候,只需要一个愿意做翻译官的开源项目。
【免费下载链接】foo2zjsA linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考