CUPS 介绍与选型指南
CUPS(OpenPrinting)联网溯源与量化选型:项目画像与 1997-2020 简史、IPP 中枢架构解析,CUPS vs LPRng vs p910nd 硬指标对比与场景决策矩阵,全部来源标注查询日期 2026-10-28。
CUPS 介绍与选型指南
本文为 CUPS(OpenPrinting Common Unix Printing System)的认知与选型篇:全部事实与数据来自官方站点、官方仓库与权威技术文档的联网溯源(来源与查询日期在文中逐条标注,汇总见第七节),不含本地实测内容。部署实录见 《CUPS 安装部署指南(Ubuntu 22.04 直装实录)》,参数详解见 《CUPS 配置参数详解》,命令详解见 《CUPS 常用 CLI 命令详解》。
一、项目画像
CUPS 是一套基于标准、开源的打印系统:OpenPrinting 官网给出的定位是「The current standards-based, open source printing system developed by OpenPrinting for Linux and other Unix-like operating systems」,核心能力是通过 IPP Everywhere™ 支持向本地与网络打印机打印(来源:openprinting.github.io/cups,查询日期 2026-10-28)。
基本信息速览:
| 项 | 值 | 来源 |
|---|---|---|
| 名称 | CUPS(Common Unix Printing System) | 官网 |
| 当前维护方 | OpenPrinting(Linux 基金会旗下打印工作组) | openprinting.github.io/cups |
| macOS/iOS 侧分叉 | Apple CUPS(随 macOS/iOS 交付) | openprinting.github.io/cups |
| 最新稳定版 | v2.4.20(2026-10-05 发布) | GitHub Releases,查询 2026-10-28 |
| 许可证 | Apache License 2.0(附 GPL2-only 链接例外条款) | openprinting.github.io/cups/doc/license.html |
| GitHub 星数 | 1.8k | shields.io 徽章,查询 2026-10-28 |
| 仓库 | github.com/OpenPrinting/cups | 官网下载入口 |
简史(来源:openprinting.github.io/cups「A Brief History of CUPS」,查询日期 2026-10-28):
- 1997 年,Michael R Sweet 在 Easy Software Products 开始开发 CUPS,首个 beta 发布于 1999 年 5 月 14 日;
- 随后 Till Kamppeter 为 Mandrake Linux 打包 CUPS 并创建 Foomatic 驱动,带动了 CUPS 在 Linux 上的普及;
- 2002 年 Apple 将 CUPS 授权用于 macOS;2007 年 2 月 Apple 收购 CUPS 并雇佣 Michael Sweet 继续以开源项目形式开发;
- 2019 年 12 月 Michael Sweet 离开 Apple;2020 年 9 月他与 OpenPrinting 开发者合作,fork Apple CUPS 继续开发;
- 今天的格局:Apple CUPS 服务 macOS/iOS,OpenPrinting CUPS 面向所有其他操作系统持续演进。
一句话画像:Linux 与类 Unix 世界的打印事实标准——发行版默认打印栈、IPP 无驱动打印的核心开源实现、同时也是一套带 Web 管理界面的打印服务器软件。
二、核心功能全景
来源均为 OpenPrinting CUPS 官网(查询日期 2026-10-28):
- 三类打印接入:
- AirPrint™ 与 IPP Everywhere™ 打印机(无驱动直连,PWG 标准能力自动协商);
- 通过 Printer Applications 支持的网络与本地(USB)打印机(新式驱动封装);
- 通过传统 PPD 驱动支持的网络与本地(USB)打印机(遗留驱动模型)。
- 双命令行接口:同时提供 System V 风格(
lp系)与 Berkeley 风格(lpr系)命令,兼容两代 Unix 打印习惯。 - 可配置 Web 界面:
http://localhost:631/内建管理工具,管理打印机、类(classes)与任务。 - C API 与生态:提供 C API 与常用打印 filter、驱动、backend;配套项目 cups-filters 提供更多 filter 与驱动。
- 打印服务器角色:队列共享、任务调度、访问控制(管理认证组为 sys/system/root/admin/lpadmin,来源:openprinting.github.io/cups 设置章节)。
对服务器运维者的意义:CUPS 不只是"驱动加载器",它是队列调度器 + IPP 服务端 + 过滤链 + Web 管理四合一的打印服务器软件。
三、技术架构解析
(架构事实来源:openprinting.github.io/cups 官网与文档目录,查询日期 2026-10-28。)
客户端(lp/lpr/Web 浏览器/移动端 AirPrint)
│ IPP(631 端口,HTTP 承载)
▼
cupsd 调度器 ──── Web 界面(CGI)
│
├── filter 链(文档格式 → 打印机语言;cups-filters 生态)
├── backend 分发层(ipp:/ ipps:/ socket:/ lpd:/ usb:/ cups-pdf:/ ...)
▼
打印设备(网络打印机 / USB 打印机 / 虚拟设备)
三个架构要点:
- IPP 是中枢协议:631 端口同时承载 IPP 打印服务与 Web 管理界面,客户端与调度器之间所有操作(建队列、提交、查询、取消)都是 IPP 请求——这也使 CUPS 天然适合做网络打印服务器。
- backend 抽象:设备访问统一为 URI(
ipp://、socket://、usb://、cups-pdf:/等),队列与物理设备解耦,同一套任务管理逻辑适配任意设备形态。 - 双轨驱动模型:新式 IPP Everywhere 无驱动(打印机自带能力描述,服务器零驱动文件)与旧式 PPD(每机型一个描述文件)并存,CUPS 2.4 系列对 PPD 模型已发出弃用预告(
lpadmin指定 PPD 时的官方警告文案,实测见 B1 篇)。
四、量化选型对比:CUPS vs LPRng vs p910nd
Linux 自托管打印场景下,三个常被放在同一张候选表里的方案其实是三个物种:CUPS 是完整打印系统,LPRng 是 BSD LPD 协议的增强队列实现,p910nd 是不做队列的网络直通小工具。
4.1 硬指标对比表
| 维度 | CUPS(OpenPrinting) | LPRng | p910nd |
|---|---|---|---|
| 定位 | 标准化打印系统(调度器+IPP 服务+Web+filter) | Berkeley LPR/LPD 的增强、可移植实现(来源:BLFS LPRng 文档) | 极简打印守护进程,任务不经落盘直接传给打印机(来源:p910nd README) |
| 通信协议 | IPP(631,HTTP 承载)+ LPD + 端口 9100 raw 等多 backend | RFC 1179 LPD 协议族 | TCP 9100/9101/9102 → /dev/lp0/1/2 直通 |
| 队列与调度 | 完整队列、任务生命周期、优先级、配额、错误策略 | 有队列(printcap 驱动),filter 依赖 ifhp 生态 | 无队列:收到即转发(README 明言 does not spool to disk) |
| Web 管理界面 | 内建(631) | 无 | 无 |
| 无驱动打印 | IPP Everywhere™ / AirPrint™(官网明确支持) | 无 | 无 |
| 社区热度 | GitHub 1.8k stars(shields.io,2026-10-28) | 主仓在 SourceForge,无 GitHub 主仓(shields.io 查询无此仓库,2026-10-28) | GitHub 仓库副本 4ndrej/p910nd 仅 3 stars(shields.io,2026-10-28) |
| 维护状态 | 活跃:v2.4.20 发布于 2026-10-05(GitHub Releases) | 停滞:最新版 3.8.C(SourceForge);Ubuntu xenial 时代包为 3.8.B-2(Ubuntu Manpages,佐证更新缓慢) | 项目本体低速,但 OpenWrt 官方包仓库 openwrt-24.10 分支持续收录(net/p910nd,2026-10-28 查询) |
| 典型形态 | 发行版默认打印栈 / 部门级打印服务器 | 遗留 Unix 打印队列替换 | 嵌入式/路由器打印服务器(OpenWrt 教程生态丰富) |
4.2 场景决策矩阵
| 需求场景 | 首选 | 理由 |
|---|---|---|
| 多用户共享打印服务器(部门/家庭服务器) | CUPS | 队列、认证、Web 管理、访问控制开箱即用 |
| 接入 AirPrint / IPP Everywhere 无驱动打印 | CUPS | 三者中唯一完整实现 PWG 无驱动标准的开源方案 |
| Linux 桌面/服务器系统默认打印栈 | CUPS | 发行版事实标准,系统组件兼容性最好 |
| 遗留 LPD 协议老设备的集中队列 | LPRng(仅遗留场景) | 协议同源(RFC 1179),但项目停滞,新部署不建议 |
| 路由器/嵌入式设备把 USB 打印机变成网络打印机 | p910nd | 单二进制、无落盘、9100 直通,OpenWrt 官方包支持 |
| 极端资源受限 + 仅需 raw 9100 转发 | p910nd | 无队列无 filter 的直通设计资源占用最低 |
4.3 CUPS 的不可替代性判断
- 唯一活跃的"全栈"选项:三者中只有 CUPS 同时具备 IPP 服务端、filter 链、Web 管理与活跃维护(v2.4.20,2026-10-05);LPRng 停留在 SourceForge 时代,p910nd 从设计上就不做队列。
- 无驱动打印的实际入口:AirPrint 打印机、手机直打、IPP Everywhere 能力协商,开源实现里 CUPS 是事实唯一选。
- 成本极低的"标准件":作为发行版默认组件,安装即用、systemd 集成、文档与 man 手册完整(OpenPrinting 官网提供全套 man pages),偏离标准打印栈自建方案要自行承担兼容性成本。
反面边界:如果目标只是"让网络里其他电脑能往这台打印机塞 raw 数据",p910nd 十分钟就能跑起来且几乎零维护;为这一件事部署 CUPS 属于杀鸡用牛刀。
五、适用与不适用
适合:
- 部门/家庭共享打印服务器(多队列、多用户、权限隔离);
- 无驱动打印(AirPrint/IPP Everywhere)接入与打印任务集中管理;
- 虚拟打印场景(如 cups-pdf 生成 PDF 的"打印即归档"流水线);
- 需要打印任务审计(access/error/page 三类日志)与配额控制的运维环境。
不适合 / 需搭配:
- 只做 9100 raw 直通的嵌入式场景(p910nd 更合适);
- 深度遗留 LPD 环境整体迁移(LPRng 兼容性故事,但迁移本身应规划到 IPP/CUPS);
- CUPS 不解决驱动本身:厂商闭源驱动、特殊纸张工艺支持仍依赖 driver 生态(Printer Applications / cups-filters / 厂商包)。
六、上手路径
- 装:Ubuntu 22.04 上
apt install cups cups-client即起服务,对外监听与远程管理的完整踩坑实录见 《CUPS 安装部署指南(Ubuntu 22.04 直装实录)》; - 配:监听、日志、Location 访问控制、ErrorPolicy 等参数逐项生效验证见 《CUPS 配置参数详解》;
- 用:lpstat/lpadmin/lpmove/cancel 等命令全参数实测见 《CUPS 常用 CLI 命令详解》。
七、来源与取证说明
| # | 事实 | 来源 | 查询日期 |
|---|---|---|---|
| 1 | OpenPrinting CUPS 定位、IPP Everywhere 支持、三类接入、双 CLI、C API、许可证 Apache-2.0 | openprinting.github.io/cups(官网) | 2026-10-28 |
| 2 | CUPS 简史(1997 Michael Sweet 立项、1999-05-14 首个 beta、2002 Apple 授权、2007-02 Apple 收购、2020-09 OpenPrinting fork) | openprinting.github.io/cups「A Brief History of CUPS」 | 2026-10-28 |
| 3 | 最新稳定版 v2.4.20(2026-10-05 发布) | github.com/OpenPrinting/cups(releases.atom / Releases 页) | 2026-10-28 |
| 4 | GitHub 星数 1.8k | img.shields.io/github/stars/OpenPrinting/cups 徽章接口 | 2026-10-28 |
| 5 | Apple CUPS 侧最后版本 2.3.6(2022-05-25),Apple 官网定位「developed by Apple for iOS/macOS」 | www.cups.org(Apple CUPS 官网) | 2026-10-28 |
| 6 | LPRng 为 Berkeley LPR 增强实现、最新版 3.8.C(SourceForge)、更新停滞佐证(xenial 时代 3.8.B-2) | lprng.sourceforge.net(Reference Manual)、BLFS LPRng 文档、Ubuntu Manpages | 2026-10-28 |
| 7 | p910nd 定位(diskless 平台直通、不落盘、910n→/dev/lpN)、OpenWrt openwrt-24.10 分支收录 net/p910nd、GitHub 仓库副本 3 stars | github.com/4ndrej/p910nd(README)、OpenWrt packages 仓库、shields.io | 2026-10-28 |
取证纪律:版本号取自官方 Releases,星数取自 shields.io 徽章接口(规避 GitHub API 限流);所有来源均标注查询日期 2026-10-28,本篇无本地实测内容,实测结论见 B1/C1/D1 三篇。
相关阅读:
- 《CUPS 安装部署指南(Ubuntu 22.04 直装实录)》——本文选型结论的落地第一步
- 《CUPS 配置参数详解》——选型后必知的配置全景
- 《CUPS 常用 CLI 命令详解》——日常运维命令手册