引言
linux操作系统打印驱动适配。
CUPS打印系统
CUPS即Common UNIX Printing System,即通用Unix打印系统,所有linux操作系统,均采用CUPS进行打印。
CUPS提供了打印任务所需要的接口和工具。
CUPS数据流
cups将上层的数据,通过其自带的转换工具,例如pdftopdf、gstoraster等转换为相应的数据格式。cups的转换步骤是依据ppd文件中cupsFilter一栏指定的数据格式来转换的。
上述转换后的数据(例如raster数据),将作为cupsFilter中指定的filter程序的输入,继续转换为打印机支持的数据格式。
参考资料:
- cups过滤器结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQuiJY7K-1585105550455)(D:/nwt_recv/%E5%AD%99%E5%B8%85/cups%E8%BF%87%E6%BB%A4%E5%99%A8%E7%BB%93%E6%9E%84%E5%9B%BE.png)] - cups raster(栅格)数据格式
link
PPD文件
ppd文件存放在/usr/share/cups/model/下,安装打印机是,首先会根据打印机url,找到该目录下对应的ppd文件。
标准的CUPS安装已经携带了很多PPD(Postscript Printer Description)。另外,foomatic-filters,gimp -print和hplip已经自带了很多PPD文件,CUPS会自动去制定路径下检测他们。
对于linux打印驱动,制造商都会提供一个PPD文件,其中包含有关特定打印机型号的所有特定于打印机的信息:基本打印机功能,例如打印机是否为彩色打印机,字体,PostScript级别等,尤其是用户可调整的选项,例如纸张尺寸,分辨率等。
ppd的内容将影响打印配置界面中显示的打印选项内容。
filter文件
filter(适配器),就是我们要开发的打印驱动,它的作用的是将cups的raster数据转换为打印机支持的打印格式数据。
国产操作系统适配
主要解决国产操作系统环境不稳定、交叉编译错误(缺少相关库)等问题。
其中打印驱动开发即filter的开发。
filter开发
filter开发一般基于:
- cups源码
cups源码包顶层目录下的filter目录下。
开发filter一定要确定目标机上运行的cups版本,不同版本cups会存在不兼容的情况。
各版本源码下载地址:
cups源码下载
cupsAPI接口说明 - foomatic源码
foomatic-rip是一种通用打印过滤器,可与每个已知的免费软件打印机后台处理程序一起使用。它具有以下功能:
它将PostScript和PDF(以及其他文件格式)从标准输入转换为打印机的本地语言(通常放置在标准输出中)。
编译出来的foomatic-rip可识别打印机数据,并进行相应的转换,然后根据ppd中内容将转换后的数据再次转换为ppd指定的内容。 - libusb
国产操作系统下,有时会出现usb打印乱码,具体原因未知。可采用调用libusb下的resetusb相关接口规避掉。
cups调试和可能产生的问题
查看cups执行过程中的log
- 修改log等级
vi /etc/cups/cupsd.conf
其中LogLevel指定了log的等级,将其改为debug,可输出所有等级log - 查看log文件
查看正常打印时的log:
cat /var/log/cups/access_log
查看出错时的log:
cat /var/log/cups/error_log