
简介面向 Linux 用户的佳能 CUPS 驱动安装包基于 cndrvcups-common 3.21 通用驱动组件解决佳能打印机在多种 Linux 发行版下无法直接识别、打印队列配置困难的问题。内置驱动动态库、色彩校准 ICC 文件、打印机描述与安装配置脚本可配合 CUPS 的 lpadmin、lpstat、cupsenable、cupsdisable 等命令完成队列管理。压缩包共 195 个文件、16.48MB其中 .so 共享库承载打印与 USB 通信功能76 个 ICC 文件用于色彩管理C 源码与头文件便于二次编译Shell 脚本用于安装部署readme、changelog 等文档辅助排错。同时打印机描述文件会被 CUPS 自动识别安装时按机型匹配对应配置。已有 1065 人学习下载。对于初次接触佳能打印机的 Linux 新手可以通过图形向导或命令行两种方式添加设备对于需要批量部署的运维人员该驱动包把分散的依赖与配置说明集中整理能显著节省排查时间提供了一条通用、稳定、可控的 Canon 打印解决方案。1. 佳能 Linux 驱动没那么玄先看穿 CUPS 这台“黑匣子”的脾气以前帮同事在 Ubuntu 上装一台佳能 LBP2900折腾一下午最后发现不是驱动没装上而是 CUPS 里打印机队列的 URI 填错了。这个经历大概每个 Linux 用户都撞过佳能官方驱动包解压出来一堆 .deb、.rpm 和 PPD 文件安装脚本跑完以为完事结果 lpadmin 一执行就报 Filter not available。实际上佳能 Linux 驱动在 CUPS 架构里分三层——过滤器负责把数据转成打印机语言、后端负责找到 USB 或网络设备、PPD 描述打印机能力三者各自装到位才能通。这份资源适合被佳能打印机折磨过的人、给 armbian 这类嵌入式系统装过打印机的折腾型用户以及刚转 Linux 的运维新手。先把 CUPS 这条链路拆明白驱动安装就成功了一半。2. 驱动选型官方 cnijfilter、源码包与 PPD 文件三条路怎么挑2.1 佳能驱动的真实目录结构过滤器、后端与 PPD 各管什么佳能打印机在 Linux 下不像 Windows 那样一个完整安装包全搞定它是散装的。解压官方驱动包后你会看到 cnijfilter2 系列安装文件、libcnbpcnclapicom 这类底层库、还有一个 ppd 目录。不要被这些名字吓到它们对应 CUPS 的三个固定位置可执行过滤器一般进/usr/lib/cups/filter/或/usr/libexec/cups/filter/看发行版打印机通信后端在/usr/lib/cups/backend/PPD 文件则统一放/usr/share/cups/model/下。为什么拆这么散因为 CUPS 的打印流水线是“应用程序 → CUPS 调度器 → 过滤器链 → 后端 → 打印机”。佳能喷墨机的 cnijfilter 过滤器负责把 PDF、PostScript 转成佳能自家指令集激光机的 LIPS 指令则走另一套过滤器。如果过滤器权限不对或依赖缺失队列状态就是“已发送”但打印机没反应日志里报 Filter not available。后端这块USB 直连的设备会自动生成usb://Canon/LBP2900?serialxxx这样的 URI网络打印机则走dnssd://或socket://。看清楚这三层选驱动才不会选错。2.2 官方包与社区包怎么选rpmbuild 重打包与 PPD 直取佳能官网的分发方式很典型给 Ubuntu/Debian 系发 .deb给 RHEL/Fedora 系发 .rpm有的老机型只给 tar.gz 源码包。源码包里通常嵌套着一个 rpm 目录这时候先装 rpm-build 工具链然后rpmbuild --rebuild在本地把源码包重新打包成适配你系统的 rpm再安装。这个流程看着绕实际上就是佳能没跟上现代发行版的动态链接库变化重打包能解决依赖路径不一致的问题。社区方案里openprinting 数据库提供 foomatic 驱动的 PPDAUR 上有 canon 系列打包但这些适合驱动包实在找不到的情况。我的原则官方有对应包优先官方官方包在系统上装不进去比如新内核的 glibc 兼容问题再考虑社区版。还有一个容易被忽略的路径——部分佳能打印机的 PPD 可以直接从驱动包里单独提取出来配合 CUPS 原生驱动的时间轴来用。因为 PPD 本质是文本文件描述的是分辨率、页面尺寸、双面模式这些能力参数它不依赖二进制过滤器很多场景下“只装 PPD 通用过滤器”就能让打印机跑起来。2.3 三种安装方式的对比与适用发行版给一份实测过的选择逻辑基于我装过 LBP2900、LBP3018、MG3670、G3800 这几台机器的经验安装方式适用场景优点常见坑官方 .deb/.rpm 直装Ubuntu/Debian/Fedora 主流版本依赖自动处理、过滤器完整新发行版可能依赖冲突源码包 rpmbuild 重打包RHEL 系、老机型只有源码包可适配当前系统需要安装构建工具链只提取 PPD CUPS 原生官方包彻底装不上时轻量、快速高级功能如墨量检测可能失效需要提醒的是佳能新出的驱动包叫 cnijfilter2老机型则是 cnijfilter两者不能混用。下载驱动前先确认你的打印机属于哪个驱动系列——看官网驱动页的型号归类就行这一步错了后面全白费。嵌入式环境比如 armbian 装 CUPS如果官方驱动包是 x86 编译的就得靠 PPD 文件加通用方案兜底下章讲具体的安装流程。3. 从下载到装进 CUPS命令行与网页后台的双线操作3.1 设备识别先行lsusb 与 lpinfo -v 该看什么驱动装好不等于 CUPS 认识你的打印机。第一步先确认系统确实看到了设备执行lsusb | grep -i canon Bus 003 Device 004: ID 04a9:2621 Canon Inc. LBP2900看到 04a9佳能分配到的 USB Vendor ID就说明内核识别了。但内核识别 ≠ CUPS 识别。CUPS 用自己的后端去枚举设备要执行lpinfo -v | grep -i canon direct usb://Canon/LBP2900?serial00004321lpinfo -v是列出 CUPS 所有可用的设备后端如果这里为空或只有network开头的条目说明 usb 后端没加载或设备被权限挡了。我一般还会顺手跑lpinfo -m | grep -i canon查看系统里已有的佳能 PPD 列表确认驱动包安装正确。这一步是后面所有操作的地基很多翻车都发生在“驱动装得挺顺利但 lpinfo 不输出设备 URI”这个环节——不是驱动坏了是 CUPS 服务装完后没重启后端没有重新扫描。3.2 命令行安装路径解包、执行安装脚本、重启 cups拿到官方驱动包后标准流程是这样tar -zxvf cnijfilter2-5.90-1-deb.tar.gz cd cnijfilter2-5.90-1-deb sudo ./install.shinstall.sh 会检查依赖并把过滤器、PPD、后端放入对应目录。我习惯装完立刻重启 CUPS 服务因为安装脚本未必帮你重启sudo systemctl restart cups sudo lpinfo -v | grep -i canon这里解释下为什么必须重启CUPS 在启动时扫描一次后端和过滤器目录并缓存结果安装脚本往目录里丢进了新二进制不重启 CUPS 是不会加载它们的。rpm 系发行版注意如果 install.sh 报缺 libtiff.so.5 这类依赖那不是脚本的错是系统缺少兼容库用 dnf 装libtiff-compat之类再跑。3.3 网页后台路径http://localhost:631 的添加流程图形界面党可以完全绕开命令行浏览器打开http://localhost:631点 Administration → Add Printer。系统会要求输入 root 密码注意不是当前用户的 sudo 密码。流程分四步选设备列表里会出现usb://Canon/LBP2900?serial...→ 选驱动从列表里挑 Canon LBP2900 对应的 PPD→ 命名队列 → 设置默认选项。整个过程在这个网页后台完成生成的队列与命令行操作完全等价。网页后台的优势是能直接看到 CUPS 的实时状态页Jobs 面板打印任务卡没卡、Supplies 面板能不能读到墨量/粉量。但有一个坑网页后台在“Add Printer”界面如果看不到 USB 设备说明 cups-files.conf 里的权限配置限制了用户组这时候先回命令行解决设备可见性问题别在网页里硬刷新。3.4 lpadmin 核心参数拆解URI、PPD、启用顺序命令行添加打印机的核心命令是 lpadmin参数顺序有讲究随手记一下sudo lpadmin -p LBP2900 \ -v usb://Canon/LBP2900?serial00004321 \ -P /usr/share/cups/model/CNG_CUPS_LBP2900_KPD.ppd \ -E-p指定队列名之后所有操作都用这个名字引用-v是设备 URI千万要和 lpinfo -v 输出的一致手动敲容易把?serial后面的参数敲漏-P指定 PPD 完整路径这一步决定了 CUPS 知道打印机能做什么最后的-E表示启用队列。参数顺序上-E必须在 URI 和 PPD 之后如果把它放前面会启用一个只有名字没有配置的哑队列。添加完成后立刻验证lpstat -p -l LBP2900输出里出现printer LBP2900 is idle. enabled才算真正建好队列。验证完别急着大批量打印先在网页后台或命令行发一张测试页——佳能在 PPD 里专门放了测试页生成逻辑能直观看出驱动链是否完整。这一步走完驱动安装的骨架就搭好了。4. PPD 参数调优介质、双面与色彩在底层怎么改4.1 PPD 文件里藏着打印机的全部“性格”PPD 文件本质是纯文本打开来看会发现大量*DefaultPageSize: A4、*DefaultResolution: 600dpi这样的键值对。CUPS 在添加打印机时读取这些默认值打印任务的优先级高于队列默认值再覆盖 PPD 默认值。理解了这条链你就知道为什么打印出来的纸质和颜色不对时先去查 PPD 里的默认配置。以 LBP2900 的 PPD 为例关键的几个参数组包括 PageSize纸张尺寸、Resolution分辨率有 300/600/1200 三档、Duplex双面打印。我常用 grep 直接查看grep -E Default(PageSize|Resolution|Duplex|ColorModel) /usr/share/cups/model/CNG_CUPS_LBP2900_KPD.ppd如果 PPD 里*DefaultPageSize是 Letter 而国内买的是 A4 纸打出来的文档上下会被裁掉一小截——这是新手最爱翻的车。PPD 文件改动后CUPS 不一定立即重新读取稳妥做法是sudo lpadmin -x LBP2900删除队列再重新添加让调度器彻底重读。还有一个细节改动 PPD 后即使重启 cups 服务已存在的队列也可能使用缓存配置删除重建是最可靠的办法。4.2 lpoptions 设置默认值的正确姿势改 PPD 文件本身太粗暴正规做法是用 lpoptions 设置每个队列的默认选项lpoptions -p LBP2900 -o PageSizeA4 -o Resolution600 -o DuplexDuplexTumble lpoptions -p LBP2900 -l第一条命令把这些默认值写入/etc/cups/printers.conf的DefaultOptions行第二条-l列出该队列所有可用选项及合法值。注意-p后面必须跟队列名不带-p时 lpoptions 操作的是默认打印机容易让你以为改成功了实际改给了别的队列。双面打印的参数最容易迷糊佳能驱动里DuplexDuplexTumble表示长边翻页、DuplexDuplexNoTumble表示短边翻页。中文语境里“长边翻页”对应书本式翻页、适合纵向文档“短边翻页”对应翻页本式、适合横向表格。记口诀文档内容是纵向排版的选 Tumble横向排版的选 NoTumble。拿不准就打一张双面测试页看装订方向不要靠猜。4.3 色彩与双面的三个常见误调G3800 这类喷墨机的调参比激光更讲究。PPD 里ColorModel选项控制输出色彩空间常见值是 Gray灰度、RGB彩色、CMYK。我碰到过有人打印普通文档选了照片纸的 MediaType结果墨水洇纸严重——那不是机器坏了是介质类型和物理纸张不匹配导致墨量控制错误。另一个高频问题打印彩色文档时偏红或偏蓝。佳能 PPD 的色彩管理依赖 MediaType 和 ColorModel 的组合设定前者管墨量后者管色彩空间两者要配套。还有一个容易忽略的点佳能部分喷墨机的 PPD 里Quality选项有两档Standard 和 HighHigh 会明显降低打印速度并增加墨水消耗。普通人办公用 Standard 足够只有打印照片才建议 High。这些参数在 lpoptions -l 的输出里都能看到合法值改错了顶多废几张纸不会伤机器放心试。5. 避坑日记佳能 Linux 驱动五条血泪经验5.1 Filter not available依赖装全了还是报错现象lpadmin 添加队列时报Filter not available或打印任务状态卡在 Processing 后消失打印机毫无反应。原因CUPS 在打印时按过滤器链查找/usr/lib/cups/filter下的可执行文件最常见是 cnijfilter 压根没装进去或者装进去但缺依赖库。佳能驱动依赖 libxml2、libcupsimage 这些RHEL 系发行版经常只装了 libcups 没装 libcupsimage。解决先确认文件存在且可执行ls -l /usr/lib/cups/filter/cnijfilter_LBP2900 sudo chmod 755 /usr/lib/cups/filter/cnijfilter_*如果文件存在仍报错用 ldd 查动态库缺失ldd /usr/lib/cups/filter/cnijfilter_LBP2900 | grep not found缺什么装什么Debian 系装libcupsimage2RHEL 系装libcups。从那以后我每次添加打印机前都会强制确认过滤器文件权限和依赖——这个习惯救过我多次。5.2 打印机显示空闲却不出纸URI 选错了现象队列状态正常、任务显示 completed但打印机一点反应都没有。原因最常见是设备 URI 填成了usb://dev/usb/lp0而不是usb://Canon/LBP2900。佳能驱动在 CUPS 里自带的 uri 里带?serial参数是为了区分同一型号的多台设备直接指到 lp0 绕过了佳能后端按型号匹配的逻辑。解决执行lpadmin -p LBP2900 -U查看当前 URI 设置对照 lpinfo -v 的输出把 URI 改成与后端发现一致然后运行sudo lpadmin -p LBP2900 -v usb://Canon/LBP2900?serial00004321 -E。另外如果你插着多台打印机且都用了?serialCUPS 可能匹配到错的那台——拔掉其他佳能设务后重试即可判断。5.3 双面装订方向反了Tumble 语义别搞混现象打印双面文档翻页方向总是反的装订后在页面反面上下颠倒。原因CUPS 里长边翻页和短边翻页的定义在不同驱动之间可能相反这属于“玄学”问题跟驱动实现有关。解决直接实测不猜。先打印一张双面测试页如果反面上下倒置把DuplexDuplexTumble改成DuplexDuplexNoTumble再打一次。执行lpoptions -p LBP2900 -o DuplexDuplexNoTumble后立刻发打印任务对比。记住一个原则正面读完翻页如果文字从“顶端变底端”就说明翻页边反了换个模式就好不需要动纸盒设置。5.4 USB 权限问题导致任务被挂起现象任务状态停在 Processing 超过十秒日志里反复提示Unable to open USB device。原因CUPS 没有对设备节点的读取权限。家用情况下打印机插在 USB hub 上或者系统里跑着 saned 服务抢占了 USB 设备的排他访问。解决看 CUPS 错误日志定位具体的权限报错然后给设备授权sudo lpadmin -p LBP2900 -o usb-unidirtrue sudo systemctl restart cups如果设了 unidir 还是不行就是 saned 抢占。执行sudo systemctl stop saned临时停掉扫描服务打印完成后再启动。USB hub 的问题很隐蔽——有些便宜 hub 会把打印机识别成非规范设备佳能后端直接跳过了这种情况只能换直连。5.5 打印出来全是乱码PPD 被过滤器链旁路了现象任务正常完成但纸张上输出的是 PostScript 源码一样的文本或者一堆看不懂的控制符。原因CUPS 没找到适合处理 PostScript 的过滤器直接把原始数据透传给打印机。出现这种情况通常是 cups-filters 包损坏或版本过旧也可能是佳能驱动覆盖了自己的 PPD导致 MIME 类型匹配错乱。解决先确认 cups-filters 安装完整dpkg -l | grep cups-filters # Debian/Ubuntu rpm -qa | grep cups-filters # RHEL/Fedora然后检查 PPD 里cupsFilter一行grep cupsFilter /usr/share/cups/model/CNG_CUPS_LBP2900_KPD.ppd如果这一行指向application/vnd.canon.enc或类似佳能私有格式说明 PPD 正确问题在过滤器层面。重装 cups-filters 基本能解决这个坑——这是所有乱码问题里最后悔没早做的事因为重装两分钟就结束排查却花了一小时。6. 验证驱动的正确姿势cupsfilter 离线检查与错误日志取证驱动配好了但怎么确认它真的工作打一张测试页当然可以但办公室打印机频繁打印测试页不现实。更专业的验证方法是用 cupsfilter 离线模拟整个过滤链完全不碰物理打印机cupsfilter -m application/pdf -p /etc/cups/printers.conf -o PageSizeA4 test.pdf /tmp/test.prn-m指定输出 MIME 格式-p传入打印机配置-o设置打印选项重定向输出的就是打印机会收到的原始数据流。命令执行不报错说明过滤器链完整打开 /tmp/test.prn 如果是佳能私有格式的数据二进制、非文本可读说明 PPD 里的 cupsFilter 声明生效了。这一步在排查“为什么打印出来的东西不对”时特别管用——不用消耗纸张就能确认软件层到底输出了什么。验证服务状态时CUPS 的错误日志是最直接的证据。先调高日志级别再复现一次问题sudo cupsctl LogLeveldebug lp -d LBP2900 test.pdf tail -f /var/log/cups/error_log重点看几个关键信息Filter行是否报缺文件、Backend行是否报设备打开失败、Job行的状态流转是否正常。调试完把日志级别降回 warn避免日志文件持续膨胀。从那次双面方向搞反以后我每次装完驱动都强制走一遍这套离线校验加日志检查的流程一套下来十分钟但能省掉后续打印废纸的返工时间。整理这套佳能 CUPS 驱动资源的时候我也是按这个流程逐个验证过滤掉的坑下载解压后建议先跑一遍 lpinfo -v 和 cupsfilter 校验再实际打印希望帮到你。本文还有配套的精品资源点击获取