第 12 章打印机操作

目录

12.1. 打印系统工作流程
12.2. 连接打印机的方法和协议
12.3. 安装软件
12.4. 网络打印机
12.5. 从命令行打印
12.6. 中的特殊功能SUSE Linux Enterprise Desktop
12.7. 查错

SUSE® Linux Enterprise Desktop 支持用许多类型的打印机进行打印,包括远程网络打印机。可以手动或使用 YaST 配置打印机。有关配置描述,请参见第 5.5 节 “Setting Up a Printer” (第 5 章 Setting Up Hardware Components with YaST, ↑部署指南)。启动和管理打印任务时既可以使用图形实用程序,也可以使用命令行实用程序。如果打印机未能按预期正常工作,请参见第 12.7 节 “查错”

CUPS(通用 Unix 打印系统)是 SUSE Linux Enterprise Desktop 中的标准打印系统。

可以根据接口(例如 USB 或网络)以及打印机语言对打印机进行区分。购买打印机时,请确认打印机具有一个您的硬件上可用的接口(比如 USB 或并行接口)和合适的打印机语言。可以按照以下三类打印机语言对打印机进行分类:

PostScript 打印机

Linux 和 Unix 中的内部打印系统使用 PostScript 这种打印机语言生成并处理大部分打印任务。如果打印机可以直接处理 PostScript 文档而不需要在打印系统中通过附加步骤转换这些文档,则可以降低可能出现的错误的数目。

标准打印机(PCL 和 ESC/P 等语言)

虽然这些打印机语言有相当长的历史,但它们仍在进行扩展以处理打印机中的新功能。对于已知的打印机语言,打印系统可以借助 Ghostscript 将 PostScript 任务转换为相应的打印机语言。这一处理阶段被称为解释。最有名的语言有 PCL(主要是 HP 打印机及其克隆产品使用)和 ESC/P(Epson 打印机使用)。这些打印机语言通常受 Linux 支持,可以生成令人满意的打印效果。Linux 可能无法使用某些特殊打印机功能。除了 HP 开发的 HPLIP (HP Linux Imaging and Printing) 之外,目前尚无其他打印机制造商开发 Linux 驱动程序并在开放源代码许可证下将这些驱动程序提供给 Linux 经销商。

专有打印机(也称作 GDI 打印机)

这些打印机不支持任何常见的打印机语言。这些打印机使用自己的无文档记录打印机语言,该语言在发布新版本时可能发生变化。通常只有 Windows 驱动程序供这些打印机使用。有关更多信息,请参见第 12.7.1 节 “打印机没有标准打印机语言支持”

在您购买新打印机之前,请参考以下资源以了解您要购买的打印机的支持情况:

http://www.linuxfoundation.org/OpenPrinting/

包含打印机数据库的 OpenPrinting 主页。数据库显示最新的 Linux 支持状态。但是,Linux 分发只能集成生产时可用的驱动程序。因此,在最新的 SUSE Linux Enterprise Desktop 版本发布时,当前标为完全支持的打印机不一定具有此状态。这样,数据库不一定可以指出正确的状态,只是提供大致估计而已。

http://pages.cs.wisc.edu/~ghost/

Ghostscript 网页

/usr/share/doc/packages/ghostscript-library/catalog.devices

包含的驱动程序列表。

12.1. 打印系统工作流程

用户创建一个打印任务。该打印任务包含要打印的数据以及假脱机程序的信息,例如打印机的名称或打印机队列的名称,还可能包括过滤器的信息,例如特定于打印机的选项。

每台打印机至少有一个专用打印机队列。假脱机程序储存着队列中的打印任务,直到所需打印机已做好接收数据的准备。打印机准备就绪后,假脱机程序通过过滤器和后端将数据发送到打印机。

过滤器将转换正在打印的应用程序生成的数据(通常为 PostScript 或 PDF,也可能为 ASCII、JPEG 等)特定于打印机的数据(PostScript、PCL、ESC/P 等)。PPD 文件中描述了打印机的功能。PPD 文件包含打印机特定的选项以及在打印机上启用这些选项所需的参数。过滤器系统用于确保用户选择的选项被启用。

如果使用的是 PostScript 打印机,则过滤器系统将数据转换为打印机特定的 PostScript。这样做不需要打印机驱动程序。如果使用的是非 PostScript 打印机,则过滤器系统将数据转换为打印机专用的数据。这样做需要一个适合您的打印机的 打印机驱动程序。后端从过滤器接收打印机特定的数据,然后将其传递到打印机。

12.2. 连接打印机的方法和协议

可以通过多种方法将打印机连接到系统。CUPS 打印系统的配置不能区分本地打印机和通过网络连接到系统的打印机。

[Warning]更改处于运行状态系统中的电缆连接

当将打印机连接到计算机时,一定不要忘记操作期间只能插入或拔下 USB 设备。为防止损坏系统或打印机,请在更改任何非 USB 连接前先关闭系统。

12.3. 安装软件

PPD(PostScript 打印机描述)是描述属性(例如,分辨率)和选项(例如,双面打印单位的可用性)的计算机语言。这些描述对于使用 CUPS 中的各个打印机选项是必需的。如果没有 PPD 文件,打印数据将被以原始状态转发到打印机,通常这不是希望出现的情况。SUSE Linux Enterprise Desktop 安装期间将预安装多个 PPD 文件。

要配置 PostScript 打印机,最佳的方法是获得一个合适的 PPD 文件。包 manufacturer-PPDs 中提供许多 PPD 文件,标准安装会自动安装此包。请参见第 12.6.2 节 “多种包中的 PPD 文件”第 12.7.2 节 “没有合适的 PPD 文件可用于 PostScript 打印机”

可以将新 PPD 文件储存在目录 /usr/share/cups/model/ 中或使用 YaST 添加到打印系统中,如第 5.5.1.1 节 “Adding Drivers with YaST” (第 5 章 Setting Up Hardware Components with YaST, ↑部署指南)中所述。随后,可以在打印机设置过程中选择 PPD 文件。

如果打印机制造商希望您安装整个软件包,请务必小心。首先,此类安装将导致丢失 SUSE Linux Enterprise Desktop 提供的支持;其次,打印命令可能以不同的方式运行,系统可能不再能处理其他制造商的设备。出于此原因,不建议安装制造商软件。

12.4. 网络打印机

网络打印机可以支持多种协议,其中某些甚至是同时进行的。尽管大部分支持的协议都已标准化,但某些制造商可能修改了标准。他们仅提供适用于少数操作系统的驱动程序。不过很少提供 Linux 驱动程序。当前的情况是您在执行操作时不能假定每个协议都可以在 Linux 中正常工作。因此,您可能需要试验不同的选项来实现工作正常的配置。

CUPS 支持 socketLPDIPPsmb 协议。

套接字

套接字是指将纯文本打印数据直接发送到 TCP 套接字的连接。一些常用的套接字端口号包括 910035。设备 URI(统一资源标识符)的语法为 socket://打印机 IP:端口,例如 socket://192.168.2.202:9100/

LPD(行式打印机守护程序)

LPD 协议如 RFC 1179 中所述。使用此协议,打印机队列 ID 等任务相关数据将在发送实际打印数据之前发送。因此,配置 LPD 协议时必须指定打印机队列。不同打印机制造商的实施非常灵活,可以接受任何名称作为打印机队列。如果需要,打印机手册应该指出要使用的名称。通常使用 LPT、LPT1、LP1 或类似的名称。LPD 服务的端口号是 515。示例设备 URI 有 lpd://192.168.2.202/LPT1

IPP(因特网打印协议)

IPP 是一个基于 HTTP 协议的相对较新的协议 (1999)。使用 IPP,所传送的与任务有关的数据比其他协议要多一些。CUPS 使用 IPP 进行内部数据传送。要正确配置 IPP,必须提供打印队列的名称。IPP 的端口号是 631。示例设备 URI 有 ipp://192.168.2.202/psipp://192.168.2.202/printers/ps

SMB(Windows 共享)

CUPS 还支持在连接到 Windows 共享的打印机上进行打印。用于此目的的协议是 SMB。SMB 使用端口号 137138139。示例设备 URI 有 smb://user:password@workgroup/smb.example.com/printersmb://user:password@smb.example.com/printersmb://smb.example.com/printer

必须在配置之前确定打印机支持的协议。如果制造商未提供所需的信息,则可以使用命令 nmap(随 nmap 包提供)来确定协议。nmap 检查主机端口是否打开。例如:

nmap -p 35,137-139,515,631,9100-10000 printerIP

12.4.1. 使用命令行工具配置 CUPS

CUPS 可使用 lpinfolpadminlpoptions 之类的命令行工具配置。您需要一个设备 URI,该 URI 由一个后端(例如并行端口)和多个参数组成。要确定系统上的有效设备 URI,请使用命令 lpinfo -v | grep ":/"

# lpinfo -v | grep ":/"
direct usb://ACME/FunPrinter%20XL
direct parallel:/dev/lp0

使用 lpadmin,CUPS 服务器管理员可以添加、删除或管理打印队列。要添加打印队列,请使用以下语法:

lpadmin -p queue -v device-URI -P PPD-file -E

使用指定的 PPD 文件 (-p),则设备 (-v) 将用作队列 (-P)。这意味着如果要手动配置打印机,则必须了解 PPD 文件和设备 URI。

不要使用 -E 作为第一个选项。对于所有 CUPS 命令,将 -E 用作第一个参数设置使用加密连接。要启用打印机,必须使用 -E,如下面的示例所示:

lpadmin -p ps -v parallel:/dev/lp0 -P \
/usr/share/cups/model/Postscript.ppd.gz -E

以下示例配置了网络打印机:

lpadmin -p ps -v socket://192.168.2.202:9100/ -P \
/usr/share/cups/model/Postscript-level1.ppd.gz -E

有关 lpadmin 的更多选项,请参考 lpadmin(8) 的手册页。

在系统安装期间,某些选项被设置为默认值。可以为每个打印任务修改这些选项(根据所使用的打印工具)。也可以使用 YaST 来更改这些默认选项。使用命令行工具设置默认选项,如下所示:

  1. 首先,列出所有选项:

    lpoptions -p queue -l

    示例:

    Resolution/Output Resolution: 150dpi *300dpi 600dpi

    激活的默认选项通过加星号前缀 (*) 进行标识。

  2. 使用 lpadmin 更改选项:

    lpadmin -p queue -o Resolution=600dpi
  3. 检查新设置:

    lpoptions -p queue -l
    
    Resolution/Output Resolution: 150dpi 300dpi *600dpi

普通用户运行 lpoptions 时,设置将写到 ~/.cups/lpoptions。但是,设置将写到 /etc/cups/lpoptions

12.5. 从命令行打印

要从命令行打印,请输入 lp -d queuenamefilename,使用相应的名称替换 queuenamefilename

有些应用程序依赖于 lp 命令来进行打印。在这种情况下,请在应用程序的打印对话框中输入正确的命令(通常无需指定 filename),例如 lp -d queuename

12.6. SUSE Linux Enterprise Desktop 中的特殊功能

已对 CUPS 的许多功能进行了调整以用于 SUSE Linux Enterprise Desktop。这里将介绍一些最重要的更改。

12.6.1. CUPS 和防火墙

执行默认 SUSE Linux Enterprise Desktop 安装后,SuSEFirewall2 处于活动状态,且网络接口配置为处于外部区域中,该区域将阻止进来的通讯。第 15.4 节 “SuSEfirewall2” (第 15 章 Masquerading and Firewalls, ↑安全指南)中提供了有关 SuSEFirewall2 配置的更多信息。

12.6.1.1. CUPS 客户端

通常 CUPS 客户端在使用防火墙的可信网络环境中的常规工作站上运行。在这种情况下,建议将网络接口配置为在内部区域中,这样可以从网络内部访问工作站。

12.6.1.2. CUPS 服务器

如果 CUPS 服务器在受防火墙保护的可信网络环境中,则应将网络接口配置为在防火墙的内部区域中。建议不要在不可信网络环境中安装 CUPS 服务器,除非留心该服务器受到特殊防火墙规则和 CUPS 配置中的安全设置的保护。

12.6.2. 多种包中的 PPD 文件

YaST 打印机配置使用 /usr/share/cups/model 中安装的 PPD 文件为 CUPS 设置队列。为查找适用于打印机型号的 PPD 文件,YaST 将对硬件检测过程中确定的供应商和型号以及所有 PPD 文件中的供应商和型号进行比较。为此,YaST 打印机配置根据从 PPD 文件抽取的供应商和型号信息生成一个数据库。

仅使用 PPD 文件而不使用其他信息源的配置的优点在于可以随意修改 /usr/share/cups/model/ 中的 PPD 文件。例如,如果您具有 postscript 打印机,通常您不需要 cups-drivers 包中的 Foomatic PPD 文件或 gutenprint 包中的 Gutenprint PPD 文件。而可以将您的 PostScript 打印机的 PPD 文件直接复制到 /usr/share/cups/model(如果它们尚不存在于 manufacturer-ppds 包中)以实现打印机的最佳配置。

12.6.2.1. cups 包中的 CUPS PPD 文件

为 PostScript 级别 1 和级别 2 打印机调整的 Foomatic PPD 文件对 cups 包中的通用 PPD 文件进行了补充:

  • /usr/share/cups/model/Postscript-level1.ppd.gz

  • /usr/share/cups/model/Postscript-level2.ppd.gz

12.6.2.2. cups-drivers 包中的 PPD 文件

通常,Foomatic 打印机过滤器 foomatic-rip 与非 PostScript 打印机的 Ghostscript 一起使用。合适的 Foomatic PPD 文件具有项“*NickName: ... Foomatic/Ghostscript driver”和“*cupsFilter: ... foomatic-rip”。这些 PPD 文件位于 cups-drivers 包中。

YaST 通常首选 manufacturer-PPD 文件。但是,如果没有合适的 manufacturer-PPD 文件,将选择带有项 *NickName: ... Foomatic ... (recommended) 的 Foomatic PPD 文件。

12.6.2.3. gutenprint 包中的 Gutenprint PPD 文件

Gutenprint(以前称为 GIMP-Print)中的 CUPS 过滤器 rastertogutenprint(而不是 foomatic-rip)可用于许多非 PostScript 打印机。gutenprint 包中提供了该过滤器和适合的 Gutenprint PPD 文件。Gutenprint PPD 文件位于 /usr/share/cups/model/gutenprint/ 中并具有项 *NickName: ... CUPS+Gutenprint*cupsFilter: ... rastertogutenprint

12.6.2.4. manufacturer-PPDs 包中来自打印机制造商的 PPD 文件

manufacturer-PPDs 包中包含来自打印机制造商的 PPD 文件,这些文件是在充分自由的许可证下发布的。应该用打印机制造商的合适 PPD 文件配置 postscript 打印机,因为此文件支持使用 PostScript 打印机的所有功能。YaST 倾向于使用 manufacturer-PPDs 中的 PPD 文件。如果型号名称不匹配,则 YaST 不能使用 manufacturer-PPDs 包中的 PPD 文件。如果 manufacturer-PPDs 包对于相似型号(如 Funprinter 12xx 系列)仅包含一个 PPD 文件,则可能发生这种情况。在这种情况下,请手动在 YaST 中选择相应的 PPD 文件。

12.7. 查错

下面几节介绍一些最常遇到的打印机硬件和软件问题以及解决或避免这些问题的方法。讨论的主题有 GDI 打印机、PPD 文件和端口配置。另外还讨论常见网络打印机问题、打印件问题以及队列处理。

12.7.1. 打印机没有标准打印机语言支持

这些打印机不支持任何常见的打印机语言,只能使用专门的专有控制系列来进行寻址。因此这些打印机只能用于制造商提供了驱动程序的操作系统版本。GDI 是 Microsoft* 为图形设备开发的编程接口。通常制造商只提供 Windows 的驱动程序,而因为 Windows 驱动程序使用 GDI 界面,所以这些打印机也称作 GDI 打印机。实际问题不是编程接口,而是这些打印机只能通过相应打印机型号的专用打印机语言进行处理。

某些 GDI 打印机可切换成以 GDI 方式或一种标准打印机语言进行操作。请参见打印机手册以了解这是否可行。有些型号需要有专门的 Windows 软件来进行切换(注:Windows 打印机驱动程序在通过 Windows 进行打印时可能总是将打印机切换回 GDI 模式)。对于其他 GDI 打印机,还有针对标准打印机语言的扩展模块。

某些制造商为他们的打印机提供专有驱动程序。专有打印机驱动程序的缺点在于不能保证这些驱动程序可用于已安装的打印系统,也不能保证它们适合各种硬件平台。相反,支持标准打印机语言的打印机不依赖于特殊的打印系统版本或特殊的硬件平台。

与其花时间尝试使专有 Linux 驱动程序运行,购买支持标准打印机语言(最好是 PostScript)的打印机可能更经济高效。这可以一次性全部解决驱动程序问题,从而无需安装并配置特殊驱动程序软件,也无需获取由于打印系统中开发的新功能而必须安装的驱动程序更新。

12.7.2. 没有合适的 PPD 文件可用于 PostScript 打印机

如果 manufacturer-PPDs 包不包含适用于 PostScript 打印机的 PPD 文件,则可以使用打印机制造商提供的驱动程序 CD 上的 PPD 文件或从打印机制造商网页下载合适的 PPD 文件。

如果以 zip 存档 (.zip) 或自解压缩 zip 存档 (.exe) 的形式提供 PPD 文件,则用 unzip 命令将其解包。首先,查看 PPD 文件的许可证协议条款。然后使用 cupstestppd 实用程序来确认 PPD 文件是否与 Adobe PostScript 打印机描述文件格式规范 V4.3 相符合,如果实用程序返回 FAIL,则描述 PPD 文件中的错误很严重,可能导致重大问题。应该解决 cupstestppd 报告的问题点。如果需要,询问打印机制造商是否提供合适的 PPD 文件。

12.7.3. 并行端口

最安全的方法是将打印机直接连接到第一个并行端口并在 BIOS 中选择以下并行端口设置:

  • I/0 地址:378(十六进制)

  • 中断:无关

  • 模式:NormalSPPOutput Only

  • DMA:禁用

如果即便进行了这些设置仍无法对并行端口上的打印机进行寻址,则按照 BIOS 中的设置在 /etc/modprobe.conf 中以 0x378 形式显式输入 I/O 地址。如果有两个并行端口,分别被设置为 I/O 地址 378278(十六进制),则以 0x378,0x278 形式输入这两个端口。

如果中断 7 可用,则可以用例 12.1 “/etc/modprobe.conf:第一个并行端口的中断方式” 中显示的项将其激活。在激活中断方式之前,检查文件 /proc/interrupts 看看哪些中断仍在使用中。只显示当前正在使用的中断。根据哪些硬件部件处于活动状态,这可能会有所变化。用于并行端口的中断一定不能被任何其他设备使用。如果您不确定,则使用巡回检测方式,设置 irq=none

例 12.1. /etc/modprobe.conf:第一个并行端口的中断方式

alias parport_lowlevel parport_pc
options parport_pc io=0x378 irq=7

12.7.4. 网络打印机连接

确定网络问题

将打印机直接连接到计算机。出于测试目的,将该打印机配置为本地打印机。如果打印机可以工作,则问题与网络有关。

检查 TCP/IP 网络

TCP/IP 网络和名称解析必须可以正常工作。

检查远程 lpd

使用以下命令测试是否可以与 host 上的 lpd(端口 515)建立 TCP 连接:

netcat -z host 515 && echo ok || echo failed

如果不能建立与 lpd 的连接,则 lpd 可能不处于活动状态或可能存在基本网络问题。

root 用户身份使用以下命令查询远程 hostqueue 的状态报告(可能非常长),前提是相应的 lpd 处于活动状态并且主机接受查询:

echo -e "\004queue" \
| netcat -w 2 -p 722 host 515

如果 lpd 不响应,则它可能不处于活动状态或可能存在基本网络问题。如果 lpd 响应,响应应该描述为什么在主机队列 上不能进行打印。如果您接收到类似例 12.2 “来自 lpd 的错误消息” 中的响应,则问题是由远程 lpd 引起的。

例 12.2. 来自 lpd 的错误消息

lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled

检查远程 cupsd

CUPS 网络服务器可以在 UDP 端口 631 上广播其队列,默认每 30 秒广播一次。因此,以下命令可用于测试网络中是否存在广播 CUPS 网络服务器。执行此命令之前,务必停止本地 CUPS 守护程序。

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

如果广播 CUPS 网络服务器存在,则输出如例 12.3 “来自 CUPS 网络服务器的广播” 所示。

例 12.3. 来自 CUPS 网络服务器的广播

ipp://192.168.2.202:631/printers/queue

以下命令可用于测试是否可以与 host 上的 cupsd(端口 631)建立 TCP 连接:

netcat -z host 631 && echo ok || echo failed

如果不能建立与 cupsd 的连接,则 cupsd 可能不处于活动状态或可能存在基本网络问题。如果 cupsd 处于活动状态并且主机接受查询,lpstat -h host -l -t 会返回 host 上所有队列的状态报告(可能非常长)。

下一个命令用于测试 host 上的 queue 是否接受由单个回车字符组成的打印任务。不应打印任何内容。可能会弹出一页空白纸。

echo -en "\r" \
| lp -d queue -h host
对网络打印机或打印服务器计算机进行查错

当在打印服务器计算机中运行的假脱机程序要处理大量打印任务时,有时会导致出现问题。由于这是打印服务器计算机中的假脱机程序导致的,目前尚无解决此问题的方法。作为变通方法,可以直接通过 TCP 套接字对连接到打印服务器计算机的打印机进行寻址来绕过打印服务器计算机中的假脱机程序。请参见第 12.4 节 “网络打印机”

这样,打印服务器计算机仅用作数据传送(TCP/IP 网络和本地打印机连接)各种不同形式之间的转换器。要使用此方法,您需要知道打印服务器计算机上的 TCP 端口。如果打印机连接在打印服务器计算机上并且打开了电源,则通常可以在打开打印服务器计算机的电源后使用 nmap 包中的 nmap 实用程序确定此 TCP 端口。例如,nmap IP-address 可能会在打印服务器打印机中产生以下输出:

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

此输出指出可以在端口 9100 上通过 TCP 套接字对连接到打印服务器计算机的打印机进行寻址。默认情况下,nmap 只检查在 /usr/share/nmap/nmap-services 中列出的一些常见的端口。要检查所有可能的端口,请使用命令 nmap -p from_port-to_portIP-address。这可能要花一些时间。有关详细信息,请参见 nmap 的手册页。

输入如下命令

echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 IP-address port

将字符串或文件直接发送到相应的端口以测试是否可以在该端口上对打印机进行寻址。

12.7.5. 打印件有问题但没有错误消息

对于打印系统,打印任务完成的标志是 CUPS 后端完成到接收方(打印机)的数据传送。如果在接收方的进一步处理失败(例如,如果打印机无法打印特定于打印机的数据),则打印系统不会对此进行通知。如果打印机无法打印特定于打印机的数据,请选择另一个更适合该打印机的 PPD 文件。

12.7.6. 禁用的队列

如果向接收方传送数据在多次尝试后都失败,则 CUPS 后端(例如 USBsocket)向打印系统(向 cupsd)报告一个错误。后端用于确定在将数据传送报告为不可行前应执行的失败尝试次数。由于继续尝试可能也是徒劳,cupsd 将禁用相应队列的打印。在消除了问题的起因后,系统管理员必须使用 cupsenable 命令重启用打印。

12.7.7. CUPS 浏览:删除打印任务

如果 CUPS 网络服务器通过浏览向客户端主机广播其队列并且客户端主机上合适的本地 cupsd 处于活动状态,则客户端 cupsd 接受来自应用程序的打印任务并将它们转发到服务器上的 cupsd。当服务器上的 cupsd 接受打印任务后,会为该任务指派一个新的任务号。因此,客户端主机上的任务号与服务器上的任务号不同。因为通常都将打印任务立即转发,所以不能用客户端主机上的任务号将其删除,原因是一旦将打印任务转发到服务器 cupsd,客户端 cupsd 就会将打印任务视为已完成。

要删除服务器上的打印任务,请使用命令(例如 lpstat -h cups.example.com -o)确定服务器上的任务号,前提是此服务器尚未完成该打印任务(即尚未完全将其发送到打印机)。使用此任务号,可以删除服务器上的打印任务:

cancel -h cups.example.com queue-jobnumber

12.7.8. 有问题的打印任务和数据传送错误

如果在打印过程中关闭打印机或计算机,则打印任务将保留在队列中。再次打开计算机(或打印机)后,打印将继续。必须使用 cancel 从队列中删除有问题的打印任务。

如果打印任务有问题或主机和打印机之间的通讯出现错误,则打印机会打印出很多张带有乱码的纸张,这是因为它不能正确处理数据。要调整此情况,请执行以下步骤:

  1. 要停止打印,请将所有纸张从喷墨打印机中取出或打开激光打印机的纸盒。高质量的打印机具有一个用于取消当前打印件的按钮。

  2. 打印任务可能仍在队列中,因为只有在将任务完全发送到打印机后才会将它们删除。使用 lpstat -olpstat -h cups.example.com -o 可以检查哪个队列当前正在打印。使用 cancel queue-jobnumber cancel -h cups.example.com queue-jobnumber 可以删除打印任务。

  3. 即使已将打印任务从队列中删除,某些数据仍会被传送到打印机。检查 CUPS 后端进程是否仍在为相应的队列运行并将其终止。例如,对于连接到并行端口的打印机,可以使用命令 fuser -k /dev/lp0 终止仍在访问打印机(更准确地说是并行端口)的所有进程。

  4. 通过关闭打印机一段时间完全重设置打印机。然后插入纸张并打开打印机。

12.7.9. 对 CUPS 打印系统进行调试

使用以下通用过程确定 CUPS 打印系统中的问题:

  1. /etc/cups/cupsd.conf 中设置 LogLevel debug

  2. 停止 cupsd

  3. 删除 /var/log/cups/error_log* 从而无需搜索非常长的日志文件。

  4. 启动 cupsd

  5. 重复导致问题的操作。

  6. 检查 /var/log/cups/error_log* 中的消息以确定问题的原因。

12.7.10. 更多信息

Novell 知识库 (http://support.novell.com/) 中提供了对许多特定问题的解决方案。通过对 CUPS 的文本搜索找到相关文章。