CUPS学习一:CUPS设计介绍。

  最近公司需要做一个基于linux打印服务cups(common unix printer system)来实现打印数据的过滤。在这里就不详细介绍什么是cups了,博客里有一大堆关于cpus的说法和配置。但是之前对linux打印业务流程和基本功能实现没有过了解,其他人也没有接触过这些东西,没办法只能一切从零开始。最开始的时候也时找网上找博客找了很久感觉内容都太过相识,相关的资料太少,慢慢了摸索了两天发现基本上都没有基于cups的开发,基本上都是直接使用cups原始提供的功能,没有基于源码的开发。说了这么多废话那么下面就开始本文的主要内容:cups设计说明的介绍。

介绍:

多数打印系统一样,CUPS是围绕中央打印调度过程设计的,它分派打印作业,处理管理命令,向本地和远程程序提供打印机状态信息,并根据需要通知用户。图1 显示了CUPS的基本组织。

Scheduler:

  调度程序是一个HTTP / 1.1和IPP / 2.1服务器应用程序,用于管理系统上的HTTP和IPP请求,打印机,类,作业,订阅和通知。HTTP用于正常的Web浏览器服务以及通过具有application/ipp内容类型的HTTP POST请求传递的IPP操作消息调度程序使用基于公共网关接口(“CGI”)的一系列帮助应用程序来提供动态Web接口,并且可以配置为为Web接口运行其他站点特定的程序或脚本。

  调度程序设计为传统的单线程服务器进程,运行外部进程来执行长期操作,如打印,通知,设备/驱动程序枚举和远程打印机监视。外部进程通常作为非特权帐户(“lp”)运行,并且在某些平台上还有额外的限制,限制了进程允许执行的操作。

  同时支持的客户端和打印作业的最大数量主要受可用服务器内存,文件描述符和CPU的限制 - 调度程序本身没有强制限制。

Config Files:

  调度程序使用多个配置文件来存储服务器设置(cupsd.conf),可用类(classes.conf),可用打印机(printers.conf),当前通知订阅(subscriptions.conf)以及支持的文件类型和过滤器(MIME .types,mime.convs)。此外,PostScript Printer Description(“PPD”)文件或接口脚本与每台打印机关联,使用PPD文件和当前作业的缓存文件,以优化调度程序的启动速度和可用性。

Job Files:

调度程序将作业文件存储在假脱机目录中,通常是/ var / spool / cups。两种类型的文件将在假脱机目录中找到:控制文件开头的字母“c”(“C00001”,“c99999”,“c100000”等)和数据文件开头的字母“d”(“d00001 -001“,”d99999-001“,”d100000-001“等)控制文件是基于原始IPP Print-Job或Create-Job消息的IPP消息,而数据文件是提交的原始打印文件打印。系统已知的每个作业都有一个控制文件,每个作业有0个或多个数据文件。控制文件通常在第500个作业提交后被清除,数据文件在作业成功打印后立即被删除。这两种行为都可以配置。

Log Files:

  调度程序保存通常存储在 / var / log / cups 目录中的三种日志文件。The access_log文件列出每个HTTP和IPP请求由所述调度程序进行处理。The error_log 包含调度程序的一些信息可以帮助应用程序用于跟踪问题。The page_log文件列出被打印出来每一页,允许简单的打印计数。

Berkeley Command:

  CUPS提供Berkeley Ipc(8),Ipq(1),Ipr(1)和Iprm(1)命令。一般而言,它们的功能与原来的伯克利命令相同,但有以下几点例外:

  1. LPC命令目前仅支持“状态”子命令。
  2. 所述LPR命令不支持的格式修饰符选项“1”(TROFF字体集1), “2”(TROFF字体集2), “3”(TROFF字体集3), “4”(TROFF字体集4), “c”(CIFPLOT),“d”(DVI),“f”(FORTRAN),“g”(GNU标绘),“i”(缩进),“n”(Ditroff) ,“t”(Troff)或“w”(宽度),因为它们不映射到基于IPP MIME媒体类型的文档格式。

System V Commands:

  1. 所有的命令都可能要求输入密码。System V打印假脱机程序需要root权限才能执行管理任务,而CUPS允许更灵活的配置。
  2. 所述的lpadmin命令不实现的Solaris “-A”(警报), “-F”(故障恢复) “-M”(安装形式/车轮), “-P”(纸张列表), “-S”(打印轮子),“-T”(类型列表),“-U”(拨号器信息),“-W”(等待),“-f”(表格名称),“-l”(内容类型列表), “-s”(远程打印机)或“-t”(托盘数量)选项。

CUPS Commands:

  CUPS提供cupsaccept(8) ,cupsaddsmb(8) ,cupsdisable(8) ,cupsenable(8) ,cupsreject(8) ,cupstestppd(1) ,lpinfo(8) ,和(1)lppasswd命令。The cupsaccept, cupsdisable,cupsenable和cupsreject命令为了匹配System V中的accept,disable,enable,和reject命令 已被重新命名,以避免与混乱和冲突 的bash(1) 的内部 使 相同名称的命令。

LPD Suppot:

  LPD客户端支持通过cups-lpd(8) 程序提供。接收到的LPD请求通过本地 inetd(8) launchd(8) xinetd(8) 进程在TCP端口515上被接受,并被转发给 cups-lpd 程序以转换成相应的IPP请求。
  The cups_lpd程序符合,在大多数情况下,以RFC 1179:行式打印机后台程序协议,但不会强制执行该文件中指定的特权源端口限制。另外,当由相应的超级守护程序调用cups-lpd程序时,通常通过命令行选项覆盖标题页面和输出格式选项

Web Interface:

  Web界面由五个CGI程序支持。表1 描述了每个程序的目的。
表1:CGI程序


Notifiers:

  Notifiers(notifer(7)) 提供了从调度程序发送异步事件通知的方法。 通知程序通过命令行上的收件人信息和标准输入中的事件数据执行。 例如:
CUPS_SERVERBIN/notifier/foo recipient user-data
  CUPS包括两个通知程序: mailto 提供基于SMTP的电子邮件通知和 rss 以提供来自调度程序的真正简单联合(“RSS”)通知。其他通知程序可以根据需要安装在 通知程序 目录中以支持其他方法。

Filters:

  过滤器(filter(7))将作业文件转换为可打印的格式。根据需要运行多个过滤器,将作业文件格式转换为可打印的格式。如果提供文件名,过滤器程序将从标准输入或文件读取。所有过滤器必须支持一组常用选项,包括打印机名称,作业ID,用户名,职位名称,副本数量和作业选项。所有输出都发送到标准输出。

  CUPS提供用于打印文本,PostScript,PDF,HP-GL / 2和许多类型图像文件的过滤器。CUPS还为HP-PCL,ESC / P和多种类型的标签打印机提供打印机驱动程序过滤器。可以通过mime.convs和PPD文件向CUPS注册其他过滤器。

Port Monitors:

  端口监视器处理打印机设备和通道特定的数据格式。端口监视器使用与过滤器相同的界面(接口)。
  CUPS包括两个端口监视器: BCP端口监视器 支持PostScript二进制通信协议(“BCP”)和 TBCP端口监视器 支持PostScript标记的二进制通信协议(“TBCP”)。其他端口监视器可以在PPD文件中注册。

Backends:

  后端(backend(7))将打印数据发送到打印机,并根据需要枚举可用的打印机/设备。后端使用与过滤器相同的界面(接口)。

CUPS包括用于AppSocket(JetDirect),IPP,LPD和USB连接的后端以及用于发现的DNS-SD和SNMP的后端。可以根据需要添加其他后端,而无需其他配置。

Programming Interfaces:

CUPS利用几个通用库来提供打印服务。 与CUPS的其余部分不同,这些库是按照GNU LGPL的条款提供的,所以它们可以被非GPL应用程序使用。

CUPS Library(libcups)

CUPS库包含所有核心的HTTP和IPP通信代码以及用于排列打印作业,获取打印机信息,通过HTTP和IPP访问资源以及操作PPD文件的便利功能。 调度程序和所有的命令,过滤器和后端都使用这个库。

CUPS CGI Library(libcupscgi)

CUPS CGI库提供了所有的Web界面支持功能。 它被CGI程序用来提供CUPS网页界面。

CUPS Driver Library(libcupsdriver)

CUPS驱动程序库提供对CUPS示例打印机驱动程序使用的抖动,颜色转换和辅助函数的访问。

CUPS Imaging Library(libcupssimage)

CUPS图像库提供管理大图像,执行色彩空间转换和色彩管理,缩放图像打印以及管理栅格页面流的功能。 它由CUPS图像文件过滤器,PostScript RIP和所有光栅打印机驱动程序使用。

CUPS MIME Library(livcupsmime)

CUPS MIME库提供了文件类型转换功能。 由scheduler和cupsfilter(8) 命令用来自动输入打印文件并将其转换为可打印的格式。

CUPS PPD Compiler Library(libcupsppdc)

CUPS PPD编译器库提供对驱动程序信息文件的访问,由PPD编译器工具以及cups-driverd(8) 辅助程序使用,以生成用于本地化的PPD文件和消息目录。
通过以上可以对Cups有一个简单的概念,接下来通过要实现的功能去修改Cups相应模块。

猜你喜欢

转载自blog.csdn.net/lfn546489908/article/details/78815788