1. 项目缘起:当国产Linux遇上老牌打印机
最近在把家里的老笔记本换成Deepin Linux,图的就是它界面漂亮、对中文友好,用起来跟Windows差不多顺手。一切都挺顺利,直到我需要打印一份文件,麻烦就来了。我手头这台富士施乐DocuPrint M115b激光打印机,还是几年前图它便宜皮实买的,在Windows下即插即用从没出过问题。结果插上Deepin,系统倒是能识别出有个USB打印设备,但尝试打印时,要么队列直接显示“已停止”,要么就是吐出来一张满是乱码的纸。
这其实是个非常典型的场景:很多家用或小型办公环境里,都会有一两台像M115b这样的经典款激光打印机,它们性能稳定、耗材便宜,完全能满足日常文档打印需求。但当用户转向Deepin这类优秀的国产Linux发行版时,这些在Windows/macOS下被厂商“保姆级”照顾的设备,往往就成了拦路虎。驱动,是横在硬件与操作系统之间的一道鸿沟。打印机厂商通常不会为Linux,尤其是较老的型号,提供官方的、易用的驱动支持。这就得靠我们用户自己,或者更准确地说,是依靠开源社区的力量,去“折腾”出一个可用的解决方案。
所以,这篇记录就是关于如何在Deepin Linux上,为富士施乐DocuPrint M115b这台“老将”寻找、配置并最终搞定打印驱动的全过程。这个过程不仅适用于这台特定型号,其思路和方法对于解决大多数Linux下的老旧打印机驱动问题,都有很大的参考价值。无论你是刚接触Linux的新手,还是有一定基础但被外设问题困扰的用户,希望这篇详尽的踩坑和填坑记录能帮到你。
2. 驱动方案选型与核心思路拆解
面对Linux下无官方驱动的硬件,我们的核心思路不是“安装”一个现成的驱动,而是“配置”一个能让系统与打印机正确通信的桥梁。这个桥梁在Linux打印体系中,通常是PPD文件。
2.1 Linux打印体系:CUPS与PPD文件
首先得理解Linux是怎么处理打印的。核心是一个叫做CUPS的服务,全称是Common Unix Printing System。你可以把它想象成一个智能的打印调度中心。当你在WPS或浏览器里点击“打印”,应用程序会把打印任务交给CUPS。CUPS则负责与具体的打印机硬件对话,把通用的打印指令转换成打印机听得懂的“语言”。
这里的关键就是“打印机语言”。不同品牌、甚至同品牌不同型号的打印机,使用的“语言”(即页面描述语言)可能不同,常见的有PCL、PostScript等。PPD文件就是一本“翻译词典”,它详细描述了某款打印机支持的语言、分辨率、纸张尺寸、双面打印等所有功能特性。CUPS拿到PPD文件,就知道该如何与这台打印机正确沟通了。
对于富士施乐DocuPrint M115b,我们的目标就是为它找到一个能用的PPD文件,并正确配置到CUPS中。
2.2 方案选择:开源驱动 vs. 厂商驱动 vs. 通用驱动
通常有三种路径:
- 开源驱动(首选):Linux社区大神们反向工程或根据公开协议制作的驱动,集成在发行版仓库或OpenPrinting项目中。优点是开源、免费、与系统集成好。
- 厂商驱动(次选):打印机厂商提供的Linux驱动包。对于老型号,往往很难找到,或者只提供源代码需要自己编译,过程复杂。
- 通用驱动(备选):如
foo2zjs、gutenprint等,支持非常广泛的打印机型号,通过模拟一个通用的打印机语言(如PCL)来工作。兼容性好,但可能无法发挥打印机的全部特性。
针对M115b,经过搜索和测试,最可靠的方案是使用foo2zjs驱动套件。这是一套非常著名的开源驱动,专门用于支持那些使用ZjStream语言(常见于国产和日系打印机)或类似语言的打印机。富士施乐的很多型号,包括M115b,都在其支持列表中。它的原理是为这些打印机提供一个通用的、高质量的PPD文件,让CUPS能够驱动它们。
注意:在尝试任何驱动前,务必先通过
lsusb命令确认系统已识别打印机硬件。将打印机通过USB连接并开机,在终端输入lsusb,你应该能看到类似“Bus 001 Device 005: ID 0924:3b6f Fuji Xerox Co., Ltd”的信息。这是所有后续操作的基础。
3. 详细实操步骤:从零配置M115b驱动
下面是在Deepin V23(基于Debian 12)上的完整操作流程。其他基于Debian/Ubuntu的发行版(如Ubuntu、Linux Mint)步骤几乎完全相同。
3.1 第一步:系统更新与CUPS服务确认
首先,确保系统是最新的,并且CUPS服务已经安装并运行。
打开终端,执行以下命令:
# 更新软件包列表 sudo apt update # 升级所有已安装的软件包(可选,但推荐) sudo apt upgrade -y # 安装CUPS打印服务(Deepin通常已预装,此命令用于确认) sudo apt install cups -y # 启动CUPS服务并设置开机自启 sudo systemctl start cups sudo systemctl enable cups # 检查CUPS服务状态,确认是“active (running)” sudo systemctl status cups如果CUPS服务状态正常,我们就可以通过Web界面(http://localhost:631)或命令行来管理打印机。对于新手,Web界面更直观。
3.2 第二步:安装foo2zjs驱动
foo2zjs驱动包在Deepin/Debian的默认仓库里就有,安装非常方便。
# 安装foo2zjs驱动包及其相关组件 sudo apt install printer-driver-foo2zjs -y这个命令会安装核心的驱动文件、工具以及一大批打印机型号的PPD文件。安装完成后,PPD文件通常存放在/usr/share/ppd/目录下,其中就包含我们需要的M115b的PPD文件。
3.3 第三步:通过CUPS Web界面添加打印机
这是最关键的一步。确保打印机已开机并连接到电脑。
- 打开浏览器,访问
http://localhost:631。这是CUPS的本地管理页面。 - 点击顶部导航栏的“Administration”。
- 在“Printers”部分,点击“Add Printer”。
- 系统可能会要求你输入用户名和密码。这里需要输入具有sudo权限的Linux系统用户名和密码,不是Deepin的图形登录密码(除非你设置了root密码并用root登录)。
- 选择连接方式:在“Local Printers”列表中,你应该能看到你的打印机,名称可能类似“
Fuji_Xerox_DocuPrint_M115b”或“USB Printer #1”。选择它,点击“Continue”。 - 命名打印机:给打印机起个名字(如
M115b),可以填写描述和位置,方便识别。点击“Continue”。 - 选择驱动(最关键的一步):
- 在“Make”制造商列表中,向下滚动找到并选择“Foo2ZJS”。
- 点击“Continue”后,在“Model”型号列表中,寻找与M115b匹配的选项。经过测试,最合适的PPD是:
Foo2ZJS - Fuji Xerox DocuPrint M115b Foomatic/foo2zjs-z2 (recommended)。 - 如果列表中没有精确匹配的“M115b”,可以尝试选择
Foo2ZJS - Fuji Xerox DocuPrint P115 w (recommended)或Foo2ZJS - Fuji Xerox DocuPrint M115 w (recommended)。M115b/M115w/P115w这几款机器的打印引擎和语言非常相似,驱动通常是通用的。
- 完成设置:选择好驱动后,一路“Continue”,最后点击“Set Default Options”和“Print Test Page”。
如果一切顺利,CUPS会向打印机发送一张测试页。请务必检查这张测试页的打印质量,确保文字清晰、没有乱码或缺失。
3.4 第四步:在Deepin桌面环境中配置
CUPS添加成功后,通常Deepin的系统设置 -> 打印机里会自动出现这台打印机。为了确保万无一失,我们可以手动检查一下。
- 打开Deepin的“控制中心”。
- 找到“打印机”设置。
- 点击“添加打印机”,系统会自动搜索。你应该能看到我们刚刚在CUPS里添加的
M115b。 - 选中它,点击“添加”。Deepin会从CUPS中同步配置,并将其设为可用的系统打印机。
至此,你就可以在WPS、LibreOffice、浏览器等任何应用程序中,选择“M115b”进行打印了。
4. 疑难杂症排查与进阶技巧
实际操作中很少一帆风顺。下面是我在折腾过程中遇到的一些典型问题及解决方法。
4.1 常见问题速查表
| 问题现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| CUPS页面无法打开 (localhost:631) | CUPS服务未运行或防火墙阻止 | 1.sudo systemctl status cups检查状态。2. 运行 sudo systemctl start cups。3. Deepin默认防火墙宽松,一般无需处理。 |
| 添加打印机时找不到USB设备 | 1. USB线或接口问题 2. 权限问题 3. 内核未识别 | 1. 换线、换USB口,重启打印机。 2. 将用户加入 lp和lpadmin组:sudo usermod -aG lp,lpadmin $USER,注销并重新登录生效。3. 执行 lsusb命令,确认是否有富士施乐设备。 |
| 打印测试页失败,任务“已停止” | 1. PPD文件选择错误 2. 驱动过滤器问题 | 1. 在CUPS管理页面,进入该打印机设置,删除后重新添加,尝试不同的PPD(如M115 w或P115 w)。 2. 检查CUPS错误日志: sudo tail -f /var/log/cups/error_log,根据错误信息搜索。 |
| 打印出乱码或空白页 | 页面描述语言不匹配 | 这是最核心的问题。几乎可以确定是PPD文件不对。必须确保选择的是foo2zjs-z2推荐的PPD。如果选成了PostScript或PCL相关的PPD,必然乱码。 |
| Deepin桌面找不到已添加的打印机 | CUPS与桌面环境通信问题 | 1. 重启CUPS服务:sudo systemctl restart cups。2. 在Deepin打印机设置中手动添加,地址选择“其他”,输入: ipp://localhost/printers/M115b(替换为你的打印机名)。 |
| 打印速度慢或卡顿 | 驱动处理模式问题 | 在CUPS打印机属性中,找到“Printer State”下的“Configure Printer”,尝试将“Resolution”从高分辨率(如1200x600dpi)调整为600x600dpi,可以显著提升处理速度。 |
4.2 实操心得与独家技巧
- “推荐”字样是黄金标准:在CUPS选择PPD时,认准后面带有“
(recommended)”的选项。这是驱动维护者经过测试标记的最佳选择,成功率远高于自己胡乱尝试。 - 优先使用CUPS Web界面:虽然Deepin提供了图形化的打印机设置工具,但在处理这类“疑难杂症”打印机时,CUPS的Web界面更底层、更强大,选项也更全面。很多高级调试和设置只能在Web界面完成。
- 善用日志排错:
/var/log/cups/目录下的error_log和page_log是宝藏。打印失败时,第一时间用sudo tail -f /var/log/cups/error_log命令实时查看日志,错误信息会直接指向问题根源,比如“Unable to convert file 0 to printable format”往往就是PPD不对。 - 驱动安装的“干净”原则:如果你之前尝试过其他方法(比如从富士施乐官网下载
.deb包安装),导致系统混乱,可以先尝试彻底清理。命令如下:
然后从头开始按照本文步骤操作。这能避免旧配置的干扰。# 删除所有已配置的打印机 sudo lpadmin -x ALL # 清除CUPS缓存(谨慎操作,会删除所有打印机) sudo systemctl stop cups sudo rm -rf /etc/cups/ppd/ sudo rm -f /etc/cups/printers.conf* sudo systemctl start cups - 网络打印的可能性:如果你的M115b支持有线网络(需要额外模块),配置起来其实更简单稳定。在CUPS添加打印机时,选择“Internet Printing Protocol (ipp)”或“AppSocket/HP JetDirect”,输入打印机的IP地址(如
ipp://192.168.1.100),后续驱动选择步骤与USB方式完全相同。网络连接避免了USB的权限和热插拔问题。
5. 驱动原理浅析与方案对比
为什么foo2zjs能驱动M115b?这涉及到一点打印机语言的知识。M115b这类经济型激光打印机,通常不使用昂贵的、需要授权费的PostScript或PCL6语言,而是使用厂商自己定义的、更轻量的语言。富士施乐很多型号使用的是基于ZjStream的变种。
foo2zjs驱动的作用,就是接收CUPS传来的、标准的、格式化的打印数据(通常是PDF或光栅图像),然后通过其内置的算法,将这些数据**转换(渲染)**成打印机芯片能直接执行的ZjStream指令流。它提供的PPD文件则告诉CUPS:“我能处理这种转换,并且我知道M115b这台机器支持哪些纸张、哪些分辨率”。
我们可以对比一下几种方案的优劣:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| foo2zjs (本文方案) | 开源免费,社区支持好,与CUPS集成无缝,打印质量高,功能完整。 | 需要手动选择PPD,对新手稍有门槛。 | 绝大多数情况下的首选,适用于M115b及同类兄弟型号。 |
| 官方Linux驱动 | 理论上最匹配,可能包含特殊工具。 | 1. 对于M115b,官网很难找到。 2. 即使找到,可能是源代码包,需要编译,依赖复杂。 3. 可能只支持旧版内核。 | 仅在官方明确提供且易于安装(如.deb/rpm包)时考虑。 |
| Gutenprint通用驱动 | 支持型号极广,图形界面选择方便。 | 对某些特定型号(如M115b)的支持可能是“模拟模式”,打印质量或速度可能不如专用驱动。 | 当foo2zjs不包含你的打印机型号时的备选方案。 |
| Windows驱动 + cups-pdf | 完全不依赖Linux驱动。 | 1. 需要安装cups-pdf虚拟打印机。2. 打印流程复杂:先打印到PDF,再手动处理,效率极低。 3. 无法实现后台自动打印。 | 极不推荐,仅作为理论上的“最后手段”。 |
显然,从可靠性、易用性和性能综合考虑,foo2zjs方案是最优解。它本质上是在开源社区的努力下,为一大批“非主流”打印机型号建立了与Linux标准打印体系(CUPS)的可靠连接。
6. 长期使用维护与性能优化
驱动装好只是开始,要让打印机在Linux下稳定高效地工作,还需要一些维护和优化。
6.1 耗材状态监控
在Windows下,厂商软件通常会弹窗提醒碳粉不足。在Linux下,我们可以通过命令行工具foo2zjs包自带的工具来查询。首先,确保打印机通过USB连接,然后尝试:
# 查询打印机状态,不同型号支持的命令可能不同 sudo /usr/lib/cups/filter/command2foo2zjs -p /dev/usb/lp0 status或者,更通用的方法是安装snmp工具来查询网络打印机的信息(如果打印机支持网络并开启了SNMP)。对于USB打印机,Deepin的打印机状态窗口有时也能从驱动反馈中获取粗略的墨粉余量信息,但这取决于驱动对具体型号的支持程度。对于M115b,更实际的方法是记住大概的打印页数,或者直接观察打印质量变淡时更换硒鼓。
6.2 打印队列管理与故障恢复
打印机偶尔卡住是常有的事。学会管理打印队列非常有用。
# 查看所有打印任务 lpstat -o # 取消所有打印任务 cancel -a # 取消指定任务ID(例如M115b-12) cancel M115b-12 # 禁用/启用打印机 cupsdisable M115b cupsenable M115b如果打印机无响应,一个标准的故障恢复流程是:1) 在CUPS Web界面或命令行cupsdisable禁用该打印机;2) 物理关闭打印机电源;3) 等待10秒后重新开机;4)cupsenable启用打印机。这能清除打印机内存中的缓存错误。
6.3 性能调优设置
在CUPS Web界面中,进入你的M115b打印机设置,点击“Administration” -> “Modify Printer”,找到“Configure Printer”或“Default Options”,可以调整以下关键参数以提升体验:
- 分辨率 (Resolution):将默认的“1200x600 dpi”或“1200x1200 dpi”改为“600x600 dpi”。对于日常文档打印,600dpi清晰度完全足够,但能大幅减少需要处理的数据量,提升打印速度,特别是对于复杂页面或老旧电脑。
- 打印质量 (Print Quality):选择“Normal”而非“High”。原理同上。
- 双面打印 (Duplex):如果打印机硬件支持双面打印(M115b不支持),这里可以设置默认双面。
- 省墨模式 (Economy Mode):如果选项中有,开启后能节省碳粉,适合内部草稿打印。
经过这样一番从原理到实操,从安装到排错,再到优化维护的完整折腾,这台富士施乐DocuPrint M115b终于在Deepin Linux上重获新生。整个过程的核心,其实就是理解Linux下“驱动即配置”的理念,并借助开源社区成熟的解决方案(foo2zjs)来填补厂商支持的空白。现在,它就像在Windows下一样,安静地待在打印机列表里,随时等待工作指令。这种通过自己动手解决问题,让老旧硬件在新平台上继续发挥价值的成就感,或许就是使用Linux的乐趣之一吧。