Linux Foundation 项目

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

项目摘要

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

Project description

概览

传统打印机驱动程序由所谓的打印机应用(模拟 IPP 网络打印机)取代,其中包括打印机专用过滤器和 PPD(Postscript 打印机描述,描述打印机功能和要调用的过滤器)文件。

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

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

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

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

我的任务是介绍如何为这种包装形式设计打印机和扫描仪的驱动程序,以及如何将它们打包到 Snaps 中。我们希望帮助任何编写打印机或扫描仪驱动程序的用户(尤其是硬件制造商)将来以正确的方式使用打印机或扫描仪驱动程序。

打印机应用的工作流程可参考以下流程图进行总结:

创建此类打印机/扫描仪应用程序的基础是 PAPPL,这是一个提供大部分功能的库,但也包含包含打印机应用程序所用代码的 cup-filter 库。这一概念仍在开发中,主要是在今年的 Google 编程之夏,但是从 9 月 14 日,文档编写期开始,GSoC 的编码期就已经结束了,这就是 OpenPrinting 需要这个教程的时候。

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

为媒体尺寸声明常量数组

声明函数 i) Callback 或 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) 可选功能,如识别(根据所提供的操作帮助识别打印机)、压缩(压缩图形行)等