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

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 PDF
标准 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 练习题

  1. 概念题:比较 PCL 和 PostScript 两种页面描述语言的主要区别和适用场景。

  2. 实操题:在你的系统上安装 HPLIP 驱动,并使用 hp-setup 工具添加一台 HP 打印机。

  3. 无驱动题:使用 ippfind 发现网络中的 IPP Everywhere 打印机,并使用 -m everywhere 添加。

  4. Ghostscript 题:使用 Ghostscript 将一个 PDF 文件转换为 PNG 图像,分别尝试 150 DPI 和 300 DPI。

  5. 决策题:为以下打印机选择最合适的驱动:(a) HP LaserJet Pro M404 (b) Brother HL-L2350DW (c) 一台旧的 USB 针式打印机。