Linux Foundation 项目

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

项目摘要

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

Project description

概览

传统打印机驱动程序由特定于打印机的过滤器和 PPD(PostScript 打印机描述,用于描述打印机功能以及要调用的过滤器)文件组成,这些文件必须放置在文件系统的特定目录中,现在已被所谓的打印机应用取代,后者可模拟 IPP 网络打印机。

大多数新型通用打印机都是支持无驱动打印的 IPP 打印机。它们通过 DNS-SD 进行自我通告,客户端可以通过 IPP 请求轮询它们的功能信息,并且它们使用标准数据格式处理打印作业。不提供此功能的打印机(通常是旧版打印机或专用打印机)需要打印机驱动程序。

打印机应用是一种守护程序,用于检测受支持的打印机,并将这些打印机在本地主机上通告为 IPP Everywhere 打印机。打印机应用包含用于在其支持的打印机上打印传入作业的软件,可将数据转换为打印机的原生语言,并可应要求向客户端提供有关打印机功能的信息。打印机应用甚至和真正的网络打印机一样具有网络管理界面。

众所周知,Linux 正在向沙盒化打包(例如 Snap)过渡,打印也是朝着这个方向发展。在沙盒化软件包中,我们无法修改构建后的目录内容。我们的系统不再采用模块化设计。我们无法选择要安装的打印机驱动程序软件包。打印机应用可解决模块化问题,并为我们提供与打印机驱动程序相同的自由度。

Snap 中的打印机和扫描器驱动程序不仅是 Snap 版 CUPS 和 Snap 版应用的要求,它们还适用于完全传统的系统,但与传统打包的驱动程序不同,它们不依赖于操作系统发行版。您可以将打印机驱动程序打包为 Snap,这样它便可在运行 snapd 的所有操作系统发行版上运行,而无需为每个发行版(以及其版本)单独打包打印机驱动程序,也不必陷入依赖项地狱。另一个优势是,我们不再使用来自 PostScript 打印机的旧版 PPD 文件。此外,通过 IP 连接将 CUPS 系统与打印机驱动程序耦合(而不是将文件放入 CUPS 系统),CUPS 系统和打印机应用都可以位于单独的沙盒化软件包中。

我的任务是介绍如何为这种封装形式设计打印机和扫描器驱动程序,以及如何将它们打包为 Snap。目的是帮助日后编写打印机或扫描器驱动程序的所有人(尤其是硬件制造商)以正确的方式编写驱动程序。

打印机应用的工作流程可用给定流程图总结如下:

创建此类打印机/扫描器应用的基础是 PAPPL,这是一个库,提供此类应用的大部分功能,但也包含用于打印机应用的代码的 cups-filters。这个概念仍处于开发阶段,主要在今年的 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) 可选函数,例如 identify(有助于根据提供的操作识别打印机)、compress(压缩一行图形)等