$printer_port = $ARGV[1];
第50 页FreeBSD 使用手册
($ignore, $ignore, $protocol) = getprotobyname(‘tcp’);
($ignore, $ignore, $ignore, $ignore, $address)
= gethostbyname($printer_host);
$sockaddr = pack(‘S n a4 x8’, &AF_INET, $printer_port, $address);
socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)
|| die “Can’t create TCP/IP stream socket: $!”;
connect(PRINTER, $sockaddr) || die “Can’t contact $printer_host: $!”;
while (<STDIN>) { print PRINTER; }
exit 0;
然后我们可以在不同的过滤程序里使用这个script。假设我们有一台连接在网络上的
Diablo 750-N 行式打印机。这台打印机用通讯端口5100 接收资料。这台打印机的名字叫做
scrivener。以下是给这打印机使用的文字过滤程序:
#!/bin/sh
#
# diablo-if-net - Text filter for Diablo printer ‘scrivener’ listening
# on port 5100. Installed in /usr/local/libexec/diablo-if-net
#
exec /usr/libexec/lpr/lpf “$@” | /usr/local/libexec/netprint scrivener 5100
11.4.4 限制打印机的使用
这一节讨论如何限制打印机的使用。LPD 系统可以限制本机及远程使用打印机的使用
者,设置它们是否可以打印多份、打印工作大小的限制以及打印机队列的上限。
11.4.4.1 限制打印多份
LPD 系统让使用者可以很容易地将一个文件打印多份。举例来说,使用者只要以lpr -#5
命令就可以将这个工作里的每个文件都打印5 份。不论这些文件里是什么东西。
如果你觉得打印多份会造成打印机的损坏,你可以在/etc/printcap 设置文件里以sc
关键词关闭lpr 命令的-# 参数。如此,当使用者尝试以-# 参数送出工作时,它们将看到:
lpr: multiple copies are not allowed
注意,如果你允许从远程使用你的打印机(请阅读安装远程机器上的打印机这一节),那
第51 页FreeBSD 使用手册
么你得在远程机器上的/etc/printcap 文件里也设置sc 关键词,否则使用者仍然可以从远
程的机器上要求打印多份。
这里有一个例子。这是rose 这台机器的/etc/printcap 设置文件。rattan 这台打印机
十分强大,所以我们允许在它上面打印多份,但是bamboo 这台激光打印机有点弱小,因此
我们在它上面设置了sc 关键词,不允许打印多份:
#
# /etc/printcap for host rose - restrict multiple copies on bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:\
:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
然后,我们也需要在orchid 这台机器上的/etc/printcap 设置文件里为网络打印机加
上sc 关键词(同时,我们也不允许使用者用teak 这台打印机来做打印多份的工作):
#
# /etc/printcap for host orchid - no multiple copies for local
# printer teak or remote printer bamboo
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
:if=/usr/local/libexec/ifhp:\
:vf=/usr/local/libexec/vfhp:\
:of=/usr/local/libexec/ofhp:
rattan|line|diablo|lp|Diablo 630 Line Printer:\
第52 页FreeBSD 使用手册
:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:
使用sc 关键词之后,我们可以防止使用者使用lpr -#,但是无法防止使用者执行多次
lpr,或是在一个工作里将同样的文件送好几次,像这样:
:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
:if=/usr/local/libexec/psif:\
% lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign
有很多方式可以防止这个滥用(包括忽略它),你可以自己尝试看看。
11.4.4.2 限制访问打印机
你可以使用UNIX 下群组的机制及/etc/printcap 设置文件的rg 关键词来控制谁可以
使用哪台打印机。只要将允许访问打印机的使用者放在某一个群组中,然后用rg 关键词指
定这个群组名称即可。
在这个群组之外的使用者(包括root)将会看到“lpr: Not a member of the restricted
group” 如果它们尝试使用被限制使用的打印机。和sc (禁止打印多份)一样,如果你觉得
需要限制远程使用者使用你的打印机,你也得在远程机器上的设置文件里设置rg 关键词。
(请阅读安装远程机器上的打印机这一节)。
我们将让所有人都可以使用rattan 这台打印机,但是只有在artists 群组里的人可以
使用bamboo 这台打印机。下面是rose 这台机器的/etc/printcap 设置文件:
#
# /etc/printcap for host rose - restricted group for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
第53 页FreeBSD 使用手册
:df=/usr/local/libexec/psdf:
我们在这里不修改其它的/etc/printcap 设置文件(比如说orchid 机器上的)。这么一来,
所有orchid 机器上的使用者都可以用bamboo 来打印。通常这种情况是因为orchid 上的使
用者不多且希望它们都可以访问打印机。
注意: 每个打印机只能使用一个群组名称来做限制。
11.4.4.3 限制提交工作的大小
如果你有很多使用者在使用打印机,你也许会想要设置使用者能传过来打印的文件大小
限制。毕竟,在我们spooling 目录所在的文件系统空间有限,而你得确保有足够的空间给其
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



