CUPS 打印服务完全指南 / 第 4 章:打印机驱动
第 4 章:打印机驱动
打印机驱动是连接应用程序和打印硬件的桥梁。本章将深入解析打印机驱动的工作原理,涵盖 PCL、PostScript 等页面描述语言,以及现代无驱动打印技术。
4.1 打印机驱动概述
4.1.1 驱动在打印栈中的位置
┌────────────────────────────────────────────┐
│ 应用程序 (Application) │
│ 生成 PDF/PostScript/文本等格式 │
├────────────────────────────────────────────┤
│ CUPS 过滤器系统 │
│ 格式转换: PDF → PostScript → 光栅数据 │
├────────────────────────────────────────────┤
│ ▶ 打印机驱动 (Printer Driver) ◀ │
│ 生成打印机可理解的页面描述语言 │
├────────────────────────────────────────────┤
│ CUPS 后端 │
│ 传输数据到打印机 (USB/网络) │
├────────────────────────────────────────────┤
│ 打印机硬件 │
│ 解析页面描述语言 → 打印输出 │
└────────────────────────────────────────────┘
4.1.2 页面描述语言(PDL)对比
| 特性 | PCL | PostScript | ESC/P | KPDL |
|---|---|---|---|---|
| 开发者 | HP | Adobe | Epson | Kyocera |
| 首次发布 | 1984 | 1984 | 1980 | 1990s |
| 复杂度 | 低-中 | 高 | 低 | 中 |
| 矢量图形 | 有限 | 完整 | 有限 | 支持 |
| 字体支持 | 内置字体 | Type 1/TrueType | 位图字体 | TrueType |
| 跨平台 | 广泛 | 广泛 | 主要 Epson | 主要 Kyocera |
| 可移植性 | 中 | 高 | 低 | 中 |
| CPU 要求 | 低 | 高(打印机端) | 低 | 中 |
| 典型应用 | 激光/多功能打印机 | 高端打印机/出版 | 针式/喷墨打印机 | Kyocera 打印机 |
4.1.3 CUPS 中的驱动架构
输入文档 (PDF/PS/Text/Image)
│
▼
┌──────────────────────────────┐
│ MIME 类型检测 │
│ (mime.types 文件) │
├──────────────────────────────┤
│ 过滤器链 │
│ │
│ PDF ─┬─ pdftops ──→ PS │
│ └─ pdftoraster ─→ 光栅 │
│ │
│ Text ─ texttops ──→ PS │
│ │
│ Image ─ imagetops ──→ PS │
├──────────────────────────────┤
│ ▶ 打印机驱动 ◀ │
│ │
│ PostScript 打印机: │
│ PS ──→ 直接发送 │
│ │
│ PCL 打印机: │
│ PS ──→ pstops ──→ PCL │
│ │
│ 光栅打印机: │
│ PS ──→ ghostscript ──→ │
│ 光栅数据 ──→ rastertoxxx │
├──────────────────────────────┤
│ 后端 (Backend) │
│ USB/Socket/IPP/LPD │
└──────────────────────────────┘
4.2 PCL(Printer Command Language)
4.2.1 PCL 版本与特性
| 版本 | 发布年份 | 主要特性 |
|---|---|---|
| PCL 1 | 1984 | 基本文本打印 |
| PCL 2 | 1984 | 增强文本格式 |
| PCL 3 | 1985 | 位图图形 |
| PCL 4 | 1987 | 更多图形功能 |
| PCL 5 | 1990 | 矢量图形、HP-GL/2 |
| PCL 5e | 1992 | 增强型,双向通信 |
| PCL 5c | 1992 | 彩色打印 |
| PCL 6 (PCL XL) | 1995 | 对象导向、高级图形 |
| PCL 6c | 1997 | 彩色增强 |
4.2.2 PCL 命令基础
# PCL 命令结构
# ESC + 参数 + 命令字母
# 常用 PCL 命令示例(使用十六进制)
# ESC E - 打印机复位
# ESC &l1O - 横向打印
# ESC &a0L - 左边距设为 0
# ESC &l66P - 设置页面长度为 66 行
# ESC (10U - 选择 PC-8 字符集
# ESC (s1P - 选择比例字体
# ESC (s0S - 选择正常样式
# ESC (s3T - 选择 Courier 字体
# 测试 PCL 命令(直接发送到打印机)
echo -e "\x1BE\x1B&l1O\x1B(s0P\x1B(s3T\x1B(s12HHello, PCL!" | \
lp -d myprinter -o raw
# 生成 PCL 测试页
cat << 'EOF' > /tmp/test.pcl
E Reset printer
&l1O Landscape orientation
&l6D 6 LPI
(s0P Spacing: fixed
(s3T Font: Courier
(s12H Pitch: 12 CPI
&a10L Left margin: 10 columns
Hello, World!
This is a PCL test page.
E Reset printer
EOF
# 打印 PCL 文件
lp -d myprinter -o raw /tmp/test.pcl
4.2.3 PCL 在 CUPS 中的实现
# CUPS 使用 PPD 文件指定打印机的 PCL 能力
# PPD 中的 PCL 相关条目
# 查看 PPD 文件中的 PCL 信息
grep -i "PCL" /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd
# 常见 PCL 驱动路径
ls /usr/lib/cups/filter/ | grep -i pcl
# hp-pcl - HP PCL 过滤器
# pclmtops - PCLm 转 PostScript
# 使用 pcltoxxx 过滤器
# CUPS 自动选择合适的过滤器
# PCL 5/5e/5c: 使用 ghostscript + pxlcolor/pxlmono
# PCL 6/XL: 使用 pxlcolor/pxlmono 驱动
4.2.4 PCL 优缺点
| 优点 | 缺点 |
|---|---|
| 广泛的打印机支持 | 不如 PostScript 灵活 |
| 较低的 CPU 需求 | 矢量图形支持有限 |
| 快速文本打印 | 字体管理不如 PostScript |
| 简单的命令集 | 不适合复杂出版 |
| 二进制格式,体积小 | 调试困难 |
4.3 PostScript
4.3.1 PostScript 概述
PostScript 是由 Adobe 开发的页面描述语言,是专业打印和出版的标准:
# PostScript 文件结构
cat << 'EOF' > /tmp/hello.ps
%!PS-Adobe-3.0
%%Title: Hello World
%%Creator: CUPS Tutorial
%%Pages: 1
%%EndComments
%%Page: 1 1
/Helvetica findfont 24 scalefont setfont
72 720 moveto
(Hello, World!) show
showpage
EOF
# 打印 PostScript 文件
lp -d myprinter -o raw /tmp/hello.ps
# 或让 CUPS 自动处理
lp -d myprinter /tmp/hello.ps
4.3.2 PostScript 语言特性
# PostScript 是一种完整的编程语言
# 支持变量、函数、条件、循环
# 示例:绘制矩形
cat << 'EOF' > /tmp/rectangle.ps
%!PS-Adobe-3.0
%%Title: Rectangle Example
%%Pages: 1
%%EndComments
%%Page: 1 1
% 定义矩形过程
/rect {
/height exch def
/width exch def
/y exch def
/x exch def
newpath
x y moveto
width 0 rlineto
0 height rlineto
width neg 0 rlineto
closepath
stroke
} def
% 绘制矩形
100 600 200 100 rect
200 400 150 80 rect
% 绘制填充矩形
300 200 100 60 rect
0.5 setgray
fill
showpage
EOF
lp -d myprinter -o raw /tmp/rectangle.ps
4.3.3 CUPS 中的 PostScript 处理
# 查看 PostScript 相关过滤器
ls /usr/lib/cups/filter/ | grep -i ps
# pstops - PostScript 到 PostScript 转换(添加选项)
# pdftops - PDF 到 PostScript 转换
# texttops - 文本到 PostScript 转换
# PostScript 处理流程
# 文档 → CUPS → pstops (添加选项如 N-up、双面) → 打印机
# pstops 过滤器功能
# - 添加页码
# - 双面打印
# - 多版合一
# - 水印
# - 页面缩放
# 查看 pstops 过滤器信息
man pstops
4.3.4 PostScript 字体
# Type 1 字体位置
ls /usr/share/fonts/type1/
# 通常包含 Nimbus Roman、Nimbus Sans 等
# 查看系统可用的 PostScript 字体
fc-list | grep -i "adobe"
# 安装 PostScript 字体
sudo apt install fonts-liberation
# 包含 Liberation Sans, Liberation Serif, Liberation Mono
# 分别替代 Arial, Times New Roman, Courier New
# Ghostscript 查看可用字体
gs -h | head -20
# 列出所有编译进去的字体
4.3.5 PostScript 与 PDF 对比
| 特性 | PostScript | |
|---|---|---|
| 标准 | ISO 标准 | ISO 标准 |
| 可编程 | 是(图灵完备) | 否(受限) |
| 交互性 | 无 | 支持表单、链接 |
| 压缩 | 不原生支持 | 支持多种压缩 |
| 字体嵌入 | 支持 | 支持 |
| 打印行业 | 传统标准 | 现代标准 |
| CUPS 处理 | 直接支持 | 需转换为 PS 或光栅 |
4.4 CUPS 驱动列表
4.4.1 内置驱动
# 列出所有可用驱动
lpinfo -m
# 按制造商筛选
lpinfo -m | grep -i "HP" | head -20
lpinfo -m | grep -i "Canon" | head -20
lpinfo -m | grep -i "Epson" | head -20
lpinfo -m | grep -i "Brother" | head -20
lpinfo -m | grep -i "Samsung" | head -20
# 统计驱动数量
lpinfo -m | wc -l
# 通常有数千个驱动可用
# 搜索特定型号
lpinfo -m | grep "LaserJet Pro M404"
4.4.2 常见驱动包
# Ubuntu/Debian 驱动包
apt search printer-driver | grep -E "^printer-driver"
# 主要驱动包说明
# printer-driver-gutenprint - Gutenprint(广泛支持)
# printer-driver-hpcups - HP CUPS 驱动
# printer-driver-postscript-hp - HP PostScript 驱动
# printer-driver-splix - Samsung/SPL 驱动
# printer-driver-brlaser - Brother 激光打印机
# printer-driver-foo2zjs - foo2zjs 驱动
# printer-driver-pxljr - HP Color LaserJet
# printer-driver-c2esp - Kodak ESP 打印机
# printer-driver-min12xxw - Minolta 打印机
# printer-driver-pnm2ppa - HP PPA 打印机
# printer-driver-ptouch - Brother P-touch 标签
# printer-driver-hagaki-tracker - 光盘打印机
# 安装所有推荐的驱动
sudo apt install -y printer-driver-*
4.4.3 查看驱动详情
# 查看特定驱动的 PPD 文件
ls /usr/share/ppd/ | head -20
# 查看 HP 驱动
ls /usr/share/ppd/HP/
# 查看 Gutenprint 驱动
ls /usr/share/ppd/gutenprint/5.3/
# 查看驱动的详细信息
sudo cat /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd | head -50
# 使用 ppdc 查看 PPD 文件信息
ppdc -l /usr/share/ppd/HP/hp-laserjet_pro_m404.ppd
4.5 厂商驱动
4.5.1 HP 驱动 (HPLIP)
# 安装 HPLIP
sudo apt install -y hplip
# HPLIP 组件
dpkg -L hplip | grep -E "bin/|filter/|backend/"
# 主要组件
# hp-setup - 打印机设置向导
# hp-info - 打印机信息
# hp-probe - 打印机检测
# hp-testpage - 测试页
# hp-clean - 清洁打印头
# hp-align - 打印头对齐
# hp-firmware - 固件升级
# hp-pkservice - 服务管理
# 使用 hp-setup 添加打印机
hp-setup 192.168.1.100 # 网络打印机
hp-setup -u # USB 打印机
# 查看 HPLIP 支持的打印机列表
hp-info -s # 已安装的打印机
hp-probe # 检测网络打印机
# HPLIP 驱动位置
ls /usr/share/ppd/HP/
ls /usr/share/hplip/
ls /usr/lib/cups/filter/ | grep hp
4.5.2 Brother 驱动
# 下载 Brother 驱动
# https://support.brother.com/g/b/downloadtop.aspx
# 以 Brother HL-L2350DW 为例
wget https://download.brother.com/welcome/dlf103973/hll2350dwpdrv-4.0.0-1.i386.deb
# 安装驱动
sudo dpkg -i --force-all hll2350dwpdrv-4.0.0-1.i386.deb
sudo apt -f install # 修复依赖
# 添加打印机
sudo lpadmin -p Brother -E \
-v "socket://192.168.1.100:9100" \
-P /opt/brother/Printers/HLL2350DW/lpd/HLL2350DW.ppd
# Brother 通用驱动
# https://support.brother.com/g/b/downloadlist.aspx?c=us&lang=en&prod=hll2350dw_us_as&os=128
4.5.3 Canon 驱动
# Canon UFR II 驱动
# 下载自 Canon 官网
# https://www.usa.canon.com/support/business-product-support
# 安装
sudo dpkg -i cndrvcups-ufr2-uk_5.xx-1_amd64.deb
sudo dpkg -i cndrvcups-common_5.xx-1_amd64.deb
# 驱动文件位置
ls /usr/share/ppd/cupsfilters/
ls /usr/lib/cups/filter/ | grep canon
4.5.4 Epson 驱动
# Epson 驱动下载
# https://download.ebz.epson.net/dsc/search/01/search/?OSC=LX
# 安装 Epson 驱动
sudo dpkg -i epson-inkjet-printer-escpr_1.xx-1_amd64.deb
sudo dpkg -i epson-printer-utility_1.xx-1_amd64.deb
# Epson ESC/P-R 驱动
ls /usr/share/ppd/epson-inkjet-printer-escpr/
# 使用 Epson 驱动添加打印机
sudo lpadmin -p Epson -E \
-v "socket://192.168.1.101:9100" \
-P /usr/share/ppd/epson-inkjet-printer-escpr/Epson-EW-M970AFT-ESCPR.ppd
4.5.5 Xerox 驱动
# Xerox 驱动下载
# https://www.support.xerox.com/
# 安装 Xerox 驱动
sudo dpkg -i xerox-prtdrv-pcl_5.xxx-1_amd64.deb
# 驱动位置
ls /usr/share/ppd/xerox/
4.5.6 Ricoh 驱动
# Ricoh 驱动
# https://support.ricoh.com/bb/html/dr_ut_e/rc_model/net5/g5_001.nem.htm
# 安装
sudo dpkg -i ricoh-sp-c250dn_1.0.2-1_amd64.deb
# 驱动位置
ls /usr/share/ppd/Ricoh/
4.6 无驱动打印(Driverless Printing)
4.6.1 无驱动打印概述
无驱动打印是现代打印技术的重要进步,无需安装特定打印机驱动:
传统打印流程:
应用程序 → CUPS → 过滤器 → 驱动程序 → 打印机
↑
需要安装驱动
无驱动打印流程:
应用程序 → CUPS → IPP Everywhere / AirPrint → 打印机
↑
无需驱动
4.6.2 IPP Everywhere
# IPP Everywhere 是 PWG(打印工作组)标准
# 支持 IPP Everywhere 的打印机无需驱动即可打印
# 检查系统是否支持 IPP Everywhere
cups-config --version
# 需要 CUPS 2.2+
# 检查 cups-filters 版本
dpkg -l cups-filters
# 需要 1.28.0+
# 使用 ippfind 发现 IPP Everywhere 打印机
ippfind
# 输出示例:
# ipp://HP-LaserJet-Pro.local:631/ipp/print
# 添加 IPP Everywhere 打印机
sudo lpadmin -p MyPrinter -E \
-v "ipp://HP-LaserJet-Pro.local/ipp/print" \
-m "everywhere"
# 或使用 DNS-SD URI
sudo lpadmin -p MyPrinter -E \
-v "dnssd://HP%20LaserJet%20Pro%20M404._ipp._tcp.local./" \
-m "everywhere"
# 查看 IPP Everywhere 打印机信息
ipptool -tv ipp://HP-LaserJet-Pro.local/ipp/print get-printer-attributes.test
4.6.3 AirPrint
# AirPrint 是 Apple 的无驱动打印协议
# 基于 IPP Everywhere + DNS-SD
# 在 Linux 上配置 AirPrint 支持
sudo apt install -y avahi-daemon
# 创建 AirPrint 服务文件
sudo tee /etc/avahi/services/airprint.service << 'EOF'
<?xml version="1.0" standalone="no"?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">CUPS Printer on %h</name>
<service>
<type>_ipp._tcp</type>
<subtype>_universal._sub._ipp._tcp</subtype>
<port>631</port>
<txt-record>rp=ipp/print</txt-record>
<txt-record>txtvers=1</txt-record>
<txt-record>qtotal=1</txt-record>
<txt-record>Transparent=T</txt-record>
<txt-record>URF=DM3</txt-record>
</service>
</service-group>
EOF
# 重启 Avahi
sudo systemctl restart avahi-daemon
# iOS/macOS 设备现在可以发现此打印机
4.6.4 Mopria
# Mopria 是 Android 的打印标准
# 基于 IPP Everywhere
# 确保 Android 设备可以发现打印机
# 1. 启用 CUPS 共享
sudo cupsctl --share-printers
# 2. 启用 DNS-SD 发布
sudo cupsctl BrowseLocalProtocols=dnssd
# 3. 安装 Avahi
sudo apt install -y avahi-daemon
# 4. 配置防火墙
sudo ufw allow 631/tcp
sudo ufw allow 5353/udp # mDNS
# Android 设备可以在"设置→打印"中发现打印机
4.6.5 无驱动打印兼容性
# 查询打印机是否支持 IPP Everywhere
# 方法 1: 使用 ipptool
ipptool -tv ipp://192.168.1.100/ipp/print get-printer-attributes.test | \
grep -i "ipp-everywhere"
# 方法 2: 查看打印机属性
ipptool -tv ipp://192.168.1.100/ipp/print get-printer-attributes.test | \
grep -i "urf\|URF"
# URF (Uniform Raster Format) 标签说明:
# DM3 - Duplex, Margins, 3 (支持双面)
# RS300 - Raster, 300 DPI
# RS600 - Raster, 600 DPI
# W8 - 基本功能
# 方法 3: 查看 OpenPrinting 数据库
# https://www.openprinting.org/printers
4.6.6 无驱动打印配置脚本
#!/bin/bash
# 自动发现和配置无驱动打印机
echo "=== 自动发现 IPP Everywhere 打印机 ==="
# 发现打印机
printers=$(ippfind --txt rp 2>/dev/null)
if [ -z "$printers" ]; then
echo "未发现 IPP Everywhere 打印机"
echo "尝试使用 avahi 发现..."
avahi-browse -t -r _ipp._tcp 2>/dev/null | grep "hostname"
exit 1
fi
for printer_uri in $printers; do
# 获取打印机名称
printer_name=$(ipptool -tv "$printer_uri" get-printer-attributes.test 2>/dev/null | \
grep "printer-name" | awk -F'"' '{print $2}')
if [ -n "$printer_name" ]; then
echo "发现打印机: $printer_name"
echo "URI: $printer_uri"
# 自动添加打印机
safe_name=$(echo "$printer_name" | sed 's/[^a-zA-Z0-9_-]/-/g')
sudo lpadmin -p "$safe_name" -E \
-v "$printer_uri" \
-m "everywhere" \
-D "$printer_name"
echo "已添加: $safe_name"
fi
done
echo "=== 配置完成 ==="
4.7 Ghostscript 与光栅化
4.7.1 Ghostscript 简介
# Ghostscript 是 PostScript/PDF 解释器
# 用于将 PS/PDF 转换为光栅数据
# 安装 Ghostscript
sudo apt install -y ghostscript
# 查看版本
gs --version
# Ghostscript 支持的设备
gs -h 2>&1 | grep -A 100 "Available devices:" | head -40
# 常用设备
# ps2write - PostScript Level 2
# pdfwrite - PDF
# pxlcolor - PCL 6 Color
# pxlmono - PCL 6 Monochrome
# ljet4 - HP LaserJet 4
# lj5gray - HP LaserJet 5 Gray
# lj5color - HP LaserJet 5 Color
# png16m - PNG 16M colors
# jpeg - JPEG
# tiff32nc - TIFF 32-bit CMYK
4.7.2 Ghostscript 命令使用
# PS 转 PDF
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
-sOutputFile=output.pdf input.ps
# PDF 转 PS
gs -dNOPAUSE -dBATCH -sDEVICE=ps2write \
-sOutputFile=output.ps input.pdf
# PDF 转 PNG
gs -dNOPAUSE -dBATCH -sDEVICE=png16m \
-r300 \
-sOutputFile=output%d.png input.pdf
# PS 转 PCL
gs -dNOPAUSE -dBATCH -sDEVICE=pxlmono \
-sOutputFile=output.pxl input.ps
# 降低 PDF 文件大小
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
-dPDFSETTINGS=/ebook \
-sOutputFile=small.pdf large.pdf
# PDF 设置选项
# /screen - 最低质量,最小文件
# /ebook - 中等质量
# /printer - 打印质量
# /prepress - 最高质量
4.7.3 CUPS 中的光栅化
# CUPS Raster 是 CUPS 的光栅数据格式
# 用于驱动光栅打印机
# 查看 CUPS Raster 相关过滤器
ls /usr/lib/cups/filter/ | grep raster
# gstoraster - Ghostscript 到 CUPS Raster
# imagetoraster - 图像到 CUPS Raster
# pdftoraster - PDF 到 CUPS Raster
# texttoraster - 文本到 CUPS Raster
# rastertopwg - CUPS Raster 到 PWG Raster
# CUPS Raster 数据流
# 文档 → [过滤器] → CUPS Raster → [rastertoxxx 驱动] → 打印机
# 查看 rastertoxxx 驱动
ls /usr/lib/cups/filter/ | grep rasterto
# rastertodymo - DYMO 标签打印机
# rastertoescpx - Epson ESC/P
# rastertohp - HP 打印机
# rastertolabel - 标签打印机
# rastertopclx - PCL 打印机
4.8 驱动选择决策
4.8.1 决策流程图
开始
│
▼
打印机是否支持 IPP Everywhere?
│
├── 是 → 使用 -m "everywhere"(推荐)
│
└── 否
│
▼
打印机是否有厂商 Linux 驱动?
│
├── 是 → 安装厂商驱动
│
└── 否
│
▼
打印机是否支持 PostScript?
│
├── 是 → 使用 Generic PostScript 驱动
│
└── 否
│
▼
打印机是否支持 PCL?
│
├── 是 → 使用 Generic PCL 驱动
│ (如 Gutenprint, foo2zjs)
│
└── 否
│
▼
使用 Generic 或 Raw 驱动
(功能可能受限)
4.8.2 驱动选择参考表
| 打印机类型 | 推荐驱动 | 备选方案 |
|---|---|---|
| HP 激光打印机 | HPLIP (hpcups) | IPP Everywhere |
| HP 喷墨打印机 | HPLIP (hpcups) | Gutenprint |
| Canon 激光打印机 | Canon UFR II | Generic PCL |
| Canon 喷墨打印机 | Canon IJ | Gutenprint |
| Epson 打印机 | Epson ESC/P-R | Gutenprint |
| Brother 打印机 | Brother 官方驱动 | foo2zjs |
| Samsung 打印机 | SPLIX | Generic PCL |
| 网络打印机 | IPP Everywhere | 厂商驱动 |
| 标签打印机 | 厂商驱动 | Generic Label |
| 针式打印机 | Generic Epson | 厂商驱动 |
# 快速查找打印机驱动
# 方法 1: 使用 lpinfo
lpinfo -m | grep -i "打印机型号"
# 方法 2: 使用 OpenPrinting 数据库
# https://www.openprinting.org/printers
# 方法 3: 使用 foomatic
foomatic-ppdfile -l | grep -i "打印机型号"
4.9 业务场景
4.9.1 场景一:批量驱动部署
#!/bin/bash
# 批量安装打印机驱动脚本
echo "=== 安装打印机驱动 ==="
# 安装通用驱动
sudo apt install -y \
printer-driver-gutenprint \
printer-driver-hpcups \
printer-driver-postscript-hp \
printer-driver-splix \
printer-driver-brlaser \
printer-driver-foo2zjs \
printer-driver-c2esp \
printer-driver-min12xxw \
printer-driver-pnm2ppa \
printer-driver-ptouch
# 安装 HPLIP
sudo apt install -y hplip
# 安装 Ghostscript
sudo apt install -y ghostscript
# 安装 Foomatic
sudo apt install -y foomatic-db foomatic-db-engine
echo "=== 驱动安装完成 ==="
echo "可用驱动数量: $(lpinfo -m | wc -l)"
4.9.2 场景二:旧打印机驱动兼容
# 对于非常旧的打印机,可能需要旧版驱动
# 使用 foo2zjs 支持较旧的激光打印机
# 安装 foo2zjs
sudo apt install -y printer-driver-foo2zjs
# 查看支持的打印机
lpinfo -m | grep foo2zjs
# 安装固件(某些打印机需要)
# 下载固件
wget -O /tmp/sihpP1006.dl \
http://foo2zjs.rkkda.com/firmware/sihpP1006.dl
# 复制固件到 CUPS
sudo cp /tmp/sihpP1006.dl /usr/share/foo2zjs/firmware/
# 添加打印机
sudo lpadmin -p OldPrinter -E \
-v "usb://HP/LaserJet%20P1006?serial=xxx" \
-P /usr/share/ppd/foo2zjs/HP-LaserJet_P1006.ppd
4.10 扩展阅读
| 资源 | 链接 | 说明 |
|---|---|---|
| OpenPrinting | https://www.openprinting.org/ | 打印机驱动数据库 |
| HPLIP 项目 | https://developers.hp.com/hp-linux-imaging-and-printing | HP 驱动官方 |
| Gutenprint | https://gimp-print.sourceforge.io/ | 开源驱动集合 |
| Ghostscript | https://www.ghostscript.com/ | PS/PDF 解释器 |
| IPP Everywhere | https://www.pwg.org/ipp/everywhere.html | 无驱动打印标准 |
| foo2zjs | https://foo2zjs.rkkda.com/ | 开源打印机驱动 |
| PCL 参考 | https://www.pwg.org/ | PCL 技术文档 |
4.11 本章小结
| 主题 | 关键要点 |
|---|---|
| PCL | HP 开发,广泛支持,适合文本打印 |
| PostScript | Adobe 开发,功能强大,适合出版 |
| 无驱动打印 | IPP Everywhere/AirPrint,无需安装驱动 |
| Ghostscript | PS/PDF 解释器,CUPS 光栅化核心 |
| 驱动选择 | 优先 IPP Everywhere → 厂商驱动 → 通用驱动 |
下一章预告:我们将深入学习 PPD 文件的结构和自定义配置,包括纸张设置、双面打印、水印等高级选项。
4.12 练习题
概念题:比较 PCL 和 PostScript 两种页面描述语言的主要区别和适用场景。
实操题:在你的系统上安装 HPLIP 驱动,并使用
hp-setup工具添加一台 HP 打印机。无驱动题:使用
ippfind发现网络中的 IPP Everywhere 打印机,并使用-m everywhere添加。Ghostscript 题:使用 Ghostscript 将一个 PDF 文件转换为 PNG 图像,分别尝试 150 DPI 和 300 DPI。
决策题:为以下打印机选择最合适的驱动:(a) HP LaserJet Pro M404 (b) Brother HL-L2350DW (c) 一台旧的 USB 针式打印机。