Linux Foundation 项目

本页面包含有关 Google 文档季可接受的技术写作项目的详细信息。

项目摘要

开源组织:
Linux 基金会
技术文档工程师:
PIYUSHgoyal16
项目名称:
关于打印机应用中的打印机/扫描仪驱动程序的教程和设计指南
项目时长:
标准时长(3 个月)

Project description

概览

传统打印机驱动程序由打印机专用过滤器和 PPD(Postscript 打印机描述,描述打印机功能和要调用的过滤器)文件所取代,这些文件必须放到文件系统的某些目录中,由所谓的打印机应用(模拟 IPP 网络打印机)取代。

大多数新型通用打印机都是 IPP 打印机,支持无驱动打印。它们通过 DNS-SD 通告自己,客户端可以通过 IPP 请求轮询自身的功能信息,并且它们针对打印任务使用标准数据格式。不提供此功能的打印机(传统打印机或专用打印机)通常需要打印机驱动程序。

打印机应用是一个守护程序,用于检测受支持的打印机,并将这些打印机作为 IPP Everywhere 在 localhost 上的服务通告。打印机应用包含用于在支持的打印机上打印传入作业的软件,可将数据转换为打印机的母语,并可应请求向客户端提供有关打印机功能的信息。打印机应用甚至具有网络管理界面,就像实际的网络打印机一样。

据我们所知,Linux 正在转向沙盒化打包(例如 Snap),打印功能也会朝着这个方向发展。在沙盒化软件包中,目录内容一旦构建完毕就无法修改。我们的系统不再是模块化的。我们无法选择要安装的打印机驱动程序软件包。打印机应用解决了这一模块化问题,并为我们提供了与打印机驱动程序相同的自由度。

Snaps 中的打印机和扫描仪驱动程序不仅需要贴靠 CUPS 和贴靠应用,而且可以在完全传统的系统上运行,但与经典打包的驱动程序相比,它们独立于操作系统分发。您将构建打印机驱动程序 Snap,它适用于运行快照的所有操作系统发行版,无需为每个发行版(及其版本)单独打包打印机驱动程序,并遇到依赖项层。另一个优点是,来自 PostScript 打印机的 PPD 文件旧版概念不再使用。此外,通过 IP 连接将 CUPS 系统和打印机驱动程序相耦合,而不是将文件拖放到 CUPS 系统中,因此 CUPS 系统和打印机应用都可以位于单独的沙盒化软件包中。

我的任务是介绍如何为打印机和扫描仪设计适用于这种打包方式的驱动程序,以及如何将它们打包成 Snap。其目的是帮助任何编写打印机或扫描仪驱动程序的用户(尤其是硬件制造商)将来能够以正确的方式使用打印机或扫描仪驱动程序。

打印机应用工作流程可汇总为以下流程图:

创建此类打印机/扫描仪应用的基础是 PAPPL,PAPPL 是一个库,为实现此操作提供大部分功能,但也包含包含打印机应用所用代码的杯子滤波器。这一概念仍在开发中,主要是在今年的 Google 编程之夏计划中。但在 9 月 14 日,文档撰写期就已经结束,而 GSoC 的编码期就已经结束了,这就是 OpenPrinting 需要学习教程的时候。

打印机驱动程序模板 定义作业数据的结构

为媒体尺寸声明常量数组

声明函数 i) 回调或 init 一个接受驱动程序名称、驱动程序数据等信息的布尔值函数,并相应地设置驱动程序属性。如果提供的详细信息合适,则会在失败时返回 true 和 false。

ii) 输出接受作业、作业和设备选项的布尔函数。它会输出一个文件,并在成功时返回 true,在失败时返回 false。

iii) rendjob 接受作业、作业和设备选项的布尔值函数。它会结束作业,并在成功时返回 true,在失败时返回 false。

iv) rendpage 布尔值函数,接受作业、作业选项、设备和页码。它会结束页面,并在成功时返回 true,在失败时返回 false。

v) rstartjob 接受作业、作业和设备的选项的布尔值函数。它启动作业,并在成功时返回 true,在失败时返回 false。

vi) rstartpage 接受作业、作业选项、设备和页码的布尔值函数。它启动页面,并在成功时返回 true,在失败时返回 false。

vii) rwrite 接受作业、作业选项、设备、行号和字符数组的布尔函数。它会写入一行代码,成功时返回 true,失败时返回 false。viii) 可选功能,例如识别(有助于根据提供的操作识别打印机)、压缩(压缩一行图形)等