CUPS 介绍与选型指南

CUPS(OpenPrinting)联网溯源与量化选型:项目画像与 1997-2020 简史、IPP 中枢架构解析,CUPS vs LPRng vs p910nd 硬指标对比与场景决策矩阵,全部来源标注查询日期 2026-10-28。

CUPSCUPSUbuntu22.042026/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.8kshields.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):

  1. 三类打印接入:
    • AirPrint™ 与 IPP Everywhere™ 打印机(无驱动直连,PWG 标准能力自动协商);
    • 通过 Printer Applications 支持的网络与本地(USB)打印机(新式驱动封装);
    • 通过传统 PPD 驱动支持的网络与本地(USB)打印机(遗留驱动模型)。
  2. 双命令行接口:同时提供 System V 风格(lp 系)与 Berkeley 风格(lpr 系)命令,兼容两代 Unix 打印习惯。
  3. 可配置 Web 界面:http://localhost:631/ 内建管理工具,管理打印机、类(classes)与任务。
  4. C API 与生态:提供 C API 与常用打印 filter、驱动、backend;配套项目 cups-filters 提供更多 filter 与驱动。
  5. 打印服务器角色:队列共享、任务调度、访问控制(管理认证组为 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 打印机 / 虚拟设备)

三个架构要点:

  1. IPP 是中枢协议:631 端口同时承载 IPP 打印服务与 Web 管理界面,客户端与调度器之间所有操作(建队列、提交、查询、取消)都是 IPP 请求——这也使 CUPS 天然适合做网络打印服务器。
  2. backend 抽象:设备访问统一为 URI(ipp://、socket://、usb://、cups-pdf:/ 等),队列与物理设备解耦,同一套任务管理逻辑适配任意设备形态。
  3. 双轨驱动模型:新式 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)LPRngp910nd
定位标准化打印系统(调度器+IPP 服务+Web+filter)Berkeley LPR/LPD 的增强、可移植实现(来源:BLFS LPRng 文档)极简打印守护进程,任务不经落盘直接传给打印机(来源:p910nd README)
通信协议IPP(631,HTTP 承载)+ LPD + 端口 9100 raw 等多 backendRFC 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 / 厂商包)。

六、上手路径

  1. 装:Ubuntu 22.04 上 apt install cups cups-client 即起服务,对外监听与远程管理的完整踩坑实录见 《CUPS 安装部署指南(Ubuntu 22.04 直装实录)》;
  2. 配:监听、日志、Location 访问控制、ErrorPolicy 等参数逐项生效验证见 《CUPS 配置参数详解》;
  3. 用:lpstat/lpadmin/lpmove/cancel 等命令全参数实测见 《CUPS 常用 CLI 命令详解》。

七、来源与取证说明

#事实来源查询日期
1OpenPrinting CUPS 定位、IPP Everywhere 支持、三类接入、双 CLI、C API、许可证 Apache-2.0openprinting.github.io/cups(官网)2026-10-28
2CUPS 简史(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
4GitHub 星数 1.8kimg.shields.io/github/stars/OpenPrinting/cups 徽章接口2026-10-28
5Apple CUPS 侧最后版本 2.3.6(2022-05-25),Apple 官网定位「developed by Apple for iOS/macOS」www.cups.org(Apple CUPS 官网)2026-10-28
6LPRng 为 Berkeley LPR 增强实现、最新版 3.8.C(SourceForge)、更新停滞佐证(xenial 时代 3.8.B-2)lprng.sourceforge.net(Reference Manual)、BLFS LPRng 文档、Ubuntu Manpages2026-10-28
7p910nd 定位(diskless 平台直通、不落盘、910n→/dev/lpN)、OpenWrt openwrt-24.10 分支收录 net/p910nd、GitHub 仓库副本 3 starsgithub.com/4ndrej/p910nd(README)、OpenWrt packages 仓库、shields.io2026-10-28

取证纪律:版本号取自官方 Releases,星数取自 shields.io 徽章接口(规避 GitHub API 限流);所有来源均标注查询日期 2026-10-28,本篇无本地实测内容,实测结论见 B1/C1/D1 三篇。


相关阅读: