简介:面向 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?serial=xxx这样的 URI,网络打印机则走dnssd://或socket://。看清楚这三层,选驱动才不会选错。
2.2 官方包与社区包怎么选:rpmbuild 重打包与 PPD 直取
佳能官网的分发方式很典型:给 Ubuntu/Debian 系发 .deb,给 RHEL/Fedora 系发 .rpm,有的老机型只给 tar.gz 源码包。源码包里通常嵌套着一个 rpm 目录,这时候先装 rpm-build 工具链,然后rpmbuild --rebuild在本地把源码包重新打包成适配你系统的 rpm,再安装。这个流程看着绕,实际上就是佳能没跟上现代发行版的动态链接库变化,重打包能解决依赖路径不一致的问题。
社区方案里,openprinting 数据库提供 foomatic 驱动的 PPD,AUR 上有 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?serial=00004321lpinfo -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?serial=00004321" \ -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 PageSize=A4 -o Resolution=600 -o Duplex=DuplexTumble lpoptions -p LBP2900 -l第一条命令把这些默认值写入/etc/cups/printers.conf的DefaultOptions行,第二条-l列出该队列所有可用选项及合法值。注意-p后面必须跟队列名,不带-p时 lpoptions 操作的是默认打印机,容易让你以为改成功了实际改给了别的队列。
双面打印的参数最容易迷糊:佳能驱动里Duplex=DuplexTumble表示长边翻页、Duplex=DuplexNoTumble表示短边翻页。中文语境里“长边翻页”对应书本式翻页、适合纵向文档;“短边翻页”对应翻页本式、适合横向表格。记口诀:文档内容是纵向排版的选 Tumble,横向排版的选 NoTumble。拿不准就打一张双面测试页看装订方向,不要靠猜。
4.3 色彩与双面的三个常见误调
G3800 这类喷墨机的调参比激光更讲究。PPD 里ColorModel选项控制输出色彩空间,常见值是 Gray(灰度)、RGB(彩色)、CMYK。我碰到过有人打印普通文档选了照片纸的 MediaType,结果墨水洇纸严重——那不是机器坏了,是介质类型和物理纸张不匹配导致墨量控制错误。
另一个高频问题:打印彩色文档时偏红或偏蓝。佳能 PPD 的色彩管理依赖 MediaType 和 ColorModel 的组合设定,前者管墨量,后者管色彩空间,两者要配套。还有一个容易忽略的点,佳能部分喷墨机的 PPD 里Quality选项有两档,Standard 和 High,High 会明显降低打印速度并增加墨水消耗。普通人办公用 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 系装libcupsimage2,RHEL 系装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?serial=00004321" -E。另外,如果你插着多台打印机且都用了?serial=,CUPS 可能匹配到错的那台——拔掉其他佳能设务后重试即可判断。
5.3 双面装订方向反了:Tumble 语义别搞混
现象:打印双面文档,翻页方向总是反的,装订后在页面反面上下颠倒。
原因:CUPS 里长边翻页和短边翻页的定义在不同驱动之间可能相反,这属于“玄学”问题,跟驱动实现有关。
解决:直接实测,不猜。先打印一张双面测试页,如果反面上下倒置,把Duplex=DuplexTumble改成Duplex=DuplexNoTumble再打一次。执行lpoptions -p LBP2900 -o Duplex=DuplexNoTumble后立刻发打印任务对比。记住一个原则:正面读完翻页,如果文字从“顶端变底端”就说明翻页边反了,换个模式就好,不需要动纸盒设置。
5.4 USB 权限问题导致任务被挂起
现象:任务状态停在 Processing 超过十秒,日志里反复提示Unable to open USB device。
原因:CUPS 没有对设备节点的读取权限。家用情况下,打印机插在 USB hub 上,或者系统里跑着 saned 服务抢占了 USB 设备的排他访问。
解决:看 CUPS 错误日志定位具体的权限报错,然后给设备授权:
sudo lpadmin -p LBP2900 -o usb-unidir=true 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 PageSize=A4 test.pdf > /tmp/test.prn-m指定输出 MIME 格式,-p传入打印机配置,-o设置打印选项,重定向输出的就是打印机会收到的原始数据流。命令执行不报错,说明过滤器链完整;打开 /tmp/test.prn 如果是佳能私有格式的数据(二进制、非文本可读),说明 PPD 里的 cupsFilter 声明生效了。这一步在排查“为什么打印出来的东西不对”时特别管用——不用消耗纸张就能确认软件层到底输出了什么。
验证服务状态时,CUPS 的错误日志是最直接的证据。先调高日志级别再复现一次问题:
sudo cupsctl LogLevel=debug lp -d LBP2900 test.pdf tail -f /var/log/cups/error_log重点看几个关键信息:Filter行是否报缺文件、Backend行是否报设备打开失败、Job行的状态流转是否正常。调试完把日志级别降回 warn,避免日志文件持续膨胀。从那次双面方向搞反以后,我每次装完驱动都强制走一遍这套离线校验加日志检查的流程,一套下来十分钟,但能省掉后续打印废纸的返工时间。整理这套佳能 CUPS 驱动资源的时候,我也是按这个流程逐个验证过滤掉的坑,下载解压后建议先跑一遍 lpinfo -v 和 cupsfilter 校验再实际打印,希望帮到你。
本文还有配套的精品资源,点击获取