cups是目前比较通用的打印系统,支持本地打印和网络打印,也支持共享打印机。通过移植cups和其相关的软件,使得arm+cups支持调用网络打印机进行打印。
一、cups版本
目前在网络上交叉编译cups版本比较多的是1.35版本,但是本人利用cups1.35版本后,不能正确连接到打印机,故不推荐使用这么老的版本的cups。目前在用的是buildroot中自带的2.1.4 ;官网上的最新版本为2.3b4。
二、交叉编译cups
下载cups ,利用./configure 进行配置
./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ LD=aarch64-linux-gnu-ld RANLIB=aarch64-linux-gnu-ranlib AR=aarch64-linux-gnu-ar --target=arm-linux --host=arm-linux --build=x86 LDFLAGS=-L/home/rudis/Ibox3399/x3399_marshmallow/out/release/linuxmount/usr/lib --disable-avahi --disable-gnutls --disable-gssapi --disable-dbus
解释:这里cc cxx..等指向自己的交叉编译器的位置,LDFLAGS=-L后面的目录指向自己文件系统的目录。--disable-avahi 等禁用相关的链接库。如果不想放开的话,需要把对应的头文件放到本地目录里。
Make错误提示:在编译过程中可能会出现链接库的问题,由于makefile文件有点问题,可以把相应丢失的库文件拷贝到当前目录的 ./cups目录下,并改名为标准名称
如果在编译中出现 -rpath提示,将对应的库文件拷贝到./cups目录下来,并在Makefile的libs= 后添加对应的丢失的库链接。
make install DSTROOT=${PWD}/_install生成的文件在_install里,将文件放到开发板的对应位置。
/etc/init.d/cups start如果出现配置文件错误的话,修改/etc/cups/cupsd.conf 下的group 中,将lpadmin删除,启动
/etc/init.d/cups start这里更加推荐使用buildroot自带的cups进行配置,虽然上述交叉编译能够成功,但是报错很多,运行起来也不稳定。buildroot中nettool勾选cups,即可自动部署cups。如果启动失败对照上面的修改group的lpadmin即可。
也可以参考 buildroot对cups的配置文件:
./configure --target=aarch64-buildroot-linux-gnu --host=aarch64-buildroot-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var --program-prefix= --disable-gtk-doc --disable-gtk-doc-html --disable-doc --disable-docs --disable-documentation --with-xmlto=no --with-fop=no --disable-dependency-tracking --enable-ipv6 --disable-static --enable-shared --without-perl --without-java --without-php --disable-gssapi --libdir=/usr/lib --disable-systemd --enable-dbus --enable-gnutls --without-python --disable-libusb --disable-libpaper --enable-avahi三、添加打印机
首先可以通过ubuntu的cups进行打印测试,获取对应打印机ppd文件,将此ppd文件放到/usr/share/cups/model 下
lpadmin -p printname -E -v local -m ppdfile例如:
lpadmin -p xhero -E -v ipp://192.168.1.244/ipp/ -m pxlcolor.ppd其中 xhero就是此打印机的名称
利用
lpoption -d printname设置默认打印机。
利用命令
lp -o media=A4 printfile进行A4纸打印。
测试打印机时,利用了一个pdf文件进行打印。结果提示文件不支持。这是因为cups只是一个打印机伺服器,并不能进行格式的转换。没有对应的过滤器,cups是无法将原文件转换成打印机能够识别的文件的。要进行格式转换还需要另外两个工具,cups-filter 和 ghost script 。Cups-filter 会调用ghost script对pdf进行格式转换为pcl文件,再发送给对应的打印机进行打印。接下来交叉编译 cups-filter 和ghost script