简介:佳能CUPS Linux驱动是一套面向Linux系统的佳能打印机通用驱动方案,基于CUPS标准打印接口,解决多发行版下打印机识别、队列管理与作业监控等问题。压缩包共195个文件,大小16.48MB,主要包含icc色彩特性文件、c/c++源码与头文件、so动态库、驱动配置脚本以及txt/readme文档等,可为安装调试、二次开发与故障排查提供参考。资源已有1083人学习下载,适合Linux运维人员、打印服务管理员以及需要配置佳能打印机的用户。包内驱动以cndrvcups-common为核心,涵盖通用打印组件与配套管理工具,安装后可通过图形向导或lpadmin、lpstat等命令行完成打印机添加与队列控制。对于遇到兼容性问题的用户,还可结合changelog、readme和configure文件快速定位内核或发行版适配要点,降低自行摸索成本。
1. 给一台上个月才配好的 Linux 工作站装佳能 cups linux 驱动,打印机却怎么都认不出来
这是我最近帮人处理得最多的一类问题:驱动包下载下来了,dpkg 也装进去了,CUPS 界面里却连型号都看不到,打印任务永远停在“排队”。折腾到最后才发现,要么是型号选错,要么是 usblp 内核模块没加载,要么是队列 URI 写错——每一步看起来都对,合在一起就是打不出来。这篇文章以佳能 cups linux 驱动为主线,把环境准备、官方包安装、CUPS 队列配置到验证测试页的完整流程记录一遍,并单独整理了几条实际部署时踩过的坑。如果你正在给 Ubuntu、Debian 或 Fedora 这类系统配佳能打印机,这篇笔记值得看完再动手。
2. 装驱动前的环境准备:确认机型、CUPS 版本与运行库清单
佳能 Linux 驱动和 Windows 驱动最大的区别在于:Windows 下装完 exe 就能打,Linux 下驱动只是给 CUPS 提供了一个 PPD 描述文件和几个后端程序,真正的打印调度是 CUPS 在管。所以顺序非常重要——先把 CUPS 环境弄干净,再谈装驱动。
2.1 先认准打印机型号,再谈驱动包
有位某开发者找我配一台旧佳能打印机,他下载的驱动包解压后dpkg -i也成功了,但localhost:631添加打印机时型号列表里什么都没有。查了半天,发现他下的是另一系列机型的驱动,和打印机对不上号,PPD 文件自然没被 CUPS 加载。所以要做的第一件事不是下载,而是确认打印机实际型号。
Linux 下确认型号最直接的方法是用lsusb,看 USB 厂商 ID 和设备 ID:
lsusb # 输出里找包含 Canon 或 04a9 的行,例如: # Bus 001 Device 005: ID 04a9:276d Canon Inc. LBP603004a9是佳能打印机的常用厂商 ID,276d是设备 ID。出现这一行,说明打印机已经被内核识别,剩下的是驱动和队列问题。有些老型号在lsusb里只显示Canon Inc.不显示具体系列,这时再看dmesg | tail -30,内核注册 USB 打印机时通常会把产品名打出来。实在不行,把打印机型号标签拍个照,官网驱动列表按型号找最靠谱。
2.2 装齐 CUPS 与运行库:Debian 系和 RPM 系两条命令
新装的系统不一定带 CUPS,尤其是最小化安装的服务器。佳能驱动运行时依赖 libcupsimage2、libcups2 这些库,缺了的话驱动包装完也会在打印时直接报错,因为后端程序起不来。
Debian 系(Ubuntu、Debian、Linux Mint)先执行:
sudo apt update sudo apt install cups cups-client cups-filters libcups2 libcupsimage2 \ libcups2-dev libcupsimage2-dev build-essentialRPM 系(Fedora、openSUSE、CentOS Stream)用对应的包管理器:
sudo dnf install cups cups-client cups-filters libcups libcups-devel \ libcupsimage libcupsimage-devel gcc make装完把服务拉起来,确认开机自启:
sudo systemctl enable --now cups sudo systemctl status cups --no-pager这里有几个容易忽略的点。build-essential不是佳能驱动直接需要的,但某些官方包里带的安装脚本会调编译工具做二次封装,缺了会报一堆奇怪错误;libcupsimage2-dev在 Ubuntu 22.04 之后有时候不会随cups自动装上,而佳能驱动恰恰要求这个库存在。RPM 系里libcups-devel同理。
CUPS 版本方面,新版 Debian 系默认的 CUPS 2.4.x 能兼容佳能官方驱动,但驱动包安装脚本会检查 CUPS 目录结构。如果之前装过其他品牌驱动,建议先sudo apt remove --purge cups-filters再重装一遍?不,这会把系统打印基础搞坏。更好的做法是装完后看一眼cups --version,确认不是老掉牙的 1.5 版——那种太老的版本个别后端程序路径对不上。
2.3 用户组与设备权限:新机器最容易漏的一步
很多人在这一步翻车,打印按钮点了半天,任务一直在队列里,原因就是当前用户不在lpadmin组。CUPS 默认只允许 root 和 lpadmin 组成员管理打印机,普通用户哪怕能打开管理页面,添加队列时也会被弹回来。
sudo usermod -aG lpadmin $USER # 注销重新登录,或者执行 newgrp lpadmin 让当前会话生效 newgrp lpadminlpadmin组负责打印机队列管理,lp组负责提交打印任务。如果你是单用户机器,两个组都加上没坏处。还需要注意,有些系统上/dev/usb/lp0这类设备文件的权限归 root:lp,普通用户打印时 CUPS 的后端进程会以 lp 用户身份去访问设备,所以 lp 组也不能少。
设备文件不用手动chmod 777,那是把系统安全当儿戏。只要用户组配置正确,CUPS 会自动处理好权限。做完这些,环境就算准备好了,下一步才轮到真正下载安装佳能驱动。
3. 获取佳能 Linux 驱动:解压官方包、选对 deb 或 rpm
佳能官方 Linux 驱动不像 Windows 那样是一整包安装完就好了,它通常以 tar.gz 压缩包形式提供,解压之后有 deb 和 rpm 两个子目录。这一步看似简单,实际翻车的点都在“选错包”和“依赖没补”。
3.1 从官网下载驱动归档:版本号藏在文件名里
官方驱动下载页按打印机型号分类,不同产品线下载到的包前缀也不同,常见的是cnijfilter2-*系列和cnrdrvcups-*系列。下载时注意两个事:一是挑对应你 Linux 发行版的归档,二是在 64 位系统上尽量选带 x86_64 标志的包,别稀里糊涂下载了 32 位版。
下载下来的文件一般长这样:
cnijfilter2-5.90-1-deb.tar.gz # Debian 系 cnijfilter2-5.90-1-rpm.tar.gz # RPM 系解压前先建一个专门目录,不要把整个包解到/tmp,有些驱动安装脚本会相对路径引用文件,放在 /tmp 容易被自动清理,安装时莫名其妙缺文件。
mkdir -p ~/drivers/canon cd ~/drivers/canon tar zxvf cnijfilter2-*.tar.gz解压后会多出一个以版本号命名的目录,进去先别急着装,看两眼目录里的内容,确认 deb 和 rpm 的位置。
3.2 解压后目录结构:别把 deb 和 rpm 混着装
展开的目录里通常有packages或直接分为deb/、rpm/两个子目录。有个常见坑是:系统是 Ubuntu,结果有人把rpm/目录里的包硬用alien转成 deb 再装,折腾半天装出一个四不像。我的建议是 Debian 系只用deb/,RPM 系只用rpm/,别跨格式强行转换。
先列出包内容确认:
cd cnijfilter2-*/ ls -l deb/ # 通常能看到主驱动包和 common 公共包,例如: # cnijfilter2_5.90_i386.deb cnijfilter2-common_5.90_amd64.deb看到cnijfilter2_5.90_i386.deb这种 32 位包,而系统是 64 位的,不要硬装。虽然可以dpkg --add-architecture i386开多架构支持,但佳能驱动在 64 位系统上更应该直接找 amd64/x86_64 版本。这里就体现出看目录的重要性:驱动包没选对架构,到后面 CUPS 加载 PPD 时也会报Cannot load PPD file,浪费时间。
3.3 装驱动:dpkg 与 rpm 的命令选择及依赖修复
Debian 系推荐直接dpkg -i一次性装入所有 deb 包,省得它们相互依赖时缺一个:
cd deb/ sudo dpkg -i *.deb注意*.deb会匹配目录下全部安装包,如果只有一个包也没关系。但如果dpkg -i报出依赖错误,比如提示libcupsimage2或libstdc++某版本没装,先执行自动修复:
sudo apt -y -f install-f install会拉取缺失的依赖并把之前没装完整的包重新配置。这一步是解依赖报错的后悔药,而不是重装系统。如果apt -f install之后还是报依赖错误,运行sudo dpkg --audit,如果输出里有处于“半安装状态”的包,就sudo dpkg --configure -a再走一遍。
RPM 系统用下面这种方式:
cd rpm/ sudo rpm -ivh *.rpm # 缺依赖时,优先用 dnf localinstall 让它解析仓库依赖 sudo dnf localinstall *.rpmrpm -ivh的v显示详情,h显示进度条。单独rpm -i遇到依赖缺失会直接拒绝安装,而dnf localinstall会主动到配置好的仓库里找依赖,实际部署中我更推荐后者。
安装完成后验证一下驱动文件是否落位:
dpkg -l | grep -i cnij # Debian 系 rpm -qa | grep -i cnij # RPM 系 ls /usr/share/cups/model/ | grep -i canon第三行最关键。佳能驱动装的 PPD 文件就在/usr/share/cups/model/目录里,如果这里看不到.ppd,说明 CUPS 不知道有驱动存在,后面加队列自然选不到型号。有的驱动版本把 PPD 放在/opt/canon/底下,需要手动建软链到/usr/share/cups/model/,这一条后面避坑章节会细说。
4. 配置 CUPS 队列:Web 面板与 lpadmin 命令行的取舍
驱动装上只是第一步,CUPS 要能真正想明白“把数据送到哪台设备、用哪个语言描述打印”,全靠打印机队列。队列名、设备 URI、PPD 这三者必须完全匹配,否则打印任务会在队列里一直悬着。
4.1 用 Web 面板添加打印机:适合一台机器慢慢调
浏览器打开http://localhost:631,CUPS 管理页面默认不要求登录,除非你改了cupsd.conf的认证策略。点 Administration,然后选 Add Printer。系统会自动探测到 USB 设备,列出的名称一般是Canon LBP6030这样的设备描述,找到后点 Continue,下一步选择驱动时,在列表里找对应的佳能型号。这里有一个容易困惑的页面行为:新安装的驱动如果要生效,必须先刷新页面或重启 CUPS,否则型号列表还是旧缓存。
sudo systemctl restart cupsWeb 面板适合一边点一边看设备探测结果,但对远程服务器和批量部署就有点拖沓。而且 Web 面板的“共享打印机”选项默认没勾,如果你要通过局域网让别的机器访问这台打印机,记得在队列设置里勾上 Share This Printer,并在cupsd.conf中确认Browsing On。
4.2 用 lpadmin 命令行配队列:批量交付时更快
命令行配队列速度更快,也更容易在脚本里重现。先查设备 URI:
lpinfo -v | grep -i canon # 输出形如: # direct usb://Canon/LBP6030?serial=XXXXXXXX拿到 URI 之后再创建队列:
sudo lpadmin -p LBP6030 -E -v "usb://Canon/LBP6030?serial=XXXXXXXX" \ -P /usr/share/cups/model/CNCUPSLBP6030.ppd参数解释:-p后面跟队列名,自己起什么名字就写什么,建议用打印机型号方便识别;-E放在-p后面表示创建后立刻启用队列,这个位置有讲究——如果把-E写在命令最前面,在部分旧版 CUPS 里会被当成加密连接选项,解析结果完全不同;-v指定设备 URI;-P指定 PPD 文件的完整路径。
曾有台打印机,lpinfo -v输出了两个 USB URI,一个带?serial=,一个不带。我选了带 serial 的,结果一打印就卡住。原因是驱动后端更依赖单纯的usb://Canon/LBP6030这种简短 URI。如果你遇到同样情况,两个 URI 都试试,用短的那个通常更稳。
4.3 队列状态与默认打印机:cupsenable 和 lpoptions 怎么配合
队列建完不一定是启用的。lpadmin -E之后队列状态是 idle,但如果前面已经建过同名队列且内容为 stopped,新队列可能继承旧状态。手动强制启用:
sudo cupsenable LBP6030验证当前默认打印机:
lpstat -d # 如果显示 no system default destination,执行: sudo lpadmin -d LBP6030lpadmin -d设置默认队列,lpstat -d查看默认队列。这个默认值如果为空,直接lp 文件名打印时会报“no destination specified”,在 Web 页面打印测试页则不受影响。顺带把高级选项调一下,比如分辨率,用lpoptions查看当前队列支持哪些参数:
lpoptions -p LBP6030 -l输出的列表里会显示Resolution/Resolution: 600dpi 1200dpi这类信息,还有颜色相关选项。想改默认分辨率:
lpoptions -p LBP6030 -o Resolution=1200dpi到这里队列已经能正常接收任务了,但很多机器是打第一张测试页时才开始暴露出隐藏问题。
5. 佳能驱动常见问题与排查:打印卡住、设备失踪与依赖报错
下面这五条是我在多个 Linux 发行版上配佳能打印机时真实遇到过的,按出现频率排序。每一条都按现象、原因、解决的顺序来写,方便你直接照着对照。
5.1 打印任务一直停在队列里:先查 URI 再查队列状态
现象:任务发送到队列后,状态一直显示pending或processing,过几分钟变成stopped,打印机毫无反应。用lpstat -t看,队列名旁边动不动就是一个disabled。
原因:八成是设备 URI 和 PPD 不匹配,或者队列本身没启用。有时是驱动安装后 PPD 路径变了,但你配置时还指到旧路径;有时是lpadmin -E的-E位置写错,队列建好了却是 disabled 状态。
解决:先用lpstat -t看队列状态,如果是 disabled,执行sudo cupsenable 队列名启用。再看 URI,把lpinfo -v的输出和设备信息核对,URI 长串里的serial=字段如果和实际设备不一致,手动改成不带 serial 的简写再试。如果还是卡着,去/var/log/cups/error_log里看有没有filter failed,说明 PPD 有问题,多半是驱动装了个不兼容的 PPD。
5.2 系统认不出 USB 打印机:usblp 与内核模块问题
现象:打印机接上 USB,lsusb能看到设备,但lpinfo -v里没有任何 USB 直连选项,CUPS Web 面板也扫描不到打印机。dmesg里能看到usb 1-1: new full-speed USB device,却没有后续的usblp0设备节点。
原因:新版 Linux 内核默认不再自动加载usblp模块,佳能驱动的 USB 后端依赖这个模块生成/dev/usb/lp0设备节点。没有它,CUPS 和驱动都只能看到一个普通 USB 设备,而不是可用的打印后端。
解决:手动加载模块并写入开机加载列表:
sudo modprobe usblp ls /dev/usb/lp0 # 确保每次开机都自动加载 echo "usblp" | sudo tee /etc/modules-load.d/usblp.conf加载完usblp之后再去lpinfo -v,一般立刻能看到direct usb://...。这条算是佳能 Linux 驱动部署里最“玄学”的一次,实际上就是内核模块没带起来,操作很机械,但不知道的话能卡住整个下午。
5.3 安装时报依赖错误:别硬装,先补运行库
现象:sudo dpkg -i *.deb执行后,输出一堆dpkg: dependency problems,提示缺libcupsimage2、libstdc++6等,安装直接失败。
原因:驱动安装包对系统运行库有硬性要求,最小化安装的 Linux 一般不会预装这些开发库。这不是驱动包本身坏了,也不是官网文件损坏,就是环境缺包。
解决:先执行sudo apt -y -f install修一次。如果还缺,就到/etc/apt/sources.list确认 universe 源已开启,然后再执行一次sudo apt update后重新dpkg -i。RPM 系对应地用sudo dnf localinstall *.rpm,它会在本地 rpm 包有依赖缺漏时直接从仓库拉取。记住一句:任何时候都不要用--ignore-depends强制忽略依赖,这样装出来的驱动在打印阶段九成会崩溃,而且日志信息贼难定位。
5.4 彩色打印变成黑白或颜色偏色:PPD 色彩参数没对上
现象:机器能正常打印,但发彩色文档出来是黑白;或者打印测试页偏色严重,整页颜色像蒙了一层灰。
原因:佳能 PPD 里颜色模式命名不统一。有的型号默认是ColorModel=Gray,有的默认是CNColorMode=RGB,而应用调用打印任务时没有显式着色模式,就会继承队列默认值。CUPS 的lpoptions设置如果写到用户级而不是系统级,也会让默认值与队列本身不一致。
解决:先用lpoptions -p 队列名 -l查看当前队列支持的颜色选项列表,找ColorModel或CNColorMode这两个键名。然后:
lpoptions -p LBP6030 -o ColorModel=Color # 如果键名是 CNColorMode,则: lpoptions -p LBP6030 -o CNColorMode=Color改完不要重启 CUPS,直接发一张彩色 PDF 测试。颜色还不对时,确认一下系统设置里的打印对话框是否覆盖了队列默认值——有的应用比如 GIMP 会按自己的打印偏好传参数,把命令行里设的默认值顶掉。
5.5 添加打印机时 PPD 列表为空:驱动文件没进 model 目录
现象:CUPS Web 面板添加打印机时,到选择驱动那一步,列表是空的,怎么刷新都看不到刚安装的佳能型号。命令行用-P指定 PPD 文件时,提示文件不存在。
原因:驱动安装脚本执行了,但 PPD 文件没有安装到/usr/share/cups/model/。有的佳能驱动版本会装到/opt/canon/自定义目录,CUPS 默认不会去那里扫描 PPD。另一个原因是系统装了多个 CUPS 版本,模型目录路径被改到/usr/share/ppd/下。
解决:先搜索 PPD 实际位置,然后建立链接让 CUPS 能扫到:
find / -name "*.ppd" 2>/dev/null | grep -i canon # 假设找到 /opt/canon/PPD/CNCUPSLBP6030.ppd sudo ln -s /opt/canon/PPD/CNCUPSLBP6030.ppd /usr/share/cups/model/ sudo systemctl restart cups刷新 Web 页面,PPD 列表就会出现对应型号。如果是并行安装过多个 CUPS 版本导致路径漂移,直接用-P参数绑定绝对路径最省心。这个坑在佳能某些新版驱动里特别常见,会让人误以为驱动坏了,实际就是路径没链接上。
6. 装完怎么验证跑通:测试页、lpstat 与 error_log 日志
驱动装好、队列配置好之后,不要急着交付机器,先走一遍完整的验证流程。我最常做的是三步:打印测试页、查看队列状态、翻日志确认没有残留报错。
先说最简单的方式 —— CUPS Web 页面里,进入 Priners 找到对应队列,点 Maintenance,选 Print Test Page。页面上会直接返回作业编号,几秒后打印机如果吐出带佳能 logo 的测试页,主流程就跑通了。但这种方式有个小问题:它不会反馈任务失败的具体原因,只会在页面顶部显示红色错误提示。所以我会更依赖命令行验证:
lpstat -t lpstat -d printf "CUPS test page\n" > /tmp/canon_test.txt lp -d LBP6030 /tmp/canon_test.txtlpstat -t一次性输出所有队列状态、设备 URI 和当前作业,是判断队列有没有故障最快的一条命令。正常状态下每台打印机旁边的状态是idle,URI 一行会显示Device: usb://Canon/LBP6030?serial=...。lp -d指定的队列名必须是lpstat里存在的名字,发一个文本文件进去,几秒内任务状态从 pending 变 completed,说明驱动后端和 USB 通道都没问题。
如果任务在队列里卡住了,看日志比猜测有效得多:
sudo tail -50 /var/log/cups/error_log日志里常见的几个关键信息:filter failed对应 PPD 或后端程序问题,Unable to open USB device说明 usblp 或设备权限有问题,PID XXXX stopped通常是需要重新cupsenable。日志默认级别是 warn,只会记录明显错误;想看更细的调试信息就临时把日志级别调高一点,改完记得重启 CUPS:
sudo sed -i 's/^LogLevel warn/LogLevel debug2/' /etc/cups/cupsd.conf sudo systemctl restart cups这条命令把 CUPS 日志调到 debug2,打印失败时能看到每个作业的每个过滤器调用细节,包括 PPD 路径是否命中、后端程序传入什么参数。排查完记得调回 warn,否则日志文件涨得飞快,一天几个 GB 很常见。
从那以后,我每次给佳能打印机装完驱动,都会强制走一遍lpstat -t加测试页的流程,确认队列名、设备 URI、PPD 三者完全匹配,再交付给使用者;哪怕只是临时接一台打印机,也至少用lp发一条文本文件进队列,看到任务 completed 才收工。这套验证习惯帮我少跑了很多趟“假修”,也希望帮到你少折腾几个下午。
本文还有配套的精品资源,点击获取