《UNIX/Linux系统管理技术手册-读书笔记-第十二章

打印

1. 打印系统概述

概念 说明 能做什么
CUPS(Common UNIX Printing System) Linux/FreeBSD/macOS默认打印系统,基于HTTP/IPP协议 统一的打印服务管理,支持Web界面和命令行
打印系统组成 假脱机程序(spooler)+ 用户工具 + 后端 + 网络协议 收集、调度、传输打印作业
CUPS服务器 内嵌Web服务器(端口631) 通过浏览器访问http://printhost:631管理打印
IPP(Internet Printing Protocol) HTTP增强版协议 客户端提交作业/查询状态

打印看似琐碎,但用户满意度提升最快的方式之一就是确保打印系统稳定工作

2. 打印系统界面(命令与GUI)

2.1 CUPS命令速查

提交打印作业

1
2
3
4
lpr file.pdf              # BSD风格(推荐)
lp file.pdf               # System V风格
export PRINTER=printer    # 设置默认打印机
lpoptions -d printer      # 设置默认打印机(永久)

查看队列状态

1
2
3
lpq                      # 查看打印队列
lpstat -t                # 打印服务器完整状态
lpstat -p                # 查看所有打印机状态

管理作业

1
2
lprm job_id              # 取消指定作业
cancel job_id            # System V风格取消

2.2 命令分类(表12.1)

来源 命令 功能
CUPS原生 cupsdisable/cupsenable 禁用/启用打印机(出口端)
lpinfo 显示可用设备或驱动程序
lpoptions 显示/设置打印机选项和默认值
lppasswd 管理摘要认证密码
System V accept/reject 接受/拒绝队列提交(入口端)
lpadmin 配置打印机
lpmove 将作业移动到另一队列
cancel 取消打印作业
BSD lpr / lpq / lprm 提交/查看/取消作业

记忆技巧accept/reject控制作业提交(入口),cupsenable/cupsdisable控制打印机打印(出口)。

3. 打印队列与多打印机管理

概念 说明 能做什么
打印队列 每台打印机有独立队列,CUPS服务器集中管理 查看、挂起、取消、调整作业优先级
默认打印机 环境变量$PRINTERlpoptions -d设置 无需每次指定-P参数
打印机实例 同一物理打印机不同配置(如双页/草稿) 满足不同打印需求,无需多台打印机

创建打印机实例

1
2
lpoptions -p Phaser_6120/2up -o number-up=2 -o job-sheets=standard
lpr -P Phaser_6120/2up document.pdf   # 使用实例打印

4. 网络打印机浏览与发现

4.1 自动发现(广播)

CUPS通过BrowseAddress定时广播打印机信息(默认30秒),本地网络主机自动发现可用打印机。

4.2 跨子网打印(BrowsePoll + BrowseRelay)

配置项 作用
BrowsePoll server 主动轮询远程CUPS服务器的打印机信息
BrowseRelay src dest 将打印信息中继到其他子网

跨子网示例(从服务器copeland配置):

BrowsePoll allie      # 轮询allie(192.168.1.5)
BrowsePoll jj         # 轮询jj(192.168.2.14)
BrowseRelay 127.0.0.1 192.168.3.255   # 中继到192.168.3.0子网

5. CUPS过滤器链

概念 说明
过滤器链 将提交文档逐步转换为打印机原生格式
mime.types 定义文件类型识别规则(如%PDFapplication/pdf
mime.convs 定义格式转换规则 + 成本(成本最低的链优先)
PPD(PostScript Printer Description) 打印机能力描述文件,定义支持的MIME类型和最终过滤器

示例转换链:PDF → pdftops → PostScript → foomatic-rip → PCL(打印机原生)

查看可用后端

1
lpinfo -v    # 列出CUPS识别的所有设备和URI类型

6. CUPS服务器配置

6.1 配置文件

文件 说明
/etc/cups/cupsd.conf 主配置文件(类似Apache格式)
/etc/cups/ppd/ 打印机PPD文件
/var/log/cups/ 日志目录(access_log、error_log、page_log)

修改cupsd.conf后需重启cupsd:systemctl restart cups

6.2 设置网络打印服务器

修改访问控制(允许子网访问):

<Location />
    Order Deny,Allow
    Deny From All
    Allow From 127.0.0.1
    Allow From 192.168.0.0
</Location>

启用广播

BrowseAddress 192.168.0.255:631

6.3 添加打印机(命令行)

1
2
3
4
5
# 添加并口打印机
lpadmin -p groucho -E -v parallel:/dev/lp0 -m pxicolor.ppd

# 添加网络打印机(socket协议)
lpadmin -p fezmo -E -v socket://192.168.0.12 -m laserjet.ppd

常用URI格式

  • parallel:/dev/lp0 — 并口
  • usb://... — USB
  • socket://192.168.0.12 — 网络(AppSocket/HP JetDirect)
  • ipp://server/printers/name — IPP网络打印
  • lpd://server/queue — LPD协议
  • http://server:631/printers/name — HTTP/CUPS

💡 lpinfo -v 可列出系统支持的设备URI类型。

6.4 停止/禁用打印机

场景 命令 效果
临时暂停打印(换墨盒) cupsdisable printer 已有作业保留,暂停打印
长时间停机 reject printer 拒绝新作业提交,已有作业继续
恢复打印 cupsenable printer
接受新作业 accept printer
删除打印机 lpadmin -x printer

7. 故障排除技巧

7.1 检查清单

检查点 命令/方法
守护进程是否运行 systemctl status cups
物理连接 lpinfo -v 查看后端是否识别设备
网络连通性 telnet printer_host 631 或浏览器访问http://printer:631
CUPS日志 /var/log/cups/error_log
系统日志 journalctl -u cups/var/log/syslog
队列状态 lpstat -tlpq
过滤器问题 检查/usr/lib/cups/filter/目录权限

7.2 日志文件(3种)

日志 内容
page_log 打印的页面数
access_log 类似Apache访问日志(HTTP/IPP请求)
error_log 错误和调试信息(级别由cupsd.conf控制)

7.3 直接测试后端

1
2
3
# 测试USB打印机连接
/usr/lib/cups/backend/usb
# 输出中若缺少打印机,说明物理连接或驱动有问题

7.4 重启cupsd

1
2
3
sudo systemctl restart cups          # Linux(systemd)
sudo service cups restart            # SysV
sudo kill -HUP `cat /var/run/cups/cupsd.pid`   # 传统方式

8. 本章核心命令速查表

命令 功能
lpr file 提交打印作业
lpq 查看打印队列
lprm job_id 取消打印作业
lpstat -t 打印服务器完整状态
lpstat -p 查看所有打印机状态
lpoptions -d printer 设置默认打印机
lpoptions -l 列出当前打印选项
lpadmin -p printer -E -v uri -m ppd 添加打印机
lpadmin -x printer 删除打印机
cupsenable/cupsdisable printer 启用/禁用打印机(出口)
accept/reject printer 接受/拒绝作业提交(入口)
lpinfo -v 列出可用设备和URI类型
lpmove job_id destination 将作业移到另一队列