系统管理指南:打印

IPP 侦听服务概述

IPP 侦听服务(也称为侦听程序)提供了一种 IPP 网络协议服务,该服务为打印客户机系统提供一种与运行侦听程序的系统上的打印服务进行交互的方法。此侦听程序实现了服务器端 IPP 支持,其中包括一组标准操作和属性。此侦听程序是在 Oracle Solaris 中作为 Apache 模块和一系列共享库(包含 IPP 操作和网络支持)实现的。在系统上安装 Oracle Solaris OS 时,将会安装 IPP 软件栈。IPP 侦听服务是一个 SMF 服务,它依赖于要运行的打印服务。因此,在添加第一个打印队列后,会在打印服务器上自动启用 IPP。同时,在删除最后一个打印队列后,也会禁用该服务。

在前端,IPP 服务器支持被放在 HTTP 版本 1.1 的上面一层。服务器通过 HTTP POST 请求接收 IPP 操作。然后,服务器执行所请求的操作,并通过 HTTP 将响应发回到客户机。这些操作包括但不限于提交和取消打印作业,以及查询打印机和已排入打印机队列的某个或全部打印作业的属性。在后端,IPP 侦听程序通过与打印假脱机程序进行通信来执行操作。在 Oracle Solaris OS 中,此假脱机程序当前是 lpsched 守护进程。

IPP 侦听服务的工作原理

IPP 侦听服务实现(服务器端支持)嵌入在 Apache Web 服务器下方。Web 服务器通过 HTTP POST 请求接收 IPP 操作。接收到 HTTP POST 请求后,会将其传递到 Apache IPP 模块 (mod_ipp.so)。根据配置情况,Apache Web 服务还可以提供一种验证服务,并用于在打印客户机与服务器之间进行加密。侦听服务作为其自己的专用 Apache 实例来运行。

此过程如下所示:

  1. 将 IPP 请求从客户机发送到服务器。

  2. Apache Web 服务器接受此连接。

  3. Apache Web 服务器随后将连接传递到 mod_ipp

  4. mod_ipp 将连接和配置数据传递到 libipp-listener

  5. libipp-listener 使用 lipipp-core 读取请求。

  6. libipp-listener 将请求分发到位于 lipipp-listener 中的操作处理程序。

  7. 操作处理程序将请求转换为 PAPI 调用,然后进行该调用。

  8. 通过使用 psm-lpsched,将 PAPI 调用转换为特定于打印服务的请求。

  9. 打印服务响应该请求。

  10. psm-lpsched 命令将响应转换为 PAPI 结果。

  11. libpapi 操作返回到 libipp-listener 操作处理程序。

  12. libipp-listener 操作处理程序将结果传递给分发程序。

  13. libipp-listener 分发程序使用 libipp-core 库将结果写入到客户机。

  14. 分发程序返回 mod_ipp 入口点。