打印系统全解析:从桌面环境到 System V
1. 桌面环境打印
1.1 CUPS 原生 GUI 管理优势
在进行打印系统管理时,推荐使用 CUPS 原生 GUI 进行管理,而非 KDE 等设计的附加组件。原生 GUI 具有权威性,且使用体验良好。同时,考虑到可移植性,若使用多种不同的管理 GUI,会增加管理的复杂性。例如,CEO 使用全新 Macintosh 打印时,可能不清楚苹果设计的最新 GUI 配置小部件的操作位置,但通过访问
localhost:631
,就能进入熟悉的管理界面。
1.2 KDEPrint 框架介绍
若所有用户都使用特定的桌面环境,可考虑使用该桌面的 GUI 来支持打印。以 KDEPrint 为例,它是 KDE 下的打印框架,提供了添加打印机、管理打印作业、重启打印服务器等工具,具有 KDE 的外观和感觉,为 KDE 用户提供了一致性。
KDEPrint 并不依赖于 CUPS,它可以处理 CUPS 的所有功能,也能配置为与从 LPRng 到通用外部程序等各种打印系统一起工作。不过,CUPS 比其他打印系统功能更强大,若切换到其他打印系统,KDEPrint 的部分功能可能会消失。
1.3 KDEPrint 主要组件
KDEPrint 主要由以下组件构成:
-
kprinter
:一个用于提交打印作业的 GUI 工具,也可在命令行中无 GUI 模式下使用。例如,命令
$ kprinter --nodialog -5 -P lj4600 riley.ps gillian.pdf zoe.prn
等同于
$ lpr -5 -P lj4600 riley.ps gillian.pdf zoe.prn
。用户可将文件从文件管理器或桌面拖入 kprinter 对话框进行批量打印,还可在浏览器的打印对话框中用 kprinter 替代 lpr 以获得 GUI 打印对话框。此外,勾选“打印后保持对话框打开”选项,可避免每次打印时的重启延迟。kprinter 还提供了打印为 PDF 和传真打印功能,即使网络中没有实际打印机也可使用。
-
添加打印机向导
:可自动检测网络打印机(JetDirect、IPP 和 SMB)和一些本地连接的打印机,也可添加和配置无法自动检测的打印机。
-
打印作业查看器
:用于移动和取消打印作业,并显示打印作业状态信息。
-
KDEPrint 手册
:记录了系统的相关信息,可通过 KDE 帮助中心访问,但较难找到。更简便的方法是调用 kprinter 并点击“帮助”,或使用 KDE 浏览器 Konqueror 访问
konqueror help:/kdeprint
,也可在
printing.kde.org
上找到相关文档。
-
打印管理器
:是打印系统的主要 GUI 管理工具,位置因发行版而异。可在主桌面菜单中查找,也可运行
kcmshell printmgr
或
konqueror print:/manager
打开。
添加打印机向导和打印作业管理器可通过 kprinter 或 KDE 打印管理器访问,也可通过 Konqueror 中的
print:/manager
和
print:/printers
URL 访问。KDEPrint 的用户信息存储在
~/.kde
下,文件可读,但建议通过打印管理器进行修改。
1.4 Konqueror 与打印
许多浏览器识别特殊用途的 URI 作为特定功能的入口,Konqueror 的
print:
系列 URI 是访问 KDEPrint 的秘密通道。
print:/
URL 展示了所有可能性,
print:/jobs
用于监控打印作业,
print:/manager
可在 Konqueror 中启动打印管理器。由于 CUPS 是一个 Web 服务器,浏览器与 Web 服务器通信相对容易,因此可对浏览器进行调整以添加 CUPS 特定的打印功能。
1.5 CUPS 命令行工具及其他系统命令
| 系统 | 命令 | 功能 |
|---|---|---|
| CUPS | cups-config | 打印 API、编译器、目录和链接信息 |
| cupsdconf | 通过 KDE 界面配置 CUPS | |
| cupsdisable | 停止打印机或类的打印 | |
| cupsenable | 重启打印机或类的打印 | |
| lpinfo | 显示可用设备或驱动程序 | |
| lpoptions | 显示或设置打印机选项和默认值 | |
| lppasswd | 添加、更改或删除摘要密码 | |
| System V | accept, reject | 接受或拒绝队列提交 |
| cancel | 取消打印作业 | |
| lp | 排队打印作业 | |
| lpadmin | 配置打印机和类 | |
| lpmove | 将现有打印作业移动到新目标 | |
| lpstat | 打印状态信息 | |
| BSD | lpc | 作为通用打印机控制程序 |
| lpq | 显示打印队列 | |
| lpr | 排队打印作业 | |
| lprm | 取消打印作业 |
2. System V 打印系统
2.1 概述
System V 的打印软件是最古老、最原始的打印系统,最初设计时未考虑网络打印。Solaris 和 HP - UX 等系统使用该软件,并进行了大量修改。用户打印时需使用
lp
命令或间接调用
lp
的命令,
lp
将数据放入与目标关联的假脱机目录,
lpsched
守护进程确定数据的打印时间和位置,然后执行接口程序对数据进行格式化并发送到正确的打印机。
2.2 目的地和类
每个打印“目的地”名称由最多 14 个字母数字字符和下划线组成,通常是打印机,但也可以是文件。每个目的地可属于零个或多个类,类是一组具有相同用途的目的地。例如,同一房间的两台打印机或具有相似功能(如颜色、分辨率、双面打印或速度)的打印机可组合成一个类,
lpsched
会将提交到该类的输出发送到最先可用的打印机。
2.3 System V 打印命令
| 命令 | 位置 | 功能 |
|---|---|---|
| 通用 | accept | /usr/sbin,开启队列对作业的接受 |
| cancel | /bin,从队列中移除打印作业 | |
| disable | /bin,禁用队列中作业的打印 | |
| enable | /bin,启用队列中作业的打印 | |
| lp | /bin,排队打印作业 | |
| lpadmin | /usr/sbin,配置打印系统 | |
| lpmove | /usr/sbin,在队列之间移动作业 | |
| lpsched | /usr/lib,调度和打印作业 | |
| lpshut | /usr/sbin,停止打印服务 | |
| lpstat | /bin,报告打印服务的状态 | |
| reject | /usr/sbin,停止队列对作业的接受 | |
| Solaris | lpfilter | /usr/sbin,控制打印过滤器 |
| lpforms | /usr/sbin,控制预印表单的使用 | |
| lpget | /bin,读取配置设置 | |
| lpset | /bin,修改配置设置 | |
| lpusers | /usr/sbin,控制队列优先级 | |
| HP - UX | lpalt | /bin,修改队列中的作业 |
| lpana | /usr/sbin,分析性能日志 | |
| lpfence | /usr/sbin,设置打印机的最小作业优先级 | |
| lpr | /bin,支持 BSD 打印 |
2.4 lp 命令说明
lp
是用户级命令,用于将数据排队打印。它将提交的数据(可来自命名文件或标准输入)复制到假脱机目录中的文件。在 HP - UX 中,目的地的假脱机目录为
/var/spool/lp/request/dest
;在 Solaris 中为
/var/spool/lp/requests/dest
。假脱机文件名为
xxxn
,其中
n
是
lp
分配的作业标识号。
lp -d
可将输入排队到特定目的地(打印机或类),若未使用
-d
选项,
lp
使用
LPDEST
环境变量的值作为输出目的地。若该环境变量未设置,
lp
将数据排队到默认目的地,系统管理员可使用
lpadmin -d
设置默认目的地。在 Solaris 中,若未使用
lpadmin -d
指定默认设备,
lp
会搜索
~/.printers
文件、
/etc/printers.conf
文件,最后搜索联合命名服务以查找默认目的地。
2.5 lpsched 和 lpshut:启动和停止打印
lpsched
守护进程将
lp
放入假脱机目录的文件发送到可用设备,并记录处理的每个文件和发生的错误。在 Solaris 中,默认日志文件为
/var/lp/logs/lpsched
;在 HP - UX 中,日志文件位于
/var/adm/lp/log
,
lpsched
启动时会将旧日志移到
oldlog
并开始新日志。
若要停止
lpsched
,可作为 root 或
lp
用户运行
lpshut
。
lpsched
不运行时,不会实际打印作业,但
lp
仍可将作业排队。停止守护进程时正在打印的作业,在守护进程重启后将重新打印。
lpsched
创建
/var/spool/lp/SCHEDLOCK
文件表示正在运行,若通过其他方式停止
lpsched
,在重启前需手动删除该文件。
2.6 lpadmin:配置打印环境
lpadmin
用于告诉打印系统打印机的配置信息,包括命名打印机、创建类和指定默认打印机。它实际上是创建和修改
/var/spool/lp
目录中的文本文件,但这些配置文件格式敏感,容易损坏,不建议手动修改。
Solaris 的
lpadmin
尝试使用类似 BSD 的打印机描述文件来简化系统配置,但实际上将配置信息分散到
/etc/printers.conf
和
/etc/lp
两个位置。Solaris 在大多数管理命令执行时需要
lpsched
运行,而 HP - UX 的大多数
lpadmin
命令在
lpsched
运行时无法工作,需先使用
lpshut
停止
lpsched
。
添加新打印机的命令如下:
$ sudo lpadmin -pprinter -vdevice { -eprinter | -mmodel | -iinterface } [ -cclass - ] [ -l | -h ]
其中,
printer
是新打印机的名称,
device
是与打印机关联的设备文件。
-e
、
-m
或
-i
选项用于指定打印机接口程序:
-
-eprinter
:
printer
是现有打印机的名称,适用于添加与现有打印机完全相同的打印机,
lpadmin
会复制接口程序。
-
-mmodel
:
model
是系统具有标准接口程序的设备类型,可通过查看
/var/spool/lp/model
确定系统支持的型号,
lpadmin
会复制
/var/spool/lp/model/model
文件供新目的地使用。
-
-iinterface
:
interface
是用作接口脚本的程序的完整路径名,大多数
lpadmin
版本会复制接口程序,若要修改程序,需修改特定于目的地的副本。
HP - UX 允许指定返回状态信息和取消打印机作业的程序。
lpadmin
还接受以下附加选项:
| 选项 | 功能 |
| — | — |
| -pprinter | 指定其他选项应用的打印机 |
| -ddest | 将 dest 设置为系统的默认打印目的地 |
| -xdest | 从打印系统中移除 dest |
| -cclass | 将打印机添加到 class |
| -rclass | 将打印机从 class 中移除 |
| -edest | 复制另一个打印机的接口程序 |
| -iinterface | 将 interface 作为打印机的接口程序 |
| -mmodel | 使打印机使用 model 的接口程序 |
| -h | 表示打印机是硬连线的 |
| -vfile | 指定打印机设备文件的完整路径 |
| -D”desc” | 将打印机描述字符串设置为 desc |
| -L”location” | 设置打印机位置的文本描述 |
2.7 lpadmin 示例
-
$ sudo lpadmin -phowler - lw -v/dev/tty06 -mPostScript -cpr:告知打印系统名为howler - lw的打印机连接到/dev/tty06,属于pr类,并使用 PostScript 打印机的接口程序,同时会创建假脱机目录。 -
$ sudo lpadmin -dpr:将系统的默认目的地设置为pr类(或打印机)。 -
$ sudo lpadmin -phowler - lw -L"Conference room":设置howler - lw的描述字符串。 -
$ sudo lpadmin -phowler - lw -rpr -cfast:将howler - lw从pr类中移除并添加到fast类。 -
$ sudo lpadmin -xhowler - lw:完全移除howler - lw。
2.8 lpstat:获取状态信息
lpstat
用于显示打印系统的状态。若不带任何参数执行,它会显示执行该命令的用户的所有作业状态;使用
-p
标志可显示特定打印机的状态。例如,
$ lpstat -phowler - lw
可显示
howler - lw
打印机的状态。使用
-r
标志可确定
lpsched
守护进程的状态。
2.9 cancel:移除打印作业
cancel
用于从队列中移除排队或正在打印的作业,可使用作业编号(通过
lpstat
确定)或打印机名称调用。若指定打印机,当前正在打印的作业将被取消。
cancel
命令通常由伪用户
lp
拥有,组为
bin
,模式为
6775
,以便任何人都可取消明显无效的作业。若非作业发送者取消作业,会向作业所有者发送邮件。若用户滥用此权限,可设置命令的模式使其不运行 setuid。
2.10 accept 和 reject:控制假脱机
若打印机长时间不可用(如硬件故障),可使用
reject
命令禁用对该设备的假脱机,以防止不知情的用户填满队列。例如,
$ sudo reject -r"howler - lw will be down until Tuesday" howler - lw
可使
lp
拒绝
howler - lw
的请求。
-r
标志可选,用于告知用户打印机拒绝请求的原因。当有人尝试打印文件时,
lp
会显示该消息。
accept printer
命令可使
lp
开始接受打印机的请求。新添加的打印机默认配置为拒绝请求,因此使用
lpadmin
添加新打印机后,必须运行一次
accept
命令。也可使用类名代替打印机名,以启用或禁用整个类的假脱机。
2.11 enable 和 disable:控制打印
disable
命令可使
lpsched
停止向特定打印机发送作业,但不阻止
lp
对该打印机的作业排队。排队的作业在使用
enable
重新启用打印机之前不会输出。
disable
通常不会中止当前正在打印的作业,但
-c
选项可请求此行为。
disable
支持
-r
标志,可解释打印机禁用的原因。例如,
$ sudo disable -r"Being cleaned, back in 5 minutes" howler - lw
可禁用
howler - lw
的打印,使用
$ sudo enable howler - lw
可重启打印。
2.12 lpmove:转移作业
有时需要将排队到一个打印机或类的作业移动到另一个打印机,可使用
lpmove
命令。例如,
$ sudo lpmove howler - lw - 324 howler - lw - 325 anchor - lj
可将编号为
324
和
325
的作业从
howler - lw
的队列移动到
anchor - lj
的队列。也可将打印机或类作为源,如
$ sudo lpmove howler - lw anchor - lj
会将
howler - lw
队列中的所有作业移动到
anchor - lj
的队列,同时会对源打印机执行
reject
操作。HP - UX 版本的
lpmove
在
lpsched
运行时无法使用,需先运行
lpshut
。
2.13 接口程序
接口程序从
lpsched
指定的文件中获取信息,对其进行格式化,并将格式化后的数据发送到标准输出。它还负责设置输出设备的正确模式,并在需要时生成页眉和页脚。接口程序通常是 shell 脚本,也可以是可执行二进制文件。
lpsched
调用接口程序时使用以下参数:
jobid user title copies options file …
,其中
jobid
是
lp
分配的作业标识号,
user
是作业所属的用户,
title
是用户提供的可选标题,
copies
是打印份数,
options
是用户提供的选项,
files
是要打印的文件的完整路径名。接口程序的标准输入来自
/dev/null
,标准输出和标准错误都定向到
lpadmin -v
指定的目标设备。
与 CUPS 或 BSD 打印系统不同,System V 要求接口程序处理打印机可以接受的所有类型的数据,并在收到无法识别的输入时优雅地失败。因此,接口程序通常是处理参数并调用其他程序进行实际格式化工作的 shell 脚本。
接口程序成功完成时应返回 0,遇到错误时应返回 1 到 127 之间的整数。若作业失败,接口脚本应尝试重新打印;若发生严重错误,接口程序应禁用打印机。若打印出现不稳定问题,可能是接口脚本的原因。
2.14 打印系统故障处理
有时,配置和取消配置打印机的尝试会使系统混乱。保存打印机信息的配置文件复杂且敏感,一个错误字符可能使打印机无法使用。
2.15 打印系统故障排查流程
当打印系统出现故障时,可以按照以下流程进行排查:
graph TD
A[打印异常] --> B{打印机是否通电且就绪}
B -- 是 --> C{能否通过 lpstat 查看打印机状态}
B -- 否 --> D[检查电源和连接]
C -- 是 --> E{lp 命令能否正常排队作业}
C -- 否 --> F[检查 lpsched 守护进程状态]
F --> G{lpsched 是否运行}
G -- 是 --> H[检查 SCHEDLOCK 文件是否异常]
G -- 否 --> I[尝试启动 lpsched 或使用 lpshut 处理]
E -- 是 --> J{作业是否能正常打印}
E -- 否 --> K[检查 lp 命令参数和环境变量]
J -- 是 --> L[问题解决]
J -- 否 --> M[检查接口程序是否正常]
M --> N{接口程序返回码是否正常}
N -- 是 --> O[检查打印机硬件和驱动]
N -- 否 --> P[检查接口程序代码和配置]
2.16 常见故障及解决方法
| 故障现象 | 可能原因 | 解决方法 |
|---|---|---|
| 打印机无响应 | 打印机未通电、连接问题、lpsched 未运行 | 检查电源和连接,使用 lpstat -r 检查 lpsched 状态,若未运行使用 lpshut 处理后重启 |
| lp 命令无法排队作业 | LPDEST 环境变量未设置、打印机未配置、权限问题 | 使用 lpadmin -d 设置默认目的地,检查打印机配置文件,确保有足够权限 |
| 作业排队但不打印 | lpsched 故障、接口程序错误、打印机硬件故障 | 检查 lpsched 日志文件,查看接口程序返回码,检查打印机硬件和驱动 |
| 打印机拒绝请求 | 打印机被 reject、配置文件错误 | 使用 accept 命令启用打印机,检查配置文件是否损坏 |
2.17 打印系统性能优化
为了提高打印系统的性能,可以采取以下措施:
-
合理配置打印机类
:将功能相似的打印机组合成类,如将速度快的打印机组成一个类,将彩色打印机组成一个类。这样可以根据作业的需求选择合适的打印机,提高打印效率。例如,对于紧急的黑白文档,可以选择速度快的打印机类;对于彩色图片,可以选择彩色打印机类。
-
优化接口程序
:接口程序的性能直接影响打印速度。可以对接口程序进行优化,减少不必要的处理步骤,提高格式化和传输数据的效率。例如,使用更高效的脚本语言编写接口程序,或者对现有的接口程序进行代码优化。
-
定期清理假脱机目录
:假脱机目录中存储了大量的打印作业文件,随着时间的推移,这些文件会占用大量的磁盘空间,影响系统性能。定期清理假脱机目录中的过期文件,可以释放磁盘空间,提高系统的响应速度。可以使用脚本定期执行清理操作,例如:
#!/bin/bash
# 清理 HP-UX 假脱机目录
find /var/spool/lp/request -type f -mtime +7 -delete
# 清理 Solaris 假脱机目录
find /var/spool/lp/requests -type f -mtime +7 -delete
2.18 打印系统安全管理
打印系统的安全管理也是非常重要的,以下是一些安全管理的建议:
-
权限管理
:确保只有授权用户可以访问和管理打印系统。对打印命令和配置文件设置合适的权限,例如,将 lpadmin 命令的权限设置为只有管理员可以使用。
-
密码保护
:对于需要认证的打印机,设置强密码,防止未经授权的访问。可以使用 lppasswd 命令添加、更改或删除摘要密码。
-
监控日志
:定期查看打印系统的日志文件,如 lpsched 的日志文件,及时发现异常行为。例如,查看是否有异常的打印作业提交,是否有用户滥用 cancel 命令等。
2.19 不同打印系统对比
| 打印系统 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| CUPS | 功能强大,支持多种打印机和协议,可移植性好 | 配置相对复杂 | 多平台环境,需要支持多种打印机的场景 |
| KDEPrint | 与 KDE 桌面环境集成度高,用户体验好 | 依赖于桌面环境,部分功能可能受限于其他打印系统 | KDE 桌面用户为主的环境 |
| System V | 历史悠久,稳定性好 | 设计较原始,缺乏网络打印支持 | 对稳定性要求高,对网络打印需求较低的传统系统 |
2.20 未来打印系统发展趋势
随着技术的不断发展,打印系统也在不断演进。未来的打印系统可能会朝着以下方向发展:
-
云打印
:用户可以通过互联网将打印作业发送到云端,然后由云端服务器将作业分配到合适的打印机进行打印。这样可以实现远程打印,提高打印的灵活性和便捷性。
-
移动打印
:支持通过移动设备(如手机、平板电脑)直接进行打印。用户可以随时随地将移动设备中的文件打印出来,满足移动办公的需求。
-
智能化打印
:打印系统将具备更多的智能功能,如自动识别文件类型并选择合适的打印设置,自动优化打印质量等。
-
环保打印
:更加注重环保,例如采用节能技术、减少纸张浪费等。打印系统可以提供双面打印、草稿模式等功能,降低对环境的影响。
总之,了解不同的打印系统及其特点,掌握打印系统的配置和管理方法,对于提高工作效率和保障打印服务的稳定性具有重要意义。同时,关注打印系统的发展趋势,可以为未来的工作和生活做好准备。
超级会员免费看
3615

被折叠的 条评论
为什么被折叠?



