我熟悉内核模块,听说过IPP,PPD,PS,PCL,PDL打印机驱动程序的概念。我读过一些“通用”打印机驱动程序,这些驱动程序是在Mac/Windows上预装的,所以您不必安装自定义驱动程序,这样可以使UX无缝。
在这种情况下,我正在寻找这些通用驱动程序的外观(假设它是一个内核模块)。还没有找到关于这个主题的任何例子,但是找到了以下的回复:
与此相关,我在Gutenprint中发现:src/main/print-lexmark.c和src/main/canon-printers.h,它们有这些cap_t ~table~东西,它们似乎具有为单个打印机模型编码的特性。这似乎有很多工作要做。Gutenprint 这里中有大量受支持的打印机。
我的问题有几个部分:
发布于 2019-01-10 09:01:32
PCL和PostScript ( PS )不是驱动程序规范,而是页面描述语言:如果您的打印机支持这两种语言,则打印机驱动程序的工作将是将打印作业转换为PCL或PS。
PCL和PS都可以制作高质量的照片.但是PCL实际上对大分辨率位图图像更有效,特别是当你的计算机的主处理器比打印机的处理器强大得多的时候(今天的情况通常是这样)。PostScript在文本和矢量图形方面处于最佳状态:它可以将大部分缩放/呈现过程卸载到实际的打印机上,这是有用的,因为光是激光打印机的内存和处理能力可能与计算机的其他部分一样大。对于矢量图形,PostScript只需发送绘制图形所需的命令,然后打印机就会使用其完全的本机分辨率自动再现图形。
驱动程序需要考虑打印机的可用功能:例如,如果打印作业的一部分一直到纸张的边缘,但打印机需要在无法打印的纸张边缘留出一定的最小边距,则需要作出决定,是缩放整个页面来适应,还是将工作的一部分移动到另一个页面,或者只是切断不可打印的边缘。而将彩色数据发送到只能产生灰色阴影的打印机只是浪费时间(如果是网络打印机,则是网络带宽)。PPD (= PostScript打印机描述)文件提供这个打印机模型特定的信息.
Unix/Linux打印机驱动程序通常不是内核模块:相反,它们只是普通的用户空间程序(甚至脚本),它们将发送到标准输入的打印作业转换为标准输出的适当页面描述语言。在CUPS术语中,这被称为过滤器。
如果本地连接的打印机使用非标准的USB端点结构(某些情况下是“基于主机的打印”)或其他特殊协议,则驱动程序可能还包括处理特殊通信协议的程序。在CUPS术语中,这被称为“端口监视器”。CUPS包括一些常见情况下的端口监视器,但是打印驱动程序可以提供一个自定义的。
打印假脱机守护进程(现在主要是cups)负责从用户接收打印作业,标识其格式,应用任何必要的转换(通过筛选程序(也称为“驱动程序”),最后将结果输出到打印机设备(可选地使用针对此特定打印机模型的端口监视器)。
CUPS内置了“通用驱动程序”来处理大多数PostScript打印机,方法是使用PPD文件(PostScript打印机描述)来提供打印机特定的详细信息。CUPS也是扩展PPD文件规范.,这样非PostScript打印机也可以被PPD文件描述。在这种情况下,PPD扩展指定一个或多个额外的程序CUPS应该运行,以将打印作业从已知的CUPS格式转换为打印机将接受的任何数据格式。
关于你编号的问题:
1.)最广泛使用的页面描述语言(如PCL和PS )已经发布了规范文档:很久以前,当实际的纸质手册与硬件一起出现时,说明书甚至可能包含在打印机中。
其他语言和协议,如许多与“基于主机的打印机”一起使用的语言和协议,都是反向设计的。是的,这是一个巨大的努力。
2.)在https://github.com/apple/cups/tree/master/filter中,您可以找到CUPS通用的PostScript和光栅(=原始位图数据)驱动程序。还有读取PPD文件的代码。
3.)见我上述答复的导言。
4. openprinting.org拥有庞大的打印机模型数据库和开放源代码的打印驱动程序解决方案。如果某个特定打印机存在开源驱动程序解决方案,我很可能会在其中找到它--或者链接到它。
https://unix.stackexchange.com/questions/493626
复制相似问题