1. 为什么要在银河麒麟上折腾一台联想打印机
单位去年开始批量换装银河麒麟V10 SP1,桌面环境从Windows切过来之后,办公软件、浏览器、即时通讯工具都还算顺利,唯独打印机这块卡了壳。我们科室配的是一台联想M7450F Pro,黑白激光一体机,带打印、复印、扫描、传真,平时用得最多的就是打印和复印。这台机器在Windows下插上USB线,系统自动识别,驱动装完就能用,前后不超过三分钟。换到麒麟系统之后,情况完全变了——系统设置里添加打印机,搜索不到设备;手动指定IP添加网络打印机,队列建起来了,发过去的任务全部卡在“正在处理”状态,打印机面板上的Paper灯一直闪,就是不吐纸。
这个问题不是个例。我在几个技术群里问了一圈,发现用银河麒麟的同事普遍遇到过类似情况:系统自带的打印机管理工具能识别一部分惠普和奔图的机器,但联想和兄弟这两个品牌的中低端激光机,尤其是M7450F Pro、M7400、2260D这些型号,识别率非常低。原因其实不复杂——银河麒麟V10基于Linux内核,打印机驱动走的是CUPS(Common Unix Printing System)体系,而联想这类机器在硬件层面跟兄弟的机器有很深的渊源,很多型号的打印语言、指令集是兼容的,但官方并没有为麒麟系统单独提供驱动包。联想官网的Linux驱动页面,更新停留在好几年前,只覆盖了少数几款高端机型,M7450F Pro根本不在列表里。
那怎么办?总不能因为一台打印机就把整个科室的国产化替换进度拖住。我花了大概两个周末的时间,反复试了各种方案,最后摸索出一套比较稳定的“替身”安装法——核心思路是:不依赖联想官方驱动,而是利用兄弟同平台机型在Linux下的开源驱动资源,通过手动指定PPD文件的方式,让CUPS把M7450F Pro当成一台兄弟打印机来驱动。这套方法在我手头的M7450F Pro上实测通过,打印、复印正常,扫描功能通过SANE框架也能跑起来,稳定性满足日常办公需求。
这篇文章就是把这套方法的完整操作流程、背后的原理、踩过的坑和排查技巧全部整理出来。如果你也在银河麒麟系统下被联想或兄弟打印机的驱动问题卡住,不管是M7450F Pro还是其他型号,这套思路都可以作为参考。文章偏实操,我会尽量把每一步的命令和参数都写清楚,同时解释为什么要这么做,方便你根据自己机器的实际情况做调整。
2. 先搞清楚问题出在哪:CUPS、PPD与打印语言
2.1 银河麒麟的打印体系到底是怎么工作的
很多人从Windows转过来,习惯性地认为“装打印机就是装驱动”,但在Linux体系下,这个认知需要调整一下。银河麒麟V10的打印服务由CUPS统一管理,CUPS是一个标准的打印系统,它负责接收应用程序的打印任务、转换成打印机能够理解的指令、然后通过USB或网络发送给打印机。整个链路可以粗略地分成三层:
- 应用层:WPS、LibreOffice、浏览器等发起打印请求,生成PDF或PostScript格式的中间文件。
- CUPS层:接收中间文件,根据队列配置的PPD文件,调用对应的过滤器(filter)把文件转换成打印机能识别的格式(通常是PCL或PostScript),然后发送。
- 后端层:通过USB、网络socket、IPP等协议把数据推送到打印机硬件。
关键就在PPD文件上。PPD是PostScript Printer Description的缩写,本质上是一个文本配置文件,里面描述了打印机的各项能力:支持多大的纸张、分辨率有哪些、是否支持双面、色彩模式怎么选、进纸盒怎么切换等等。CUPS根据PPD来决定用什么过滤器、传什么参数给打印机。如果PPD文件跟打印机实际能力不匹配,就会出现各种奇怪的问题——比如任务卡住、打印乱码、纸张尺寸不对、Paper灯闪烁报错。
Windows下的驱动是一个打包好的可执行程序,里面包含了PPD和一系列配套的转换组件,安装过程对用户透明。Linux下则需要手动把PPD放到正确的位置,并确保CUPS能找到对应的过滤器。银河麒麟自带的打印机管理工具(基于system-config-printer)会从本地数据库和网络上的OpenPrinting数据库搜索匹配的PPD,但它的数据库更新滞后,很多联想和兄弟的型号根本不在里面。
2.2 联想M7450F Pro与兄弟机型的“血缘关系”
这里需要说一个行业背景。联想在激光打印机领域,早期很多产品是跟兄弟合作或者采用兄弟的平台方案。M7450F Pro这款机器,从外观、耗材型号(硒鼓和粉盒)、操作面板布局到打印语言,都跟兄弟的DCP系列和MFC系列高度相似。具体到打印控制指令,它使用的是PCL5e/PCL6兼容指令集,这跟兄弟的很多机型是一致的。
这意味着什么?意味着如果我能找到一款硬件规格接近的兄弟机型,它的Linux驱动(PPD文件)大概率能驱动M7450F Pro。我在网上查了一些资料,也对比了机器打印出来的配置页,发现M7450F Pro的打印引擎分辨率是600x600 dpi,支持A4、Letter、A5等常见纸张,不支持自动双面(手动双面可以),这些参数跟兄弟DCP-7055、DCP-7060D、HL-2240D等机型非常接近。其中DCP-7060D的PPD文件在OpenPrinting数据库里有比较完整的支持,而且这些兄弟机型的驱动包在各大Linux发行版的仓库里都能找到。
注意:这里说的“替身”并不是说随便找一个兄弟驱动就能用。需要对比打印机的核心参数——打印语言、分辨率、纸张处理能力、接口类型。如果差异太大,即使队列能建起来,打印出来的效果也可能有问题,比如边距偏移、字体错乱、纸张尺寸识别错误。
2.3 为什么不能直接用联想官网的Linux驱动
联想官网确实提供了一些Linux驱动,但主要是针对ThinkCentre、ThinkPad配套的少数打印机型号,而且更新频率很低。我查过M7450F Pro的产品支持页面,Linux分类下是空的。有些第三方网站会提供所谓的“通用驱动”,但那些包大多是为特定发行版(如Ubuntu 16.04)打包的deb文件,依赖关系跟银河麒麟V10不一定兼容,强行安装可能会破坏系统的包管理状态。
另外,银河麒麟V10 SP1基于较新的Linux内核和glibc版本,一些老旧的二进制驱动即使安装上了,也可能因为库版本不匹配而无法正常运行。相比之下,使用开源的兄弟驱动方案,所有组件都是源码或标准包形式,跟系统的兼容性更好,出了问题也容易排查。
3. 动手之前的准备工作
3.1 确认系统版本和打印机连接方式
在开始操作之前,先确认几个基本信息。打开终端,执行:
cat /etc/kylin-release uname -r第一条命令查看银河麒麟的具体版本,第二条查看内核版本。我操作的环境是银河麒麟V10 SP1,内核版本5.4.18。不同版本的操作界面可能略有差异,但核心命令是一样的。
然后确认打印机的连接方式。M7450F Pro支持USB连接和网络连接(有线网络)。如果科室里多台电脑共用一台打印机,建议用网络连接,把打印机接在路由器或交换机上,设置一个固定IP。USB连接适合单机使用,但要注意银河麒麟下USB打印机的识别有时候不太稳定,尤其是热插拔之后。
我这边是网络连接,打印机IP设为192.168.1.200。你可以在打印机面板上进入网络设置查看IP,或者在Windows电脑上打印配置页查看。确认网络连通性:
ping 192.168.1.200能ping通说明网络层没问题。如果ping不通,先检查网线、IP设置和防火墙。
3.2 安装必要的工具包
银河麒麟V10默认可能没有安装一些打印相关的工具,需要手动补上。打开终端,执行:
sudo apt update sudo apt install cups cups-client cups-filters printer-driver-gutenprint foomatic-db-compressed-ppds system-config-printer这里解释一下每个包的作用:
- cups:打印服务核心。
- cups-client:提供lp、lpstat等命令行工具,方便排查问题。
- cups-filters:CUPS的过滤器集合,负责把PDF/PostScript转换成打印机指令。
- printer-driver-gutenprint:一个通用的打印机驱动集合,包含大量机型的PPD,作为备选方案。
- foomatic-db-compressed-ppds:OpenPrinting的PPD数据库压缩版,里面有海量的打印机配置文件。
- system-config-printer:图形化的打印机管理工具,银河麒麟的打印机设置界面就是基于它。
安装完成后,确保CUPS服务处于运行状态:
sudo systemctl enable cups sudo systemctl start cups sudo systemctl status cups看到“active (running)”就说明服务正常。如果服务起不来,检查是否有其他进程占用了631端口。
3.3 找到可用的兄弟驱动PPD
接下来需要找到兄弟DCP-7060D或其他兼容机型的PPD文件。有几个途径:
途径一:从系统自带的foomatic数据库中查找。安装完foomatic-db-compressed-ppds之后,PPD文件通常位于/usr/share/ppd/或/usr/share/cups/model/目录下。可以用find命令搜索:
find /usr/share/ppd -iname "*7060*" find /usr/share/cups/model -iname "*brother*"如果找到了兄弟的PPD,可以直接跳到下一步。如果没有找到,用途径二。
途径二:从兄弟官网下载Linux驱动包。兄弟官网的Linux驱动页面提供了多种格式的驱动包,包括deb和rpm。银河麒麟基于Debian体系,下载deb格式的驱动包。以DCP-7060D为例,下载“Linux printer driver”的deb包。下载完成后,不要直接双击安装,而是用dpkg命令解压查看内容:
dpkg -x brdcp7060dlpr-2.0.2-1.i386.deb /tmp/brother_driver/解压后进入目录,找到PPD文件:
find /tmp/brother_driver -iname "*.ppd"通常会在/tmp/brother_driver/usr/share/cups/model/下面找到类似Brother-DCP-7060D-cups-en.ppd的文件。把这个文件复制到一个方便访问的位置,比如/tmp/。
途径三:从OpenPrinting官网下载。OpenPrinting的网站上有大量打印机的PPD文件,搜索“Brother DCP-7060D”就能找到。下载下来是一个ppd.gz压缩包,解压后得到ppd文件。
我这边用的是途径二,从兄弟官网下载的DCP-7060D驱动包,解压后提取PPD。这个PPD文件大概有几十KB,是一个纯文本文件,可以用文本编辑器打开查看里面的参数。
提示:不同型号的兄弟打印机PPD可能略有差异,建议优先选择跟你的联想打印机硬件规格最接近的型号。如果DCP-7060D的PPD用不了,可以试试HL-2240D、DCP-7055、MFC-7360等型号的PPD。多试几个,找到最稳定的那个。
4. 核心操作:用兄弟PPD驱动联想打印机
4.1 通过命令行添加打印机队列
图形界面有时候会抽风,命令行更可控。先确认CUPS能发现打印机。如果是网络打印机,用lpinfo命令扫描:
lpinfo -v输出中应该能看到类似network socket://192.168.1.200或network ipp://192.168.1.200的条目。如果没有看到,说明CUPS没有发现网络打印机,需要手动指定URI。
添加打印机队列的命令格式是:
lpadmin -p <队列名> -E -v <设备URI> -m <PPD文件路径>具体到我们的场景:
sudo lpadmin -p Lenovo_M7450F_Pro -E -v socket://192.168.1.200:9100 -m /tmp/Brother-DCP-7060D-cups-en.ppd参数解释:
-p Lenovo_M7450F_Pro:队列名称,可以自定义,建议用英文和数字,避免空格和特殊字符。-E:启用队列并接受打印任务。-v socket://192.168.1.200:9100:设备URI。socket协议走的是9100端口,这是大多数网络打印机的标准端口。如果socket不行,可以试试ipp://192.168.1.200/ipp/print或lpd://192.168.1.200/PASSTHRU。-m /tmp/Brother-DCP-7060D-cups-en.ppd:指定PPD文件路径。
执行完这条命令后,用lpstat确认队列状态:
lpstat -p Lenovo_M7450F_Pro -l如果输出显示“printer Lenovo_M7450F_Pro is idle”,说明队列已经就绪。
4.2 设置默认选项和纸张参数
队列建好之后,还需要调整一些默认参数,否则打印出来的效果可能不对。用lpoptions命令查看和设置:
lpoptions -p Lenovo_M7450F_Pro -l这条命令会列出所有可配置的选项,比如PageSize、Resolution、InputSlot等。根据M7450F Pro的实际能力,设置默认纸张为A4,分辨率600dpi:
lpoptions -p Lenovo_M7450F_Pro -o PageSize=A4 -o Resolution=600dpi如果打印出来的内容偏移或者缩放不对,可能需要调整PageRegion或ImageableArea参数。这些参数在PPD文件里定义,如果默认值跟实际打印机不匹配,可以用lpoptions覆盖。比如:
lpoptions -p Lenovo_M7450F_Pro -o PageLeftMargin=0 -o PageRightMargin=0 -o PageTopMargin=0 -o PageBottomMargin=0注意:边距参数的单位是点(point),1点等于1/72英寸。设置过大的边距会导致内容被裁剪,设置过小可能导致内容打印到纸张外面。建议先用默认值打印一张测试页,根据实际效果微调。
4.3 打印测试页并验证
用lp命令打印一个简单的文本文件测试:
echo "This is a test page for Lenovo M7450F Pro on Kylin OS." | lp -d Lenovo_M7450F_Pro或者直接打印一个PDF文件:
lp -d Lenovo_M7450F_Pro /path/to/test.pdf观察打印机面板的反应。正常情况下,Paper灯不会闪烁,打印机会开始进纸并输出内容。如果Paper灯闪烁,说明打印机收到了无法识别的指令,或者纸张设置跟实际纸盒不匹配。这时候需要检查PPD文件是否选对了,以及纸张参数是否设置正确。
我第一次测试的时候,Paper灯闪了大概十秒钟,然后打印机吐出一张白纸。排查后发现是PPD文件里默认的纸张尺寸是Letter,而纸盒里装的是A4。用lpoptions把PageSize改成A4之后,问题解决。
4.4 扫描功能的配置思路
M7450F Pro的扫描功能在Linux下走的是SANE(Scanner Access Now Easy)框架。银河麒麟自带的扫描工具(比如简单扫描)可能识别不到这台机器,因为SANE的数据库里没有联想这个型号。跟打印类似,我们可以用兄弟的SANE后端来驱动。
首先安装SANE和相关工具:
sudo apt install sane sane-utils libsane-extras然后检查SANE是否能发现设备:
scanimage -L如果输出中没有联想M7450F Pro,可以尝试手动指定兄弟的后端。兄弟的SANE后端通常包含在驱动包里,解压deb包后,找到/usr/lib/sane/或/usr/lib/x86_64-linux-gnu/sane/目录下的libsane-brother*.so文件,复制到系统的SANE库目录:
sudo cp /tmp/brother_driver/usr/lib/sane/libsane-brother* /usr/lib/x86_64-linux-gnu/sane/然后编辑SANE的配置文件/etc/sane.d/dll.conf,添加一行brother。重启SANE服务:
sudo systemctl restart saned再次执行scanimage -L,应该能看到设备了。如果还是不行,可能需要手动指定网络扫描的IP地址。兄弟的SANE后端支持通过brsaneconfig工具配置网络扫描仪,但那个工具是兄弟专用的,在联想机器上不一定能用。一个替代方案是用scanimage直接指定设备URI:
scanimage --device "brother:net:192.168.1.200" --format=jpeg --resolution=300 > scan.jpg扫描这块的稳定性不如打印,有时候需要多试几次,或者重启打印机。如果扫描功能不是刚需,可以暂时跳过,优先保证打印和复印正常。
5. 常见问题排查与避坑经验
5.1 打印任务卡在“正在处理”怎么办
这是最常见的问题。任务发过去之后,CUPS显示队列中有任务,但打印机没反应,Paper灯闪烁或者常亮。排查思路如下:
第一步,检查队列状态和任务状态。
lpstat -p Lenovo_M7450F_Pro -o如果任务状态是“processing”但一直不完成,说明CUPS在等待打印机响应。这时候可以取消任务:
cancel -a Lenovo_M7450F_Pro第二步,检查CUPS的错误日志。
sudo tail -f /var/log/cups/error_log日志里会显示具体的错误信息,比如“Unable to send data to printer”、“Filter failed”等。根据错误信息定位问题。
第三步,确认设备URI是否正确。用lpinfo -v查看CUPS能识别的设备列表。如果网络打印机不在列表里,可能是防火墙挡住了9100端口。银河麒麟默认的防火墙可能会拦截入站连接,需要放行:
sudo firewall-cmd --add-port=9100/tcp --permanent sudo firewall-cmd --reload或者临时关闭防火墙测试:
sudo systemctl stop firewalld如果关闭防火墙后能打印,说明是防火墙规则的问题,需要添加放行规则而不是一直关闭防火墙。
第四步,检查PPD文件是否匹配。如果日志显示“Filter failed”,可能是PPD文件跟打印机不兼容。换一个兄弟型号的PPD试试,比如从DCP-7060D换成HL-2240D。
5.2 Paper灯闪烁的几种原因
Paper灯闪烁是打印机在“求救”,它在告诉你“我收到了指令,但我执行不了”。常见原因有:
- 纸张尺寸不匹配:纸盒里装的是A4,但打印任务指定的是Letter。解决方法是用lpoptions把默认纸张设为A4,或者在打印时手动选择A4。
- 纸张用完或卡纸:检查纸盒是否有纸,走纸通道是否有异物。
- 墨粉不足:虽然墨粉不足通常亮的是Toner灯,但有些机型会用Paper灯闪烁来提示。
- 打印语言不兼容:如果PPD文件指定的打印语言跟打印机实际支持的不一致,打印机会拒绝执行。这时候需要换PPD。
我遇到过一次比较诡异的情况:打印机之前接在Windows电脑上正常使用,换到麒麟系统后Paper灯一直闪。后来发现是打印机的“省墨模式”被开启了,而兄弟的PPD里默认没有启用这个模式,导致指令冲突。在打印机面板上关闭省墨模式后,问题解决。
5.3 打印出来是乱码或者排版错乱
这种情况通常是PPD文件里的分辨率或字体设置跟打印机不匹配。尝试以下调整:
- 降低分辨率:从1200dpi降到600dpi。
- 更换字体:在PPD里指定使用打印机内置字体,而不是下载字体。
- 更换过滤器:CUPS默认使用
pdftopdf和gstoraster过滤器,如果效果不好,可以试试foomatic-rip。
用lpoptions调整:
lpoptions -p Lenovo_M7450F_Pro -o Resolution=600dpi -o Font=Internal如果调整后仍然乱码,可能是PPD文件本身有问题。从OpenPrinting下载另一个版本的PPD试试。
5.4 系统重启后打印机队列消失
银河麒麟下,有时候重启后CUPS的队列配置会丢失。这是因为队列配置没有持久化保存。解决方法是在添加队列时加上-E参数,并且确保CUPS的配置文件/etc/cups/printers.conf有正确的权限。另外,可以用lpadmin的-u allow:all参数允许所有用户使用打印机:
sudo lpadmin -p Lenovo_M7450F_Pro -u allow:all如果队列还是丢失,可以写一个简单的脚本,在系统启动时自动重建队列。把lpadmin命令放到/etc/rc.local或者创建一个systemd服务。
5.5 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 任务卡在“正在处理” | 设备URI错误或防火墙拦截 | 查看error_log,检查9100端口 | 修正URI,放行防火墙端口 |
| Paper灯闪烁 | 纸张尺寸不匹配或打印语言不兼容 | 检查纸盒纸张,查看PPD设置 | 设置PageSize=A4,更换PPD |
| 打印乱码 | 分辨率或字体设置错误 | 打印测试页观察效果 | 调整Resolution和Font参数 |
| 队列重启后消失 | 配置未持久化 | 检查printers.conf | 添加-E参数,设置开机自启脚本 |
| 扫描仪识别不到 | SANE后端未加载 | 执行scanimage -L | 复制兄弟SANE库,配置dll.conf |
6. 一些实操心得和后续优化方向
这套“替身”安装法我在三台不同配置的银河麒麟机器上都试过,两台是USB连接,一台是网络连接。USB连接的机器,设备URI用usb://Brother/DCP-7060D这种格式有时候能识别,但不太稳定,建议还是走网络。网络连接的那台机器最稳定,连续打印几十页没有出现卡顿或丢任务的情况。
有一个细节值得注意:兄弟的PPD文件里默认可能启用了“双面打印”选项,但M7450F Pro不支持自动双面。如果打印任务里勾选了双面,打印机会把两页内容打在同一面上,或者直接报错。解决方法是在lpoptions里禁用双面:
lpoptions -p Lenovo_M7450F_Pro -o Duplex=None另外,如果科室里有多台电脑需要共用这台打印机,可以在麒麟系统上配置CUPS共享,让其他电脑通过IPP协议连接。在/etc/cups/cupsd.conf里添加:
Listen 0.0.0.0:631 <Location /> Allow all </Location>然后重启CUPS服务。其他电脑在添加打印机时,选择“网络打印机”,输入ipp://<麒麟电脑IP>:631/printers/Lenovo_M7450F_Pro即可。
最后说一个我踩过的坑:银河麒麟的软件源里有一个printer-driver-brother包,看起来像是兄弟打印机的驱动合集,但安装之后发现它只包含少数几个老型号的PPD,M7450F Pro对应的兄弟机型不在里面。所以不要指望这个包能解决问题,还是得手动下载PPD。
这套方法的核心逻辑其实可以推广到其他联想和兄弟的打印机型号上。关键步骤就三步:找到硬件规格最接近的兄弟机型,提取它的PPD文件,用lpadmin手动建队列。只要打印语言兼容,成功率很高。如果你手头的机器型号比较特殊,可以多试几个兄弟的PPD,从DCP系列、HL系列、MFC系列里挑参数最接近的。实测下来,DCP-7060D的PPD对M7450F Pro的兼容性最好,打印和复印都正常,扫描需要额外配置但也能用。