强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

CUPS 打印服务完全指南 / 第 3 章:打印机管理

第 3 章:打印机管理

本章将全面介绍 CUPS 打印机管理的方方面面,包括添加和删除打印机、配置打印选项、设置默认打印机以及掌握 lp 命令的各种用法。


3.1 打印机添加方式概览

方式适用场景难度
Web 界面管理员日常操作⭐ 简单
lpadmin 命令脚本自动化⭐⭐ 中等
cupsctl 命令快速配置⭐⭐ 中等
手动编辑配置高级定制⭐⭐⭐ 复杂
API/SDK程序集成⭐⭐⭐ 复杂

3.2 使用 Web 界面管理打印机

3.2.1 添加打印机

步骤 1:登录管理界面

浏览器访问: http://localhost:631/admin
输入管理员账号密码(通常是 root 或 lpadmin 组用户)

步骤 2:选择连接方式

连接方式URI 格式说明
USBusb://Make/Model?serial=xxx本地 USB 打印机
Socketsocket://192.168.1.100:9100TCP/IP 直连
IPPipp://192.168.1.100/ipp/printIPP 协议
IPPSipps://192.168.1.100/ipp/printIPP over TLS
LPDlpd://192.168.1.100/queueLPD 协议
HTTPhttp://192.168.1.100:80/PRESENTATION/BONJOURHTTP 协议
SMBsmb://user:password@server/printerSamba 共享

步骤 3:配置基本信息

Name:        打印机名称(必填,仅限字母、数字、下划线、连字符)
Location:    位置信息(如 "3楼办公区")
Description: 描述信息(如 "HP LaserJet Pro M404 黑白激光")
Sharing:     ☐ Share this printer(共享此打印机)

步骤 4:选择驱动/PPD

- 从列表选择制造商 → 型号
- 上传自定义 PPD 文件
- 选择 "Generic" 通用驱动
- 选择 "Raw"(原始队列,不处理)

3.2.2 管理已有打印机

访问: http://localhost:631/printers/打印机名称

功能:
├── Maintenance
│   ├── Pause Printer        # 暂停打印机
│   ├── Reject Jobs          # 拒绝新任务
│   ├── Print Test Page      # 打印测试页
│   ├── Clean Print Heads    # 清洁打印头
│   └── Cancel All Jobs      # 取消所有任务
├── Administration
│   ├── Set As Server Default # 设为服务器默认
│   ├── Modify Printer       # 修改打印机
│   └── Delete Printer       # 删除打印机
└── Status
    └── Printer State: idle / processing / stopped

3.3 使用 lpadmin 命令管理打印机

3.3.1 添加打印机

# 基本语法
sudo lpadmin -p 打印机名 -E -v URI -P PPD文件

# 示例 1: 添加 USB 打印机
sudo lpadmin -p HP-USB -E \
  -v "usb://HP/LaserJet%20Pro%20M404?serial=ABC123" \
  -P /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd

# 示例 2: 添加网络打印机(Socket 协议)
sudo lpadmin -p HP-Net -E \
  -v "socket://192.168.1.100:9100" \
  -P /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd

# 示例 3: 添加 IPP 打印机
sudo lpadmin -p HP-IPP -E \
  -v "ipp://192.168.1.100/ipp/print" \
  -P /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd

# 示例 4: 添加 LPD 打印机
sudo lpadmin -p HP-LPD -E \
  -v "lpd://192.168.1.100/queue1" \
  -P /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd

# 示例 5: 添加原始队列(不做任何处理)
sudo lpadmin -p RawPrinter -E \
  -v "socket://192.168.1.100:9100" \
  -m raw

# 示例 6: 使用 -m 指定驱动型号
sudo lpadmin -p HP-Auto -E \
  -v "socket://192.168.1.100:9100" \
  -m "HP LaserJet Pro M404"

# 示例 7: 使用 lpinfo 查找驱动
lpinfo -m | grep "HP LaserJet Pro M404"
# 输出: drv:///hpcups.drv/hp-laserjet_pro_m404.ppd HP LaserJet Pro M404, hpcups 3.22.10

3.3.2 lpadmin 参数详解

参数说明示例
-p name打印机名称-p myprinter
-E启用打印机并接受任务-E
-v URI设备 URI-v socket://192.168.1.100
-P filePPD 文件路径-P /path/to/file.ppd
-m model驱动型号-m "HP LaserJet"
-D desc描述信息-D "Office Printer"
-L location位置信息-L "3rd Floor"
-o option=value设置选项-o media=A4
-u allow:user允许用户-u allow:john
-u deny:user拒绝用户-u deny:guest
-d name设为默认打印机-d myprinter
-x name删除打印机-x myprinter
-c class添加到打印机组-c mygroup
-i file使用 IPP 属性文件-i attrs.conf
-r name从类中移除-r mygroup

3.3.3 删除打印机

# 删除单个打印机
sudo lpadmin -x myprinter

# 删除所有打印机(谨慎使用)
for printer in $(lpstat -p | awk '{print $2}'); do
    sudo lpadmin -x "$printer"
done

# 通过 Web 界面删除
# http://localhost:631/printers/myprinter → Administration → Delete Printer

3.3.4 修改打印机属性

# 修改描述
sudo lpadmin -p myprinter -D "New Description"

# 修改位置
sudo lpadmin -p myprinter -L "New Location"

# 修改设备 URI
sudo lpadmin -p myprinter -v "socket://192.168.1.200:9100"

# 修改 PPD 文件
sudo lpadmin -p myprinter -P /path/to/new-driver.ppd

# 添加打印机选项
sudo lpadmin -p myprinter -o media=A4 -o sides=two-sided

# 设置访问控制 - 允许特定用户
sudo lpadmin -p myprinter -u allow:john,mary,bob

# 设置访问控制 - 拒绝特定用户
sudo lpadmin -p myprinter -u deny:guest

# 允许所有用户
sudo lpadmin -p myprinter -u allow:all

3.4 打印机 URI 发现

3.4.1 使用 lpinfo 发现设备

# 列出所有可用的后端
lpinfo -v

# 输出示例:
# network socket
# network beh
# network http
# network ipp
# network lpd
# direct usb://HP/LaserJet%20Pro%20M404?serial=ABC123
# network socket://192.168.1.100:9100
# network lpd://192.168.1.101/queue
# network ipp://192.168.1.102/ipp/print
# network dnssd://HP%20LaserJet%20Pro%20M404._ipp._tcp.local./

# 只显示 USB 设备
lpinfo -v | grep usb

# 只显示网络设备
lpinfo -v | grep network

# 列出所有可用驱动
lpinfo -m | head -20

# 搜索特定驱动
lpinfo -m | grep -i "HP LaserJet"
lpinfo -m | grep -i "Canon"
lpinfo -m | grep -i "Epson"

3.4.2 自动发现网络打印机

# 使用 avahi 发现 IPP 打印机
avahi-browse -t -r _ipp._tcp

# 输出示例:
# + eth0 IPv4 HP LaserJet Pro M404 @ server1 Internet Printer local
# = eth0 IPv4 HP LaserJet Pro M404 @ server1 Internet Printer local
#    hostname = [HP-LaserJet.local]
#    address = [192.168.1.100]
#    port = [631]
#    txt = ["rp=ipp/print" "ty=HP LaserJet Pro M404"]

# 使用 ippfind 发现打印机
ippfind --txt rp

# 使用 nmap 扫描打印机
nmap -p 631 192.168.1.0/24
nmap -p 9100 192.168.1.0/24

3.4.3 常见打印机 URI 格式

# HP JetDirect / Socket
socket://192.168.1.100:9100

# IPP
ipp://192.168.1.100/ipp/print
ipp://192.168.1.100:631/ipp/print

# IPP over TLS
ipps://192.168.1.100/ipp/print

# LPD
lpd://192.168.1.100/queue_name
lpd://192.168.1.100/PASSTHRU

# HTTP
http://192.168.1.100:80/PRESENTATION/BONJOUR

# USB (自动检测)
usb://HP/LaserJet%20Pro%20M404?serial=VNB3K12345

# Samba/SMB
smb://username:password@server/printer_name
smb://WORKGROUP/server/printer_name

# DNS-SD (Bonjour)
dnssd://HP%20LaserJet%20Pro%20M404._ipp._tcp.local./

# HP 打印机特定
hp:/net/HP_LaserJet_Pro_M404?ip=192.168.1.100

# 手机/平板 AirPrint
ipp://printer.local/ipp/print

3.5 默认打印机设置

3.5.1 系统级默认打印机

# 设置系统默认打印机
sudo lpadmin -d myprinter

# 查看当前默认打印机
lpstat -d
# 输出: system default destination: myprinter

# 使用 lpoptions 设置用户级默认打印机
lpoptions -d myprinter

# 查看用户默认打印机
lpoptions -d

3.5.2 用户级默认打印机

# 设置当前用户的默认打印机(不影响其他用户)
lpoptions -d myprinter

# 用户配置文件位置
~/.cups/lpoptions

# 查看用户配置
cat ~/.cups/lpoptions
# 输出: Default myprinter media=A4 sides=two-sided

3.5.3 环境变量方式

# 使用 PRINTER 环境变量
export PRINTER=myprinter
lp document.pdf    # 将打印到 myprinter

# 使用 LPDEST 环境变量(BSD 兼容)
export LPDEST=myprinter
lpr document.pdf   # 将打印到 myprinter

# 在 ~/.bashrc 中设置永久默认
echo 'export PRINTER=myprinter' >> ~/.bashrc
source ~/.bashrc

3.6 打印机组(Classes)

3.6.1 创建打印机组

# 创建打印机组
sudo lpadmin -p printer1 -c mygroup
sudo lpadmin -p printer2 -c mygroup
sudo lpadmin -p printer3 -c mygroup

# 或一次性创建组并添加打印机
sudo lpadmin -c mygroup -p printer1 -p printer2 -p printer3

# 查看打印机组
lpstat -c

# 输出示例:
# class mygroup:
#   printer1
#   printer2
#   printer3

3.6.2 管理打印机组

# 从组中移除打印机
sudo lpadmin -p printer1 -r mygroup

# 删除打印机组
sudo lpadmin -x mygroup

# 向组中添加打印机
sudo lpadmin -p printer4 -c mygroup

# 打印到打印机组(任务会分配到空闲打印机)
lp -d mygroup document.pdf

3.6.3 负载均衡打印

# 打印机组默认使用负载均衡策略
# CUPS 会将任务分配到第一个空闲的打印机

# 查看组状态
lpstat -c -v

# 打印到组
lp -d mygroup large_document.pdf
# 任务将被分配到第一个空闲的打印机

3.7 打印队列管理

3.7.1 查看打印队列

# 查看所有打印队列
lpstat -o

# 查看特定打印机的队列
lpstat -o myprinter

# 查看详细信息
lpstat -l -o myprinter

# 输出示例:
# myprinter-1  john  1024  Thu 10 May 2026 09:00:00 AM
# myprinter-2  mary  2048  Thu 10 May 2026 09:05:00 AM
# myprinter-3  bob   4096  Thu 10 May 2026 09:10:00 AM

# 查看已完成的任务
lpstat -W completed

# 查看未完成的任务
lpstat -W not-completed

3.7.2 管理打印任务

# 取消特定任务
cancel myprinter-1

# 取消所有任务
cancel -a myprinter

# 取消特定用户的任务
cancel -u john myprinter

# 移动任务到其他打印机
sudo lpmove myprinter-1 otherprinter

# 移动所有任务
sudo lpmove myprinter otherprinter

# 暂停特定任务
sudo cupsdisable myprinter-1

# 使用 lprm 删除任务(BSD 命令)
lprm myprinter-1
lprm -            # 删除当前任务
lprm -P myprinter # 删除特定打印机的所有任务

3.7.3 打印机状态管理

# 暂停打印机(停止处理新任务)
sudo cupsdisable myprinter

# 恢复打印机
sudo cupsenable myprinter

# 拒绝新任务(继续处理现有任务)
sudo cupsreject myprinter

# 接受新任务
sudo cupsaccept myprinter

# 暂停打印机并拒绝任务
sudo cupsdisable myprinter
sudo cupsreject myprinter

# 查看打印机状态
lpstat -p myprinter

# 输出示例:
# printer myprinter is idle.  enabled since Thu 10 May 2026 09:00:00 AM

# 查看所有打印机状态
lpstat -p

# 查看详细状态
lpstat -l -p myprinter

3.8 lp 命令高级用法

3.8.1 基本打印

# 打印单个文件
lp document.pdf

# 打印多个文件
lp file1.pdf file2.pdf file3.pdf

# 打印到指定打印机
lp -d myprinter document.pdf

# 打印多份
lp -n 5 document.pdf

# 从标准输入打印
echo "Hello" | lp
cat document.txt | lp -d myprinter

3.8.2 打印选项

# 纸张大小
lp -o media=A4 document.pdf
lp -o media=Letter document.pdf
lp -o media=A3 document.pdf
lp -o media=Legal document.pdf

# 双面打印
lp -o sides=one-sided document.pdf           # 单面
lp -o sides=two-sided-long-edge document.pdf # 双面(长边翻转)
lp -o sides=two-sided-short-edge document.pdf # 双面(短边翻转)

# 页面方向
lp -o portrait document.pdf   # 纵向
lp -o landscape document.pdf  # 横向

# 每页多版
lp -o number-up=1 document.pdf  # 每页 1 版
lp -o number-up=2 document.pdf  # 每页 2 版
lp -o number-up=4 document.pdf  # 每页 4 版
lp -o number-up=6 document.pdf  # 每页 6 版
lp -o number-up=9 document.pdf  # 每页 9 版

# 页面范围
lp -o page-ranges=1-5 document.pdf    # 打印第 1-5 页
lp -o page-ranges=1,3,5 document.pdf  # 打印第 1、3、5 页
lp -o page-ranges=2- document.pdf     # 从第 2 页到最后

# 打印顺序
lp -o outputorder=normal document.pdf  # 正序
lp -o outputorder=reverse document.pdf # 逆序

# 颜色模式
lp -o ColorModel=Gray document.pdf   # 灰度
lp -o ColorModel=RGB document.pdf    # 彩色
lp -o ColorModel=CMYK document.pdf   # CMYK(如支持)

# 打印质量
lp -o Resolution=300dpi document.pdf
lp -o Resolution=600dpi document.pdf
lp -o Resolution=1200dpi document.pdf

# 色调/饱和度(部分打印机支持)
lp -o hue=180 document.pdf
lp -o saturation=100 document.pdf

3.8.3 作业命名和通知

# 设置作业名称
lp -t "Monthly Report" document.pdf

# 打印完成后发送邮件通知
lp -m [email protected] document.pdf

# 指定优先级(1-100,100 最高)
lp -q 50 document.pdf
lp -q 100 urgent_document.pdf

# 保持打印文件(不删除临时文件)
lp -h document.pdf

3.8.4 文件格式处理

# 强制使用原始格式(不经过过滤器)
lp -o raw document.ps

# 指定输入格式
lp -i application/pdf document.pdf

# 设置内容类型
lp -o document-format=application/pdf document.pdf

# 打印 PostScript 文件
lp -o raw document.ps

# 打印纯文本
echo "Hello World" | lp -o raw

3.9 lpstat 命令详解

3.9.1 查询打印机状态

# 查看所有打印机
lpstat -p

# 查看所有打印机和设备
lpstat -p -v

# 查看默认打印机
lpstat -d

# 查看打印机组
lpstat -c

# 查看 CUPS 服务器状态
lpstat -r

# 查看调度器状态
lpstat -s

# 查看所有状态信息
lpstat -t

# 输出示例:
# scheduler is running
# system default destination: myprinter
# device for myprinter: socket://192.168.1.100:9100
# myprinter accepting requests since Thu 10 May 2026 09:00:00 AM
# printer myprinter is idle.  enabled since Thu 10 May 2026 09:00:00 AM

3.9.2 查询打印队列

# 查看所有打印队列
lpstat -o

# 查看特定打印机队列
lpstat -o myprinter

# 查看特定用户的任务
lpstat -u john

# 查看任务 ID(仅显示 ID)
lpstat -i

# 查看长格式(详细信息)
lpstat -l

# 查看未完成的任务
lpstat -W not-completed

# 查看已完成的任务
lpstat -W completed

# 查看指定时间后的任务
lpstat -W 1h    # 最近 1 小时
lpstat -W 1d    # 最近 1 天

3.10 lpoptions 命令详解

3.10.1 查看选项

# 查看打印机支持的所有选项
lpoptions -p myprinter -l

# 输出示例:
# PageSize/Page Size: *A4 Letter Legal A3 A5 B5
# Duplex/Double-Sided: *None DuplexNoTumble DuplexTumble
# Resolution/Output Resolution: 150x150dpi 300x300dpi *600x600dpi 1200x1200dpi
# ColorModel/Print Color Mode: *Gray RGB
# InputSlot/Paper Source: *Auto Tray1 Tray2 Manual
# MediaType/Media Type: *Plain CardStock Envelope Transparency
# OutputBin/Output Bin: *FaceUp FaceDown

# 查看当前选项设置
lpoptions -p myprinter

# 输出示例:
# copies=1 device-uri=socket://192.168.1.100:9100 ...

3.10.2 设置选项

# 设置默认纸张
lpoptions -p myprinter -o media=A4

# 设置默认双面
lpoptions -p myprinter -o sides=two-sided-long-edge

# 设置默认分辨率
lpoptions -p myprinter -o Resolution=600x600dpi

# 设置默认颜色模式
lpoptions -p myprinter -o ColorModel=Gray

# 设置默认纸盒
lpoptions -p myprinter -o InputSlot=Tray2

# 设置多选项
lpoptions -p myprinter \
  -o media=A4 \
  -o sides=two-sided-long-edge \
  -o Resolution=600x600dpi \
  -o ColorModel=Gray

# 恢复默认选项
lpoptions -p myprinter -o media=Default
lpoptions -p myprinter -o sides=Default

# 删除所有自定义选项
lpoptions -p myprinter -x

3.10.3 用户级选项

# 设置用户级选项(不影响其他用户)
lpoptions -p myprinter -o media=A4

# 查看用户选项文件
cat ~/.cups/lpoptions

# 设置系统级选项(需要 root)
sudo lpoptions -p myprinter -o media=A4

3.11 打印机配置文件

3.11.1 printers.conf 文件

# 打印机配置文件位置
cat /etc/cups/printers.conf

# 文件示例:
# <Printer myprinter>
#   PrinterId 1
#   UUID urn:uuid:12345678-1234-1234-1234-123456789abc
#   Info HP LaserJet Pro M404
#   Location 3rd Floor Office
#   MakeModel HP LaserJet Pro M404
#   DeviceURI socket://192.168.1.100:9100
#   State Idle
#   StateTime 1715308800
#   ConfigTime 1715308800
#   Type 8425492
#   Accepting Yes
#   Shared Yes
#   JobSheets none none
#   QuotaPeriod 0
#   PageLimit 0
#   KLimit 0
#   OpPolicy default
#   ErrorPolicy stop-printer
# </Printer>

3.11.2 手动编辑配置

# 停止 CUPS 服务
sudo systemctl stop cups

# 编辑 printers.conf
sudo vim /etc/cups/printers.conf

# 启动 CUPS 服务
sudo systemctl start cups

# 注意:通常建议使用 lpadmin 命令或 Web 界面修改配置
# 直接编辑配置文件可能导致配置冲突

3.12 业务场景实践

3.12.1 场景一:办公环境打印配置

# 需求:为办公室配置 3 台打印机
# 1. 前台黑白激光打印机(默认)
# 2. 财务彩色喷墨打印机
# 3. 行政大型复印机

# 添加前台打印机
sudo lpadmin -p Front-BW -E \
  -v "socket://192.168.1.100:9100" \
  -D "前台黑白激光打印机" \
  -L "1楼前台" \
  -P /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd \
  -o media=A4 \
  -o sides=two-sided-long-edge \
  -o ColorModel=Gray

# 添加财务打印机
sudo lpadmin -p Finance-Color -E \
  -v "socket://192.168.1.101:9100" \
  -D "财务彩色喷墨打印机" \
  -L "2楼财务室" \
  -P /usr/share/ppd/Epson/epson-inkjet.ppd

# 添加行政复印机
sudo lpadmin -p Admin-MFP -E \
  -v "ipp://192.168.1.102/ipp/print" \
  -D "行政大型复印机" \
  -L "3楼行政部" \
  -P /usr/share/ppd/Ricoh/ricoh-mp.ppd

# 设置前台打印机为默认
sudo lpadmin -d Front-BW

# 设置访问控制 - 财务打印机仅财务部可用
sudo lpadmin -p Finance-Color -u allow:finance_user1,finance_user2,finance_user3

3.12.2 场景二:开发环境 PDF 打印

# 安装 CUPS-PDF 虚拟打印机
sudo apt install -y cups-pdf

# 配置 PDF 打印机
sudo lpadmin -p PDF-Printer -E \
  -v "cups-pdf:/" \
  -P /usr/share/ppd/cups-pdf/CUPS-PDF.ppd \
  -D "PDF 虚拟打印机" \
  -o media=A4

# 设置为默认打印机
sudo lpadmin -d PDF-Printer

# 使用 PDF 打印机
lp -d PDF-Printer document.txt
# 输出文件: /var/spool/cups-pdf/$USER/

# 修改输出目录
sudo vim /etc/cups/cups-pdf.conf
# 修改 Out ${HOME}/PDF

3.12.3 场景三:打印配额管理

# 安装配额管理工具
sudo apt install -y cups-pk-helper

# 设置每用户每日打印配额
sudo lpadmin -p myprinter -o job-quota-period=86400 -o job-quota-pages=100

# 查看当前配额设置
lpoptions -p myprinter | grep quota

# 手动检查用户打印量
grep "user" /var/log/cups/page_log | wc -l

3.13 扩展阅读

资源链接说明
lpadmin 手册man lpadmin完整命令参考
lpstat 手册man lpstat状态查询参考
lpoptions 手册man lpoptions选项管理参考
CUPS 打印机管理https://www.cups.org/doc/admin.html官方管理指南
OpenPrinting 数据库https://www.openprinting.org/printers打印机兼容性查询

3.14 本章小结

命令功能示例
lpadmin -p添加/修改打印机sudo lpadmin -p myprinter -E -v socket://...
lpadmin -x删除打印机sudo lpadmin -x myprinter
lpadmin -d设置默认打印机sudo lpadmin -d myprinter
lpadmin -c添加到打印机组sudo lpadmin -p p1 -c group1
lp打印文件lp -d myprinter -n 2 file.pdf
lpstat -p查看打印机状态lpstat -p -d
lpstat -o查看打印队列lpstat -o myprinter
lpoptions -l查看打印选项lpoptions -p myprinter -l
cancel取消打印任务cancel myprinter-1
cupsenable启用打印机sudo cupsenable myprinter
cupsdisable禁用打印机sudo cupsdisable myprinter

下一章预告:我们将深入学习打印机驱动,包括 PCL、PostScript 驱动以及 IPP Everywhere 无驱动打印。


3.15 练习题

  1. 添加题:使用 lpadmin 命令添加一台网络打印机,要求使用 Socket 协议、设置描述和位置。

  2. 选项题:为打印机设置默认选项:A4 纸张、双面打印、灰度模式。

  3. 队列题:编写脚本监控打印队列,当队列超过 10 个任务时发送告警邮件。

  4. 配额题:配置打印机限制每个用户每天最多打印 50 页。

  5. 故障题:打印机显示 “Rejecting Jobs” 状态,如何恢复?