CUPS 常用 CLI 命令详解
CUPS CLI 全家桶真机实测:lpstat、lpadmin、lpinfo、lp、lpq、lprm、cancel、cupsenable/cupsdisable、cupsreject、lpmove、lpoptions、lpc 全参数回显照抄,含 hold 状态不持久化、lprm 与 cancel 语义差异等五个排障现场。
CUPS 常用 CLI 命令详解
本文是 CUPS 2.4.1op1-1ubuntu4.21(Ubuntu 22.04 仓库版本,对应上游 OpenPrinting CUPS v2.4.20)在 Ubuntu 22.04 服务器上的 CLI 命令实录:全部命令与回显均来自真机操作,无一处编造。部署过程见 《CUPS 安装部署指南(Ubuntu 22.04 直装实录)》,配置文件级调优见 《CUPS 配置参数详解》,选型背景见 《CUPS 介绍与选型指南》。
实验服务器:Ubuntu 22.04.5 LTS,主机名
cups-lab,内网 IP10.89.71.2;CUPS 监听localhost:631(本机)与0.0.0.0:8147(对外),已配置虚拟队列root,密码统一示例q1w2e3r4。
一、运行身份与命令入口
CUPS 的 CLI 命令分两个角色视角:
| 角色 | 命令 | 作用对象 |
|---|---|---|
| 普通用户 | lp、lpr、lpq、lprm、lpstat、lpoptions | 提交任务、查队列、撤任务 |
| 管理员 | lpadmin、lpinfo、cupsenable、cupsdisable、cupsaccept、cupsreject、lpmove、lpc | 管队列、管设备、管任务调度 |
普通用户命令无需提权;管理员命令对队列状态有写权限,本机 root 直接可操作(cups-files.conf 默认 SystemGroup lpadmin root),远程操作时加 -h server[:port] 或设置环境变量 CUPS_SERVER。
服务本体状态随时可查:
systemctl status cups --no-pager -l | head -12
实测回显:
● cups.service - CUPS Scheduler
Loaded: loaded (/lib/systemd/system/cups.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-10-28 04:29:48 UTC; 1min 48s ago
TriggeredBy: ○ cups.path
● cups.socket
Docs: man:cupsd(8)
Main PID: 4660 (cupsd)
Status: "Scheduler is running..."
Tasks: 1 (limit: 2932)
Memory: 1.9M
CPU: 7ms
CGroup: /system.slice/cups.service
注意 TriggeredBy: cups.path 与 cups.socket:Ubuntu 的 cups 服务由 systemd socket/path 单元伴随激活,systemctl restart cups 时三者会一并联动,这是"改完 cupsd.conf 重启"动作的真实执行链。
二、命令全景与分类速查
| 分类 | 命令 | 一句话说明 |
|---|---|---|
| 查询 | lpstat | 调度器、队列、任务、设备的全维度查询 |
| 查询 | lpc status | Berkeley 风格队列速览 |
| 设备发现 | lpinfo -v / lpinfo -m | 列可用设备 URI / 列可用驱动模型 |
| 队列管理 | lpadmin | 创建、修改、删除队列,设默认队列 |
| 队列管理 | cupsenable / cupsdisable | 恢复 / 停止打印(可带 hold) |
| 队列管理 | cupsaccept / cupsreject | 开放 / 拒绝新任务入队 |
| 任务调度 | lpmove | 任务在队列间迁移 |
| 提交 | lp / lpr | 提交打印任务(System V / Berkeley 两套风格) |
| 任务控制 | lp -i id -H hold|resume | 挂起 / 恢复单个任务 |
| 撤销 | lprm / cancel | 删除任务(Berkeley / System V 风格) |
| 选项 | lpoptions | 查看与设置打印机选项及用户默认 |
三、队列查询命令实测(lpstat 家族)
3.1 lpstat 全维度速查
lpstat -t 是一条命令看全局(调度器 + 默认队列 + 队列状态):
lpstat -t
实测回显:
scheduler is running
system default destination: PDF
device for PDF: cups-pdf:
PDF accepting requests since Wed Oct 28 04:34:14 2026
printer PDF is idle. enabled since Wed Oct 28 04:34:14 2026
拆开看各维度(队列只有 PDF 一个时的输出对照):
lpstat -r
lpstat -s
lpstat -d
lpstat -p
lpstat -v
lpstat -a
实测回显:
scheduler is running
system default destination: PDF
device for PDF: cups-pdf:
printer PDF is idle. enabled since Wed Oct 28 04:42:34 2026
device for PDF: cups-pdf:
PDF accepting requests since Wed Oct 28 04:42:34 2026
逐项含义:-r 调度器是否存活;-s 汇总(默认队列 + 设备);-d 系统默认队列;-p 队列状态;-v 队列到设备 URI 的映射;-a 各队列是否接受新任务。
没有任何队列时 lpstat -t 的原始回显(新装机器第一眼):
lpstat: No destinations added.
lpstat: No destinations added.
lpstat: No destinations added.
lpstat: No destinations added.
scheduler is running
no system default destination
3.2 lpstat -o 与 -W:任务级查询
-o 列出未完成任务,-W 按状态过滤:
lpstat -o
lpstat -W not-completed -o
lpstat -W completed -o | tail -5
实测回显(PDF-4/5 尚在队列时):
PDF-4 root 1024 Wed Oct 28 04:39:53 2026
PDF-5 root 1024 Wed Oct 28 04:39:53 2026
完成后过滤(历史任务):
PDF-3 root 1024 Wed Oct 28 04:34:14 2026
PDF-2 root 1024 Wed Oct 28 04:33:35 2026
PDF-1 root 1024 Wed Oct 28 04:33:03 2026
任务行格式为 队列-任务号 提交用户 大小 提交时间。任务号是全局递增的,且跨队列迁移后会换成目标队列的编号序列(见 4.6 lpmove)。
3.3 lpstat -l:长格式
lpstat -l -p PDF | head -4
实测回显:
printer PDF is idle. enabled since Wed Oct 28 04:43:21 2026
Form mounted:
Content types: any
Printer types: unknown
-l 展开表单、内容类型、机型等细节,排查 filter 链问题时有用。
四、队列管理命令实测(lpadmin / lpinfo / lpc)
4.1 lpadmin:建队列、设默认、删队列
建队列三件套:-p 起名、-v 指定设备 URI、-P(或 -m)指定 PPD/驱动,-E 一步完成 enable + accept:
lpadmin -p PDF2 -E -v cups-pdf: -P /usr/share/ppd/cups-pdf/CUPS-PDF_noopt.ppd
实测回显:
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
lpstat -p
(第二行回显来自紧随的 lpstat -p:)
printer PDF is idle. enabled since Wed Oct 28 04:34:14 2026
printer PDF2 is idle. enabled since Wed Oct 28 04:39:52 2026
上面那条 "Printer drivers are deprecated" 警告是 CUPS 2.4 的固定输出:PPD 驱动模型已被官方标记弃用,新式无驱动打印用
-m everywhere。对 cups-pdf 这类自带 PPD 的虚拟设备,-P依然可用,警告可忽略。
忘记指定 PPD 会怎样:lpadmin -p PDF -E -v cups-pdf:(不带 -P/-m)返回 exit 0、队列显示 idle,但队列实际以 raw 模式运行——后续任务"假完成"的祸根,完整排障见第七节与 B1 篇。
设系统默认队列:
lpadmin -d PDF
echo $?
lpstat -d
实测回显:
0
system default destination: PDF
删除队列:
lpadmin -x PDF2
lpstat -p
实测回显:
printer PDF is idle. enabled since Wed Oct 28 04:41:52 2026
4.2 lpinfo:设备与驱动发现
lpinfo -v
实测回显:
network beh
network lpd
file cups-brf:/
network https
network ipp
network ipps
file cups-pdf:/
network http
network socket
lpinfo -v 列出当前可用的全部设备后端:ipp/ipps/http/https/socket/lpd 是网络打印入口,cups-pdf:/(PDF 虚拟打印)与 cups-brf:/(盲文虚拟打印)是 file 型虚拟设备,beh 是包装器后端。
驱动模型侧:
lpinfo -m | grep -iE 'everywhere' | head -3
实测回显:
drv:///cupsfilters.drv/pwgrast.ppd Generic IPP Everywhere Printer
everywhere IPP Everywhere
-m everywhere 是官方推荐的无驱动接入姿势(对支持 IPP 的网络打印机一条命令建队列):lpadmin -p printer -E -v ipp://IP/ipp/print -m everywhere。
4.3 lpc status:Berkeley 风格速览
lpc status all
实测回显(PDF 处于 disabled 时):
PDF:
printer is on device 'cups-pdf' speed -1
queuing is enabled
printing is disabled
1 entries
daemon present
queuing(收任务)与 printing(出任务)是两个独立开关,分别对应 cupsaccept/cupsenable;1 entries 是队列中任务数。
4.4 cupsenable / cupsdisable:停止与恢复打印(含 --hold 陷阱)
普通 disable(Stopped,可持久化):
cupsdisable PDF
lpstat -p PDF
systemctl restart cups
sleep 2
lpstat -p PDF
实测回显(重启前后):
printer PDF disabled since Wed Oct 28 04:40:50 2026 -
Paused
printer PDF disabled since Wed Oct 28 04:40:50 2026 -
Paused
Stopped 状态写入 /etc/cups/printers.conf 的 State Stopped 字段,重启后保持。
--hold disable(只拦新任务,不拦在打任务):
cupsdisable --hold PDF
lpstat -p PDF
实测回显:
printer PDF is holding new jobs. enabled since Wed Oct 28 04:34:14 2026
陷阱:--hold 的 hold-new-jobs 标记只存在于 cupsd 运行内存,不落盘——在 hold 期间重启 cupsd(或升级 cups 包触发 postinst 重启),hold 状态丢失,积压任务立即放行。本文实测时安装 cups-bsd 触发 cupsd 重启,先前 hold 的 PDF-4、PDF-5 就这样被直接打印了。运维结论:hold 只用于短窗口暂停;要跨重启暂停必须用普通 cupsdisable(Stopped 持久化)。
enable 后仍显示 holding 的解法:cupsenable 只清 Stopped 不清 hold-new-jobs,若 enable 后状态仍带 holding,用:
cupsenable --release PDF
lpstat -p PDF
实测回显:
printer PDF is idle. enabled since Wed Oct 28 04:40:52 2026
(cupsenable --help 确认该选项:--release Release previously held jobs。)
4.5 cupsreject / cupsaccept:拒绝新任务入队
与 disable 不同,reject 不影响队列中的存量任务,只拦新任务——停机维护前先 reject 挡住新流量:
cupsreject -r 'maintenance in progress' PDF
lpstat -p PDF -a
实测回显:
printer PDF is idle. enabled since Wed Oct 28 04:40:52 2026
maintenance in progress
PDF not accepting requests since Wed Oct 28 04:40:52 2026 -
maintenance in progress
PDF2 accepting requests since Wed Oct 28 04:40:52 2026
此时提交任务会被入口拒绝:
lp -d PDF /etc/passwd
echo $?
实测回显:
lp: Destination "PDF" is not accepting jobs.
1
恢复接收:
cupsaccept PDF
lpstat -a PDF
实测回显:
PDF accepting requests since Wed Oct 28 04:40:52 2026
4.6 lpmove:跨队列迁移任务
停止队列后把积压任务整体挪到备用队列:
lpmove PDF-6 PDF2
lpstat -o
实测回显:
PDF2-6 root 1024 Wed Oct 28 04:40:52 2026
注意任务号从 PDF-6 变为 PDF2-6:lpmove 后任务按目标队列重新编号,脚本里引用任务号时要重新查 lpstat -o。批量迁移用 lpmove PDF PDF2(源队列全部任务)。
五、任务提交与控制(lp / lpr / lprm / cancel)
5.1 lp:提交任务全参数
lp -d PDF /etc/hostname
实测回显:
request id is PDF-3 (1 file(s))
常用参数组合实测:
lp -d PDF -t 'invoice-draft' /etc/os-release # -t 自定义任务标题
lp -d PDF -n 3 /etc/hostname # -n 副本数
lp -d PDF -q 90 /etc/passwd # -q 优先级(1-100)
lp -d PDF -o PageSize=A3 -o PDFVer=1.5 /etc/hostname # -o 传驱动选项
实测回显:
request id is PDF-5 (1 file(s))
request id is PDF-16 (1 file(s))
request id is PDF-8 (1 file(s))
request id is PDF-18 (1 file(s))
选项生效可验证:-o PageSize=A3 的输出 PDF 中 MediaBox 实测为 0 0 842 1191(A3 尺寸,单位 pt),而默认 A4 是 595x842。副本参数注意:cups-pdf 虚拟队列对 -n 3 的任务实际只产出一份 PDF(/Count 1),多副本语义在真实打印机上由驱动展开,虚拟设备不模拟——报表统计页数时别把虚拟队列的输出当副本数证据。
5.2 任务级 hold / resume
提交时直接挂起(-H hold):
lp -d PDF -H hold -t 'held-report' /etc/fstab
lpstat -o
实测回显:
request id is PDF-9 (1 file(s))
PDF-9 root 1024 Wed Oct 28 04:41:47 2026
恢复执行:
lp -i 9 -H resume
sleep 5
lpstat -o
实测回显(队列清空):
(无输出)
race 提醒:对"已完成"任务做任何控制操作都会被拒,实测两种报错:
lp: Job #7 is finished and cannot be altered.
lprm: Job #10 is already completed - can't cancel.
空队列 + 空闲打印机的实验室环境任务完成极快,脚本化操作要么先 cupsdisable 固化队列,要么容忍这条报错并按"任务已完成"处理。
5.3 lprm 与 cancel:两套撤销语义
cancel 接受 队列-任务号 混合写法,lprm 不接受——这是两套命令最容易踩的坑:
cancel PDF2-13
echo exit=$?
实测回显:
exit=0
(任务 PDF2-13 被静默删除。)
同样意图用 lprm 写成 lprm PDF2-13 则直接报错:
lprm: Error - unknown destination "PDF2-13".
lprm 的正确姿势是目标与任务号分开传:lprm PDF2 13,或省略任务号删除自己最近的任务 lprm PDF2。撤销全队列任务用 cancel:
cancel -a PDF2
lpstat -W not-completed -o
实测回显:
(无输出,队列已清空)
六、lpoptions:选项系统与用户级默认
查看队列支持的全部选项(* 号是当前默认值):
lpoptions -p PDF -l
实测回显(节选前三行):
PageSize/Page Size: Custom.WIDTHxHEIGHT 11x14 11x17 13x19 16x20 16x24 2A 4A 8x10 8x12 A0 A1 A2 A3 *A4 A5 AnsiA AnsiB AnsiC AnsiD AnsiE ArchA ArchB ArchC ArchD ArchE C0 C1 C2 C3 C4 C5 Env10 EnvC5 EnvDL EnvMonarch Executive ISOB0 ISOB1 ISOB2 ISOB3 ISOB4 ISOB5 JISB0 JISB1 JISB2 JISB3 JISB4 JISB5 Ledger Legal Letter RA0 RA1 RA2 RA3 RA4 SRA0 SRA1 SRA2 SRA3 SRA4 SuperA SuperB TabloidExtra Tabloid
Resolution/Output Resolution: 150dpi *300dpi 600dpi 1200dpi 2400dpi
PDFVer/PDF version: 1.1 *1.2 1.3 1.4 1.5
设置用户级默认(root 自己的默认队列与偏好,写入 ~/.cups/lpoptions,不影响系统默认):
lpoptions -d PDF
lpstat -d
实测回显:
copies=1 device-uri=cups-pdf: finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=0 number-up=1 print-color-mode=color printer-commands=AutoConfigure,Clean,PrintSelfTestPage printer-info=PDF printer-is-accepting-jobs=true printer-is-shared=true printer-is-temporary=false printer-location printer-make-and-model='Generic CUPS-PDF Printer (w/ options)' printer-state=3 printer-state-change-time=1793162512 printer-state-reasons=none printer-type=8581196 printer-uri-supported=ipp://localhost/printers/PDF
system default destination: PDF
注意区分:
lpadmin -d改系统默认(落printers.conf),lpoptions -d改当前用户默认(落~/.cups/lpoptions)。两者同时存在时用户级优先。
七、排障实录(五个真实现场)
现场一:lpq/lpr/lprm 命令不存在
bash: lpq: command not found
原因:lpq、lpr、lprm 这组 Berkeley 命令在 Ubuntu 上由独立的 cups-bsd 包提供,最小化安装只带 cups-client(lp/lpstat/cancel/lpadmin)。apt-get install -y cups-bsd 补齐后,lpq -P PDF 正常回显 PDF is ready + no entries。
现场二:hold 状态重启后任务"越狱"
cupsdisable --hold 后提交的两个任务在安装 cups-bsd(触发 cupsd 重启)后被直接打印完成,lpmove PDF-4 报 Job #4 is finished and cannot be altered.。机制与解法见 4.4 节:hold 不持久化,跨重启暂停用普通 disable。
现场三:无 PPD 队列"假成功"
不带 -P/-m 建的队列提交任务后 lpstat -W completed 显示完成,但产出文件异常。开 debug 日志(cupsctl --debug-logging)后 /var/log/cups/error_log 暴露真相:
I [28/Oct/2026:04:33:35 +0000] [Job 2] Queued on "PDF" by "root".
D [28/Oct/2026:04:33:35 +0000] [Job 2] envp[19]="PPD=/etc/cups/ppd/PDF.ppd"
D [28/Oct/2026:04:33:35 +0000] [Job 2] envp[21]="DEVICE_URI=cups-pdf:"
D [28/Oct/2026:04:33:35 +0000] [Job 2] Sending job to queue tagged as raw...
D [28/Oct/2026:04:33:35 +0000] [Job 2] GPL Ghostscript 9.55.0: Unrecoverable error, exit code 1
D [28/Oct/2026:04:33:35 +0000] [Job 2] PID 4977 (/usr/lib/cups/backend/cups-pdf) exited with no errors.
I [28/Oct/2026:04:33:35 +0000] [Job 2] Job completed.
三行关键证据:PPD= 指向的 /etc/cups/ppd/PDF.ppd 实际不存在;队列被标记 raw 直通;backend 内部 Ghostscript exit code 1 但 backend 自身 exited with no errors,于是任务"完成"。解法:lpadmin -p PDF -P /usr/share/ppd/cups-pdf/CUPS-PDF_opt.ppd 补上 PPD 后重新提交,输出恢复正常(对照 B1 篇排障现场二)。
现场四:cupsreject 参数写法
cupsreject --reason-... 这种想当然的长选项会直接打印 Usage 帮助(本文实测触发过),正确参数是短选项 -r 'reason'。
现场五:cancel 显示成功但文件已在
cancel -a 对已完成的任务静默忽略;判别任务是"被取消"还是"已完成"用 lpstat -W completed -o 对照,虚拟队列还可直接查 cups-pdf 输出目录有没有对应文件。
八、命令速查表
| 操作 | 命令 |
|---|---|
| 全局状态 | lpstat -t |
| 查队列 | lpstat -p、lpstat -v、lpstat -a |
| 查任务 | lpstat -o、lpstat -W not-completed -o、lpstat -W completed -o |
| 建队列 | lpadmin -p NAME -E -v URI -P PPD(无驱动:-m everywhere) |
| 设默认 | lpadmin -d NAME(系统级)/ lpoptions -d NAME(用户级) |
| 删队列 | lpadmin -x NAME |
| 设备/驱动发现 | lpinfo -v / lpinfo -m |
| 停打/恢复 | cupsdisable NAME / cupsenable NAME(held 用 cupsenable --release) |
| 拒收/恢复收 | cupsreject -r 'reason' NAME / cupsaccept NAME |
| 挪任务 | lpmove SRC-JOB DST(任务号会重编) |
| 提交 | lp -d NAME [-t title] [-n N] [-q P] [-o opt=val] FILE |
| 挂起任务 | lp -d NAME -H hold FILE;恢复 lp -i ID -H resume |
| 撤任务 | cancel NAME-ID / cancel -a NAME;lprm NAME ID(两参数分开) |
| Berkeley 查看 | lpq -P NAME、lpc status all |
相关阅读:
- 《CUPS 安装部署指南(Ubuntu 22.04 直装实录)》——从零装起:apt、systemd、8147 监听、cups-pdf 端到端
- 《CUPS 配置参数详解》——cupsd.conf / cups-files.conf / printers.conf 逐项生效验证
- 《CUPS 介绍与选型指南》——CUPS vs LPRng vs p910nd 量化对比