Linux中对打印机的支持比较有限,很多打印机厂家也很少有专门针对Linux适配的相关驱动,今天以I.MX8MP平台为例,介绍如何适配cups打印协议,该协议支持常见打印机通讯协议,无需复杂的厂商打印机驱动。
在部署测试之前我们需要查看cups所支持的一些后端协议,比如tcp/ip usb等等,在编译出来的/usr/libexec/cups/backend目录中可以查看到,如下图所示:
本篇文章主要是以USB打印机为例,将cups部署在我司I.MX8MP开发板上。
这里直接从已经编译好的cups开始如何部署,编译是在yocto工程中进行的,可以使用bitbake -e cups | grep ^SRC_URI命令查看当前yocto工程是否包含相关配方,如果没有请按照对应的yocto工程适配。编译出来后主要是有以下目录,如下图所示:
其中我们需要将必要的文件对应拷贝到开发板的目录中,其中包括:
/etc/cups、/usr/lib/、/usr/libexec/cups、/usr/share/cups、/usr/bin/、/usr/sbin/,将所有的目录拷贝完成后可以通过cupsd -t命令检查是否有哪些文件缺失,如果所有环境都正常,会打印如下图所示的信息:
接下来还需要修改相关配置文件,将所属用户、权限等与我们当前的环境对齐,主要是修改/etc/cups/cups-file.con的内容,如下图所示:
以及我们默认移植进来后/usr/libexec/cups/backend目录下所属为weston:wetson,需要将其修改为root:lp,以及更改相关权限,使用如下命令:
chown -R root:lp /usr/libexec/cups/backend
chmod 2750 /usr/libexec/cups/backend
chmod 0750 /usr/libexec/cups/backend/*
按照上述步骤部署完成后,环境也就完成了,接下来需要具体设备的接入以及打印工作。
插入USB打印机,如果正常识别可以在lsusb中查看到自己的打印机设备,同时也可以使用/usr/libexec/cups/backend/usb命令查看,如果正常被cups识别到如下图所示:
在以上环境部署正确,打印机也被完全识别到之后,开启打印机服务,输入命令cupsd -l &,服务会持续运行在后台,如果运行之后没有在后台中发现该进程,那么说明前面的配置哪里有问题,可以按照前面的步骤进行自查,正常服务起来后就可以添加打印机了,以XP237B为例,命令如下:
lpadmin -p XP237B -E -v "usb://Xprinter/XP-237B" -m raw
添加一个名叫XP237B的打印机,-E 使能打印机,-v指定设备URI,后面直接粘贴上面/usr/libexec/cups/backend/usb里检测到的内容,-m raw使用raw模式,数据直通打印机,不做任何数据转换,添加完成后就可以直接启动打印任务了。
echo -e "SIZE 40 mm,30 mm\nGAP 2 mm,0\nCLS\nTEXT 10,10,"2",0,1,1,"Test"\nPRINT 1\n" | lp -d XP237B
这里主要是以TSPL2指令发送打印任务,具体解析为:
设置标签尺寸为40*30,标签间隙2mm,清除图像缓冲区,在坐标(10,10)上打印文本“Test”,打印一份,一切正常就会看到在单张标签纸的左上角打印Test字样。
cups是一个功能十分强大的打印机协议,不仅仅后端协议支持广泛,还支持网页前端显示相关打印机以及打印任务,这里就不再展开描述了,有兴趣可以仔细参阅相关文档及教程。