概述
设置一个能够处理多种内容形式的打印服务器,似乎并不是一个困难的任务--实际上也不难,只要考虑一下第三方软件。当你决定只用lpadmin来做时,困难就来了。Unix系统管理专家Errol Fouquet 和Robert Krumm 通过本文指导你用一个经检验过的方法,来设置一个打印服务器,使其能够成功地处理纯文本、PostScript、可打印二进制码(pcl,rtl)等内容形式的文件。
作为UNIX系统管理员在与雇主签约时,雇主要求他们在给客户提供的服务中,要有一项是打印与绘图的技术支持。一个特殊的客户,他的打印环境相当复杂,包括八台36英寸HP绘图仪,一台24英寸HP绘图仪,大约20台HP DeskJet 1600c绘图仪,以及大约20台HP 3si/4si/5si 打印机。所有的设备运行LPD,有PostScript 驱动程序,作为网络打印机使用TCP/IP协议来访问。打印机网卡有HP JetDirect 和XCD XJet 卡各占一半。
我们在一台Sun Ultra Enterprise 450 上运行Zeh Graphic Systems 的 ZPS绘图软件,来支持几个输出多种图形格式的应用程序。我们还要支持从几个其他的应用发出的LPD命令,以及用户发自Netscape应用程序的打印,还有用户在命令行下发出的打印命令。在我们的环境中,打印客户几乎都是SUN的服务器和工作站,数目有近200个。我们还有一台Windows NT 服务器,运行Citrix Winframe,也是一个打印客户。
通过Zeh软件绘图的应用程序使用Ultra 450 作为缓冲池,除此以外,所有其他的打印请求都从客户直接传送到网络打印机。从功能上讲,这种方式工作得很好,能够打印所有我们需要的内容形式,包括:文本,PostScript,和可打印二进制文件(pcl 和 rtl)。问题是这种设置带来一个管理恶梦。像GIF 或 JPEG这样庞大而又不可接受的二进制文件,经常会浪费大量的纸张,而我们又没有简单有效的办法来确定打印请求是从那里发出的。我们只知道大楼内的一台工作站或是服务器,正在向打印机发送有害的工作任务。不幸的是,标题页并不是一个选择,因为用户不愿浪费纸张(反语,哈哈?)。
我们曾经试图写一个 shell script程序,让它扫描大楼内所有的机器,并把行为报告给特定的打印机。用这些信息我们就可以执行Cancel命令。但是这个方法异常缓慢,效率低下。
客户自己的技术策略显示,解决办法就是为UNIX环境写一个打 衿鞒绦颍遣呗员旧砻挥形庵峙渲锰峁┫附凇A硗猓罱蒘print Paranet做的NOMAN(network operations management网络操作管理)评估也认为,应该开发一个打印服务器程序来满足客户的需求。
我们知道一个打印服务器是正确的选择。如果我们能够设置好它,所有的打印请求都可以从一台机器上管理,这会极大地简化整个过程。 但是这又非常困难,我们难以接受。
尝试一:试验和错误
最初,我们想建立一个标准的Solaris打印缓冲。我们指定一台测试机器作为测试打印服务器,取名 nolsn099 (一台运行Solaris 2.6的Ultra 1) ,并开始几个测试。开始用来测试的打印机是一台HP 1600c,在 NIS/DNS环境中称为no1316p。
对每一种服务器设置,客户机用命令行 lpadmin -p no1316p -s nolsn099!no1316p 设置来访问打印机/绘图仪。
服务器设置1:
lpadmin -p no1316p -o protocol=bsd,dest=no1316p -T PS \
-I PostScript -v /dev/null -i /usr/lib/lp/model/netstandard
结果:客户机能够打印 PostScript和二进制文件,但是文本文件会出现楼梯效果。
服务器设置2:
lpadmin -p no1316p -o protocol=bsd,dest=no1316p -T unknown \
-I any -v /dev/null -i /usr/lib/lp/model/netstandard
结果:客户机能够打印文本文件,但是 PostScript和二进制文件打印了成垃圾。