使用者打印的数目并向它们收费。就像磁盘配额一样,这个统计是马上生效的。你可以
提供一种方式供使用者检查或调整它们的“打印配额”,以防止某些使用者打印过量。
但是这种方法需要一些维护数据库的程序代码以记录使用者使用的配额。
LPD spooling 系统可以很容易地支持上述两种情况:因为(大部分的时候)你得提供你的
过滤程序以及计算的程序。这有一个好处就是你可以很有弹性地调整计算的方法。举例来说,
不管你是使用定期统计还是实时统计,你可以选择要记录哪些信息:使用者名称、机器名称、
工作型态、打印的张数、纸张的大小、打印工作所花的时间等等。而你只要调整你的过滤程
序就可以了。
11.4.5.1 快速设置打印机的使用统计
FreeBSD 提供两个程序让你可以快速设置好定期统计。它们是在文字过滤程序:lpf 那
节所提到的lpf 以及pac,一个可以从打印机打印记录文件读取并统计资料的程序。
在前几节(过滤程序的运作方式),我们曾提到LPD 会将记录文件名以参数的方式传给文字
第57 页FreeBSD 使用手册
过滤程序和转换用过滤程序。如此过滤程序就知道可以将计算结果记录到哪个文件里。这个
文件名在/etc/printcap 文件里是以af 关键词指定,如果不是以绝对路径来指定的话,那
么这个文件将会放在相对应于spooling 目录的位置下。
LPD 会将纸张的宽度及高度传给lpf 命令(由pw 及pl 关键词所指定)。lpf 使用这些参
数来计算将会用到多少张纸。而将文件送给打印机打印后,它会将这些结果记录在记录文件
里。这些结果看起来是像这个样子的:
2.00 rose:andy
3.00 rose:kelly
3.00 orchid:mary
5.00 orchid:mary
2.00 orchid:zhang
由于lpf 没有使用文件锁定的相关操作,因此每台打印机都要有独立的统计记录文件,
否则两个lpf 同时对同一个文件做写入的动作可能会使彼此的记录都不正确。而最简单的解
决方式就是让不同的打印机在/etc/printcap 设置文件里以af=acct 关键词指定不同的统计
记录文件。这些acct 文件将会分别放置在不同的spooling 目录下。
当你准备要向使用者收钱时,执行pac 这个程序。只要将目录切换到你想收钱的打印机
spooling 目录下,然后打pac。你将会得到一份像下列的收费摘要:
Login pages/feet runs price
orchid:kelly 5.00 1 $ 0.10
orchid:mary 31.00 3 $ 0.62
orchid:zhang 9.00 1 $ 0.18
rose:andy 2.00 1 $ 0.04
rose:kelly 177.00 104 $ 3.54
rose:mary 87.00 32 $ 1.74
rose:root 26.00 12 $ 0.52
total 337.00 154 $ 6.74
pac 有下列参数可以使用:
1. Pprinter
指定要处理哪一台printer 的统计资料。这个参数只有在/etc/printcap 文件里
第58 页FreeBSD 使用手册
的af 关键词是使用绝对路径时才有用。
2. c
将输出的结果以费用排序,而不是以使用者的名字排序。
3. m
忽略记录文件里的机器名称。如果使用这个参数,那么alpha 机器上的使用者smith
和gamma 机器上的使用者smith 将会被视为同一个使用者。否则,它们会被视为不
同的使用者。
5. r
6. s
4. pprice
计算时以每一页收取price 元计算,而不是使用/etc/printcap 里的pc 所指定的
费率或2 分美金(默认的费率)计算。你可以用浮点数来指定price 这个参数。
颠倒排列的顺序。
将计算的结果写到一个摘要文件里,同时清除统计记录文件的内容。
name ...
只为指定的使用者names 做统计。
在pac 默认的输出里,你可以看到不同机器上不同使用者所打印的张数。如果你不在乎
使用者使用的机器(比如说使用者可以用任何机器),那么你可以用pac -m 产生下列的摘要
输出:
Login pages/feet runs price
andy 2.00 1 $ 0.04
kelly 182.00 105 $ 3.64
mary 118.00 35 $ 2.36
root 26.00 12 $ 0.52
zhang 9.00 1 $ 0.18
total 337.00 154 $ 6.74
pac 计算应缴纳的金额时,会使用/etc/printcap 文件里pc 关键词所指定的费率(默认
值为2 美分)。即每一页或是每一英尺你想要收多少钱就是在这里指定。你可以在执行pac
第59 页FreeBSD 使用手册
时以参数-p 改变这个费率。不过-p 的单位是元,而不是分,举例来说,
# pac -p1.50
将使打印每一页以1 元5 分计算。你可以用这个参数调整你所收取的费用。
最后,如果你使用pac -s 将会把这些摘要信息存在一个文件里,这个文件的名称会和
统计记录文件相同,不过文件名后面会再加上_sum。然后它会将统计记录文件清空。如果你
再执行一次pac 命令,那么它会先读取之前统计的结果,然后再加上从统计记录文件里所计
算出来的结果。
11.4.5.2 如何统计有几页被打印?
为了要能精确统计打印的情况,你必须要能得知每个工作用了几张纸。这是打印机使用
情况统计最基本的问题。
对于纯文本的工作,这个问题并不难解决:你只要统计这个工作里有几行并知道你的打
印机一张纸可以印几行就行了。别忘了考虑倒退字符以及因为同一行字符过多而换行的情
况。
lpf 文字过滤程序(在文字过滤程序:lpf 这一节里介绍的)在做统计时会将这些情况都
考虑进去。如果你要自己撰写有统计功能的文字过滤程序,你可以参考lpf 的原始码。
那么要如何统计其它格式的文件呢?
对于DVI 转成LaserJet 或DVI 转成PostScript,你可以让你的过滤程序处理由dvilj 或
dvips 的输出以判断一共转换了几页。你也许可以用类似的方式来处理其它的文件格式以转
换程序。
但是这样的方法所计算出来的和打印机实际打出来的可能不大相同,举例来说,打印机
可能会卡纸、用完色带碳粉或墨水、或是其它的故障—而这些使用者仍然需要付费。
那么,我该怎么办?
只有一种方式肯定是可以做出精确的统计。买一台可以告诉你一共打出多少纸张的打印
机,同时将它接在串行端口或是以网络连接。几乎所有的PostScript 打印机都支持这个功能。
当然其它种类的打印机也有支持的(如网络Imagen 激光打印机)。为这些打印机修改你的过
滤程序,使得过滤程序在打印完成后可以从打印机取得这些信息,同时也只根据这些记录来
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



