没有官方驱动的 Linux 打印机,foo2zjs 免费搞定 100+ 型号兼容
【免费下载链接】foo2zjsA linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs
朋友送了我一台退役的 HP LaserJet 1020。Windows 里插上就打印,可换到 Linux 桌面,系统只报一句"打印机未连接"。不是机器坏了,也不是系统装错了,而是厂商压根没给 Linux 写驱动。相信你也遇到过类似情况:官网翻遍只有 .exe 安装包,打印队列永远灰着,最后一叠资料只能抱着 U 盘去楼下文印店。
foo2zjs 就是来填这个坑的。这是一款免费开源的 Linux 打印机驱动套件,通过逆向工程支持 ZJ-Stream、QPDL、HIPERC 等 8 种专有打印协议,覆盖 HP、Samsung、Oki、Konica Minolta 等品牌的 100 多款激光打印机,还一并打包了 PPD 配置、ICC 色彩文件和固件加载方案。装一次,往后就能安心打印。
🎯 先搞懂:打印机在 Linux 上"哑火"的根源
Linux 下所有打印任务都归 CUPS(通用 Unix 打印系统)管,但 CUPS 只擅长和"说标准话"的设备沟通。不少激光打印机为了压缩数据、提升速度,用了厂商自研的专有协议,比如 HP 早期的 ZJ-Stream、Samsung 的 QPDL。厂商一看 Linux 用户少,干脆不出驱动,于是设备明明连在 USB 上,系统却"听不懂"它。
foo2zjs 的思路很朴素:把这些协议的编码规则一条条逆向出来,写成转换引擎。你发出打印任务,它先把 PostScript/PDF 数据翻译成打印机听得懂的语言,再交给设备执行——相当于在 CUPS 和打印机之间,安了一位尽职的同声传译。
下面这张对比表,能直观看出"装没装"的差别:
| 对比项 | 没装 foo2zjs 时 | 装好之后 |
|---|---|---|
| 设备识别 | 系统报"未连接" | 正常入队、按型号识别 |
| 打印效果 | 无法测试 | testpage 可正常出纸 |
| 色彩管理 | 无 | 按 ICC 文件精确还原 |
| 日常维护 | 反复折腾无解 | 固件自动加载、即插即用 |
🔧 核心能力:8 个驱动模块 + 一整套配套资源
foo2zjs 的驱动按协议"分家",一个协议一个引擎,互相独立、互不干扰:
- foo2zjs→ ZJ-Stream,主攻 HP 黑白激光,1020/1005/1018 都是它管的
- foo2hp→ 同一协议的彩色变体,服务 HP Color LaserJet 系列
- foo2qpdl→ QPDL,Samsung CLP 系列以及部分 Xerox Phaser
- foo2lava→ LAVAFLOW,Konica Minolta magicolor 机型
- foo2hiperc→ HIPERC,Oki 新一代网络彩色激光机
- foo2oak→ OAKT,HP LaserJet 1500 与 Kyocera KM 系列
- foo2slx→ SLX,对应 Lexmark C500n
- foo2xqx→ XQX,覆盖 HP LaserJet M1005/P1005 等机型
光有引擎还不够,项目把配套资源也备齐了:
- PPD 文件库:
PPD/目录下上百个配置文件,定义了纸张尺寸、分辨率、纸盒、色彩模式等选项,装驱动时自动匹配 - 色彩管理工具:
icc2ps/目录包含 CIECAM02/CIECAM97 色彩模型和转换核心,配合仓库根目录的厂商 ICC 文件(如samclp300-0.icm、km2430_0.icm)可做专业校色 - 固件与解码工具:内置
sihp*.img固件镜像,以及 zjsdecode、qpdldecode、hipercdecode 等逆向调试工具
🚀 快速上手:三步把驱动跑起来
整个过程不用改系统配置,跟着做就行。
第一步:取源码
git clone https://gitcode.com/gh_mirrors/fo/foo2zjs cd foo2zjs第二步:编译安装
make sudo make install第三步:按型号拉固件并重启 CUPS
以 HP LaserJet 1020 为例,getweb会自动下载对应的固件和配置文件;HP 机型建议再配一下热插拔支持,之后插上 USB 就能自动加载固件:
./getweb 1020 sudo make install-hotplug sudo make cups完成后在系统打印设置里添加打印机,选到对应型号的 PPD,就可以打印测试页了。
🙋 新手必看的 5 个踩坑问答
Q1:HP 1020 的固件为什么"每次都丢"?
这类老机器内存太小,固件平时存放在电脑端,关机重启后就没了。make install-hotplug会写好 udev 规则,让系统在你插入 USB 时自动把固件下发到打印机,属于一次性配置、长期省心。
Q2:打印出来有条纹或者偏色怎么办?
先查 Ghostscript 版本,部分版本在渲染上存在已知问题,官方推荐的区间是 8.54~8.71。其次确认选用的 PPD 和 ICC 文件与机型严格对应,不要混用。
Q3:系统压根认不出打印机?
先用lsusb确认设备在线,再用usb_printerid /dev/usb/lp0读取打印机的型号 ID。如果一直没有响应,多半是 usblp 内核模块状态异常,重新加载一下即可:
sudo modprobe -r usblp && sudo modprobe usblpQ4:想打印 4×6 英寸照片这类非标尺寸?
在打印参数里直接指定即可,例如-o media=Custom.4x6in -o PageSize=Custom.4x6in,多数机型都支持自定义纸张。
Q5:需要双面打印但没有双面器?
foo2zjs 支持手动双面:先打奇数页,翻面后按逆序补偶数页:
lp -o page-set=odd document.pdf lp -o page-set=even -o outputorder=reverse document.pdf💡 进阶玩法:校色、网络打印与排障三板斧
色彩不满足于"能打出来"?可以走完整校色流程:用printer-profile.sh结合仓库内的 ICC 文件生成设备配置文件,再通过 icc2ps 做色彩空间转换,最后打印测试页微调参数,直到输出接近屏幕所见。
公司里打印机不插 USB、只连网线?可以直接把驱动用起来,设备 URI 按你的网络协议填:
- LPD:
lpd://192.168.1.100/lp - JetDirect:
socket://192.168.1.100:9100 - IPP:
ipp://192.168.1.100/ipp
真出问题也别慌,项目自带"病历本":zjsdecode等工具能解码打印数据流,regress.txt记录了回归测试用例,对照着查,多半能找到问题出在渲染阶段还是传输阶段。
🏠 什么场景最值得用上 foo2zjs
- 家庭用户:二手市场淘来的 LaserJet 1020/1005,几十块的成本换一个能打多年的"钉子户"
- 中小企业:带网卡的 Color LaserJet 2600n、magicolor 2530 DL、Oki C5100n 等,一条网线搞定全办公室打印
- 学校机房:P1005/P1006 这类低功耗单色机,加一台 M1005 MFP,讲义、试卷需求基本全覆盖
📚 收尾之前,再给你指条路
Linux 打印的兼容性问题,看似是硬件玄学,其实只差一个肯较真的逆向工程。foo2zjs 把这件事做到了开源、免费、可持续:想了解协议细节,可以翻源码目录里的foo2zjs.c和zjs.h;想研究色彩管理,icc2ps/就是现成的教材;安装过程中遇到任何疑问,INSTALL文档写得比大多数商业软件还详细。下次再有人抱怨"Linux 打不了印",把这篇指南转给他就够了。
【免费下载链接】foo2zjsA linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考