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

CUPS 打印服务完全指南 / 第 4 章:打印机驱动

第 4 章:打印机驱动

打印机驱动是连接应用程序和打印硬件的桥梁。本章将深入解析打印机驱动的工作原理,涵盖 PCL、PostScript 等页面描述语言,以及现代无驱动打印技术。


4.1 打印机驱动概述

4.1.1 驱动在打印栈中的位置

┌────────────────────────────────────────────┐
│          应用程序 (Application)              │
│     生成 PDF/PostScript/文本等格式           │
├────────────────────────────────────────────┤
│          CUPS 过滤器系统                     │
│     格式转换: PDF → PostScript → 光栅数据    │
├────────────────────────────────────────────┤
│     ▶ 打印机驱动 (Printer Driver) ◀         │
│     生成打印机可理解的页面描述语言           │
├────────────────────────────────────────────┤
│          CUPS 后端                          │
│     传输数据到打印机 (USB/网络)             │
├────────────────────────────────────────────┤
│          打印机硬件                          │
│     解析页面描述语言 → 打印输出              │
└────────────────────────────────────────────┘

4.1.2 页面描述语言(PDL)对比

特性PCLPostScriptESC/PKPDL
开发者HPAdobeEpsonKyocera
首次发布1984198419801990s
复杂度低-中
矢量图形有限完整有限支持
字体支持内置字体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 11984基本文本打印
PCL 21984增强文本格式
PCL 31985位图图形
PCL 41987更多图形功能
PCL 51990矢量图形、HP-GL/2
PCL 5e1992增强型,双向通信
PCL 5c1992彩色打印
PCL 6 (PCL XL)1995对象导向、高级图形
PCL 6c1997彩色增强

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 对比

特性PostScriptPDF
标准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 IIGeneric PCL
Canon 喷墨打印机Canon IJGutenprint
Epson 打印机Epson ESC/P-RGutenprint
Brother 打印机Brother 官方驱动foo2zjs
Samsung 打印机SPLIXGeneric 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 扩展阅读

资源链接说明
OpenPrintinghttps://www.openprinting.org/打印机驱动数据库
HPLIP 项目https://developers.hp.com/hp-linux-imaging-and-printingHP 驱动官方
Gutenprinthttps://gimp-print.sourceforge.io/开源驱动集合
Ghostscripthttps://www.ghostscript.com/PS/PDF 解释器
IPP Everywherehttps://www.pwg.org/ipp/everywhere.html无驱动打印标准
foo2zjshttps://foo2zjs.rkkda.com/开源打印机驱动
PCL 参考https://www.pwg.org/PCL 技术文档

4.11 本章小结

主题关键要点
PCLHP 开发,广泛支持,适合文本打印
PostScriptAdobe 开发,功能强大,适合出版
无驱动打印IPP Everywhere/AirPrint,无需安装驱动
GhostscriptPS/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 针式打印机。