ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

告别打印驱动地狱:foo2zjs 让 100+ 款激光打印机在 Linux 下免费复活

告别打印驱动地狱:foo2zjs 让 100+ 款激光打印机在 Linux 下免费复活

告别打印驱动地狱: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 位图,再由对应的驱动模块转换成打印机的专属数据流。项目核心目录下,每个驱动对应一门协议,各有分工:

驱动模块翻译的"方言"(协议)代表机型
foo2zjsZJ-StreamHP LaserJet 1020/1005/1018、Minolta/QMS 2300 DL
foo2hpZJ-Stream 变体HP Color LaserJet CP1215/1600/2600n
foo2qpdlQPDLSamsung CLP-300/600 系列、Xerox Phaser 6110
foo2lavaLAVAFLOWKonica Minolta magicolor 2530/2480/1690MF
foo2hipercHIPERCOki C301dn/C310dn/C511dn/C810dn
foo2oakOAKTHP LaserJet 1500、Kyocera KM-1635/2035
foo2slxSLXLexmark C500n 网络彩色激光打印机
foo2xqxXQXHP LaserJet M1005/P1005/P1006/P1505 系列
foo2hbpl2HBPL 2Dell 1355、Epson AcuLaser CX17NF、Xerox WorkCentre 系列

可以看到,这些机型大多不是"一线热门",恰恰是厂商最容易放弃 Linux 支持的部分。而项目目录里 89 个 PPD 配置文件(在PPD/目录)、89 份打印机定义 XML(在foomatic-db/printer/)、41 个 ICC 色彩配置文件,共同构成了一个相当完整的驱动生态。

四件"值回票价"的事:为什么要选它

  1. 完全免费且开源:整个套件遵循 GPL 协议,源码随意查看、修改、分发,不需要像某些商业驱动一样按打印机"收费解锁"。
  2. 没有厂商支持也不慌:驱动全部通过逆向工程实现,属于"从零重写"的干净实现,不依赖官方闭源驱动。
  3. 买打印机不再看 Linux 脸色:支持 HP、Samsung、Oki、Konica Minolta、Xerox、Lexmark、Dell、Epson、Kyocera 等众多品牌,覆盖面远超想象。
  4. 色彩管理是加分项:项目内置 icc2ps 色彩转换工具链(位于icc2ps/目录),配合厂商 ICC 配置文件,彩色打印的准确度有保障。

上手前的 60 秒自检:你的电脑准备好了吗

在动手编译前,先确认环境里是否具备这几样东西(大多发行版默认就有):

  • 编译工具gccmake(用于把源码编译成可执行文件)
  • 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 反而是最佳搭档,这在开源世界里是件挺有趣的事。

零基础上手:从拉取源码到打出测试页的完整五步

下面这套流程,对应项目根目录的INSTALLREADME文档,照抄即可。

第 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 格式适用场景
LPDlpd://192.168.1.100/lp传统 Unix 打印队列
JetDirectsocket://192.168.1.100:9100HP 网络打印端口
IPPipp://192.168.1.100/ipp现代网络打印机

开发测试 · 用解码器看清数据流如果你在折腾打印问题,项目自带一票调试神器:zjsdecodeqpdldecodehipercdecodeslxdecode分别解码各协议的数据流,usb_printerid /dev/usb/lp0可以读取打印机的 USB 身份信息。想判断打印机是否正常响应,它们是第一道排查工具。

进阶玩法:色彩校准、手动双面与多页合并

① 色彩管理彩色激光打印机默认输出可能偏色。做法是:先用./getweb拉取对应机型的 ICC/ICM 文件(项目根目录已有 41 个,如hp-cp1025-rgb-392-bpp1.icmsamclp300-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.cqpdldecode.c等)更是"双向理解"协议的绝佳教材——会编码就会解码,看懂一个,整类协议都通了。

写在最后:一次投入,长期免费打印

foo2zjs 的核心价值,一句话概括:让厂商放弃的打印机,在 Linux 下继续发光发热。它适合这三类人——手头有老款激光打印机想继续用的家庭用户;需要为多台异构打印设备做统一管理的办公室管理员;以及对打印机协议和驱动开发感兴趣的开发者。它用一个完全免费、开源、可持续维护的方案,打破了"换打印机"和"买驱动"两座大山。

给你的行动建议:动手永远比收藏有价值。按照本文的五步流程,从git clone https://gitcode.com/gh_mirrors/fo/foo2zjs开始,今晚就能让你书桌那台"吃灰打印机"重新吐出热腾腾的纸张。遇到问题也别慌,INSTALLREADME两份文档写得非常详尽,./getweb列出全部支持型号,配合本文的自查清单,多数坑都能绕过去。

下次再有人说"Linux 打印机是个老大难",你可以笑着把这份驱动套件甩给他——不是所有问题都需要换台打印机来解决,有时候,只需要一个愿意做翻译官的开源项目。

【免费下载链接】foo2zjsA linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表