LINUX 打印

1.安装CUPS
打印需要打印管理程序和打印机的驱动程序。
Linux大多数发行版都带有苹果公司开发的开源打印管理程序CUPS,支持各种打印作业。如果没有安装,直接运行如下命令安装即可:
sudo apt-get install cups (之前最好先 apt-get update一下)

CUPS实际上是一个集成的服务。包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。首先来看看CUPS驱动打印机的方式。这里要说明的是所谓驱动,其实是一系列的程序加定义文件的总和,不像我们有时候想像的那样是一个很简单的单一文件。当CUPS接受到打印命令时,首先会进行一个格式的预转换,比如将.jpg等各种文件先转换成PostScript格式(图1桔红方框)。然后进一步将PostScript格式转换成 CUPS内部格式,这个称为PostScript到PostScript转换,这两种PostScript格式还是有差别的,当然大家可以不必深究(我也没好好看,只是知道在MIME中定义了这两种不同的PostScript,哪位知道的请指教下)。 以上这些都是预处理工作,接下来CUPS的工作围绕PostScript展开(图1,金色部分),CUPS会根据PPD(PostScript Printer Description 文件)文件来选择相应的处理流程。PPD文件其实是驱动的核心,不同的打印机有不同的PPD文件,PPD 包含有关输出设备的信息,CUPS使用 PPD 文件中的信息来确定在打印文档时向打印机发送哪些 PostScript 信息。需要说明的是,CUPS实际上把所有打印机都“看成”PostScript打印机,即便打印机本身不支持PostScript,也可以通过CUPS 自带的PostScript解释程序(pstoraster)或者GhostScript来解释PostScript文件,从而把普通的打印机模拟成 PostScript打印机。图1中金色的线条显示就是CUPS处理PostScript文件的方式,按我的理解,可以分为三种,第一种就是接正在的 PostScript打印机的,而后面两种就是分别用CUPS的pstoraster或GhostScript来解释PostScript,虚拟出一台 PostScript打印机。三种工作方式能够分别支持不同的打印机,所以,这也是CUPS兼容性非常好的原因: 第一种,直接传输PostScript文件给CUPS的后台,再将打印流传输到PostScript打印机,接下来的事情全部丢给打印机去处理,当然,这种打印机大多价格不菲; 第二种方式是交给CUPS的内置程序处理,把PostScript转换成其特有的raster格式,这种格式是CUPS特有的,至于为什么要转成这种格式,是为了方便打印机生产商,让他们可以只需开发CUPS的raster格式到其打印机的接口,方便大家统一,但似乎这一方式的驱动还不多。 第三种方式,也是支持打印机最多的方式,叫做GhostScript格式的驱动模式。它其实和第二种打印驱动比较类似,只把CUPS的解释器换成了外置的 GhostScript来解释PostScript文件,之所以这么周折,是因为目前支持这种方法的打印机比支持CUPS的raster的打印机要多很多。GhostScript程序是独立于CUPS运行的,它的功能也不仅限于打印,但很多情况下通过CUPS来调用GhostScript打印是件很方便的事情。foomatic则是用于连接CUPS和GhostScript的一个脚本程序(用perl写的),用来打包各种不同格式的打印机命令,它非常有用,对于通过CUPS调用GhostScript来说则是必须的。GhostScript格式的驱动程序很多,大家可以到http://www.openprinting.org/去看看,现在大部分打印机在Linux都是用GhostScript驱动的。当然,有些时候,GhostScript还不能包打天下,像HP的1020就比较特殊,它的打印流有点不一样,需要再用特殊的程序进行处理,GhostScript负责讲PostScript格式转换成点阵模式后,还要进过foo2zjs处理,转换成特殊的打印流,再交给后台。这种模式,相当于给GhostScript又装了个插件,附加了一个小模块。 总之,无论是哪种模式,实际上CUPS都是把打印机“看成”PostScript打印机,或是直接调用,或是用自带的方法虚拟,或者用GhostScript虚拟。

升级ghostscript(因为CUPS里自带的有点老)
sudo aptitude install ghostscript
*此时运行 gs -h命令可看到支持的打印机列表

允许当前用户配置CUPS,
sudo usermod -a -G lpadmin fa
(将fa用户加入了lpadmin用户组。这里fa是当前用户的名字)

如果要作为网络打印机,需要修改CUPS配置文件(直连是不需要修改的)
/etc/cups/cupsd.conf/etc/cups/cupsd.conf
先关闭服务
sudo service cups stop
完成以上修改之后启动cups服务,
sudo service cups restart

  1. HP官方驱动
    由于使用的是HP打印机,需要进行驱动程序安装。在Linux环境下惠普推出了自己的驱动程序安装工具HPLIP。
    安装HPLIP
    sudo apt-get install hplip (板子上安装的是3.14)
    (其实安装这个时会自动安装CUPS)
    HP GNU/Linux 驱动. 支持 DeskJet, OfficeJet, Photosmart, Business Inkjet 和一些 LaserJet printer 型的, 以及一些兄弟打印机。

3.配置并添加打印机
下一步设置打印机,首先将打印机连接到开发板上,然后在浏览器中输入 https://你的开发板ip:631 进入配置界面
打开的是一个网站,在上面菜单栏中找到Administrator,会提示你用户名和密码,输入用户名和密码即可
登录后,在Printers栏目中点击Add Printer
显示的Local Printers会有你连接上的那台打印机,应该是带有USBxxx之类的,选中它点击continue
在这个界面Name是打印机的名字,以后用来在URL中确定打印机,所以短一些比较好
勾选Sharing,别的不用变,点Continue
下一个界面选择驱动程序,这边的时候记得选择recommended的那个驱动,因为标准的CUPS安装已经携带了很多PPD(Postscript Printer Description)。如果自己有ppd,可以上传打印驱动程序
最后就设置完成了,复制最后一个界面的URL,也就是类似于http://你的开发板ip:631/printers/打印机名 就可以在其他电脑上添加共享打印机了

4.安装其他驱动
如果CUPS里已经有你的打印机的驱动,当然最好。如果没有,需要下载相应的ppd文件。
https://wiki.linuxfoundation.org/openprinting/start (http://www.openprinting.org/)这里下载
当然,有几个著名的驱动库,可以支持很多主流打印机,可先下载安装
foomatic
** - Foomatic 是一个基于数据库的,集成自由软件打印机驱动和脱机打印程序的系统。Foomatic is a database-driven system for integrating free software printer drivers with common spoolers under Unix. It supports CUPS, LPRng, LPD, GNUlpr, Solaris LP, PPR, PDQ, CPS, and direct printing with every free software printer driver known to us and every printer known to work with these drivers.
The collected knowledge about printers, drivers, and driver options in XML files, used by foomatic-db-engine to generate PPD files. It also contains manufacturer-supplied PPD files which got released under free software licenses.

sudo aptitude install foomatic-db
这里使用aptitude是因为在ubuntu中,aptitude比apt-get在处理包依赖上面更有优势,比如在实现remove操作的时候,使用aptitude能够提供多套解除包依赖的方案供操作者选择。

foo2zjs
**a linux printer driver for ZjStream protocol
e.g. Minolta magicolor 2200/2300/2430 DL,
HP LaserJet 1018/1020/1022/P2035,
HP LaserJet Pro CP1025nw,
HP LaserJet Pro P1102/P1102w/P1566/P1606dn
(安装foomatic后已安装)
安装后可在命令行中用如下方法转换格式打印:
pdf2ps test.pdf test.ps
foo2zjs-wrapper -P -z2 -L0 test.ps > testpdf
cp testpdf /dev/usb/lp0 (假设/dev/usb/lp0是打印机的安装位置)

gutenprint(原名gimp-print)

    • 一组质量非常好的驱动集合,支持的目标机型包括 Canon, Epson, Lexmark, Sony, Olympus;以及配合CUPS/GhostSscript/Foomatic/GIMP使用的 PCL printers,共1300余种。对Canon,Epson的支持还在持续中。
      (安装foomatic后已安装v5.2)

splix
** - 三星驱动,支持SPL打印机(SPL:Samsung Printer Language) USB打印机要配合使用cups-usblp
(安装foomatic后已安装)

ufr2

  • 佳能 UFR2 驱动,支持LBP, iR 和 MF 系列打印机.
sudo aptitude install foomatic

如果你要用它打印热敏小条,可以参考如下文章
http://shumeipai.nxez.com/2015/04/14/raspberry-pi-usb-printer-driver.html

添加HP 1020 plus打印机

这款打印机与原1020/1022 系列不同,光用apt-get install 的HPLIP3.14.6 不行,还需要装plugin,但从HPLIP下载的3.14.6-plugin.run文件安装不上:(
这就需要重新安装HPLIP了。。。。。
HPLIP官网最新版是3.19.1,但无论用run包自动安装还是用tar编译,都无法装上(前者卡死,后者提示libImageProcessor.so不兼容)。从网上多方查找,发现只有3.18.6及以前的HPLIP与ARM架构兼容,果断下载了hplip-3.18.5.tar和hplip-3.18.5-plugin
按照https://developers.hp.com/hp-linux-imaging-and-printing/install/manual/distros/debian的提示手动编译安装成功!再安装plugin(sudo hplip-3.18.5-plugin.run)也成功。
hp-setup后 连入1020 plus,发现机器,一路NEXT即可安装成功(虽然提示的是HP_LaserJet_1020)。

另外一个简便方法是,在原来HPLIP3.14.6的基础上,sudo apt-get install hplip-gui,这将安装一大堆依赖,装完后Preference里就有一个HP Toolbox。然后再sudo hplip-3.14.6-plugin.run就可以把plugin装上了。这是,用foomatic-db中的HP LaserJet 1020 Foomatic/foo2zjs-z1驱动就可以成功驱动HP 1020 plus了!

最后一个问题,它的ppd文件在哪里呢?
标准的CUPS PPD文件放在这个路径 /usr/share/cups/model/
但我的foomatic ppd文件不在这里,而在foomatic的数据库中(foomatic利用XML文件临时生成ppd).
http://www.openprinting.org/printer/HP/HP-LaserJet_1020 列出了其驱动(foo2zjs-z1)细节

| foo2zjs-z1 | |

| | This driver is free software. | |
| | Type: Filter | |
| | | |

Comments

This driver will also work for the HP LaserJet 1018, 1020, 1022, P2035, and other Zenographics-based printers.

PPD files (and the Foomatic XML files to generate them) come with the driver, therefore we do not supply PPDs here on the OpenPrinting site.

Printer list

查询这些ppd文件可以 cd /usr/bin,运行foomatic-ppdfile 命令。加-P HP 可以列出所有HP的ppd
在这里查出1020的XML项如下:
HP LaserJet 1020 Id='HP-LaserJet_1020' Driver='foo2zjs-z1'
事实证明,只要知道了打印机的ID,在webserver里写ppdStr="foo2zjs:0/ppd/foo2zjs/HP-LaserJet_1020.ppd"就可以了。

推荐阅读更多精彩内容