91、打印系统全解析:从桌面环境到 System V

打印系统全解析:从桌面环境到 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 未来打印系统发展趋势

随着技术的不断发展,打印系统也在不断演进。未来的打印系统可能会朝着以下方向发展:
- 云打印 :用户可以通过互联网将打印作业发送到云端,然后由云端服务器将作业分配到合适的打印机进行打印。这样可以实现远程打印,提高打印的灵活性和便捷性。
- 移动打印 :支持通过移动设备(如手机、平板电脑)直接进行打印。用户可以随时随地将移动设备中的文件打印出来,满足移动办公的需求。
- 智能化打印 :打印系统将具备更多的智能功能,如自动识别文件类型并选择合适的打印设置,自动优化打印质量等。
- 环保打印 :更加注重环保,例如采用节能技术、减少纸张浪费等。打印系统可以提供双面打印、草稿模式等功能,降低对环境的影响。

总之,了解不同的打印系统及其特点,掌握打印系统的配置和管理方法,对于提高工作效率和保障打印服务的稳定性具有重要意义。同时,关注打印系统的发展趋势,可以为未来的工作和生活做好准备。

C语言-光伏MPPT算法:电导增量法扰动观察法+自动局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​ 内容概要:本文围绕动态环境下多无人机系统的协同路径规划与防撞问题展开研究,提出基于Matlab的仿真代码实现方案。研究重点在于在复杂、动态环境中实现多无人机之间的高效协同飞行与避障,涵盖路径规划算法的设计与优化,确保无人机集群在执行任务过程中能够实时规避静态障碍物与动态冲突,保障飞行安性与任务效率。文中结合智能优化算法,构建合理的成本目标函数(如路径长度、飞行高度、威胁规避、转弯角度等),并通过Matlab平台进行算法验证与仿真分析,展示多机协同的可行性与有效性。; 适合人群:具备一定Matlab编程基础,从事无人机控制、路径规划、智能优化算法研究的科研人员及研究生。; 使用场景及目标:①应用于灾害救援、军事侦察、区域巡检等多无人机协同任务场景;②目标是掌握多无人机系统在动态环境下的路径规划与防撞机制,提升协同作业能力与自主决策水平;③通过Matlab仿真深入理解协同算法的实现逻辑与参数调优方法。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注目标函数设计、避障策略实现与多机协同逻辑,配合仿真结果分析算法性能,进一步可尝试引入新型智能算法进行优化改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值