
1. 为什么要在银河麒麟上折腾一台联想打印机单位去年开始批量换装银河麒麟V10 SP1桌面环境从Windows切过来之后办公软件、浏览器、即时通讯工具都还算顺利唯独打印机这块卡了壳。我们科室配的是一台联想M7450F Pro黑白激光一体机带打印、复印、扫描、传真平时用得最多的就是打印和复印。这台机器在Windows下插上USB线系统自动识别驱动装完就能用前后不超过三分钟。换到麒麟系统之后情况完全变了——系统设置里添加打印机搜索不到设备手动指定IP添加网络打印机队列建起来了发过去的任务全部卡在“正在处理”状态打印机面板上的Paper灯一直闪就是不吐纸。这个问题不是个例。我在几个技术群里问了一圈发现用银河麒麟的同事普遍遇到过类似情况系统自带的打印机管理工具能识别一部分惠普和奔图的机器但联想和兄弟这两个品牌的中低端激光机尤其是M7450F Pro、M7400、2260D这些型号识别率非常低。原因其实不复杂——银河麒麟V10基于Linux内核打印机驱动走的是CUPSCommon 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-filtersCUPS的过滤器集合负责把PDF/PostScript转换成打印机指令。printer-driver-gutenprint一个通用的打印机驱动集合包含大量机型的PPD作为备选方案。foomatic-db-compressed-ppdsOpenPrinting的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分辨率600dpilpoptions -p Lenovo_M7450F_Pro -o PageSizeA4 -o Resolution600dpi如果打印出来的内容偏移或者缩放不对可能需要调整PageRegion或ImageableArea参数。这些参数在PPD文件里定义如果默认值跟实际打印机不匹配可以用lpoptions覆盖。比如lpoptions -p Lenovo_M7450F_Pro -o PageLeftMargin0 -o PageRightMargin0 -o PageTopMargin0 -o PageBottomMargin0注意边距参数的单位是点point1点等于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下走的是SANEScanner 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直接指定设备URIscanimage --device brother:net:192.168.1.200 --formatjpeg --resolution300 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-port9100/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 Resolution600dpi -o FontInternal如果调整后仍然乱码可能是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设置设置PageSizeA4更换PPD打印乱码分辨率或字体设置错误打印测试页观察效果调整Resolution和Font参数队列重启后消失配置未持久化检查printers.conf添加-E参数设置开机自启脚本扫描仪识别不到SANE后端未加载执行scanimage -L复制兄弟SANE库配置dll.conf6. 一些实操心得和后续优化方向这套“替身”安装法我在三台不同配置的银河麒麟机器上都试过两台是USB连接一台是网络连接。USB连接的机器设备URI用usb://Brother/DCP-7060D这种格式有时候能识别但不太稳定建议还是走网络。网络连接的那台机器最稳定连续打印几十页没有出现卡顿或丢任务的情况。有一个细节值得注意兄弟的PPD文件里默认可能启用了“双面打印”选项但M7450F Pro不支持自动双面。如果打印任务里勾选了双面打印机会把两页内容打在同一面上或者直接报错。解决方法是在lpoptions里禁用双面lpoptions -p Lenovo_M7450F_Pro -o DuplexNone另外如果科室里有多台电脑需要共用这台打印机可以在麒麟系统上配置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包看起来像是兄弟打印机的驱动合集但安装之后发现它只包含少数几个老型号的PPDM7450F Pro对应的兄弟机型不在里面。所以不要指望这个包能解决问题还是得手动下载PPD。这套方法的核心逻辑其实可以推广到其他联想和兄弟的打印机型号上。关键步骤就三步找到硬件规格最接近的兄弟机型提取它的PPD文件用lpadmin手动建队列。只要打印语言兼容成功率很高。如果你手头的机器型号比较特殊可以多试几个兄弟的PPD从DCP系列、HL系列、MFC系列里挑参数最接近的。实测下来DCP-7060D的PPD对M7450F Pro的兼容性最好打印和复印都正常扫描需要额外配置但也能用。