2 FreeBSD handbook中文版 11 打印 高级打印机设置 B.Header Pages( 五 )


# chown daemon.daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo
现在,orchid 上的使用者可以将资料交由rattan 及bamboo 打印 。举例来说,orchid
上的使用者可以输入
第49 页FreeBSD 使用手册
% lpr -P bamboo -d sushi-revIEw.dvi
require ‘sys/socket.ph";
而orchid 上的LPD 系统将会将工作拷贝到/var/spool/lpd/bamboo spooling 目录下并
注明它是要打印DVI 的工作 。当rose 这台机器上给bamboo 用的spooling 目录有空间时,
这两个LPD 就会开始沟通将文件传给rose 。然后这工作便进入rose 的队列直到它被打出为
止 。而将DVI 转换成PostScript(因为bamboo 是PostScript 打印机)的工作将会在rose 这
台机器上执行 。
11.4.3.2 使用网络数据传输接口的打印机
如果你为你的打印机安装了一块网卡接口,通常有两种情况:这个接口具有spooler 的
能力(较贵),或是只是拿来取代串口或并口(较便宜) 。这一节要讨论的是如何使用较便宜的
那种方式 。如果你是选用较贵的接口,请参考前一节:安装远程机器上的打印机 。
/etc/printcap 设置文件里允许你指定使用串口或是并口,以及(如果你使用串行端口)
使用什么传输速率、哪一种流量控制、是否需要延长转换换行字符等等 。但是,却没有一种
方法可以指定以TCP/IP 或是其它的网络连接端口与打印机连接 。
如果要将资料送给这种网络打印机,你需要一种可以被文字及转换用过滤过程调用的数
据传输程序 。这里有一个例子:netprint 这个script 可以读取标准输入的资料并将这些资料
送到用网络连接的打印机 。我们在netprint 命令的第一个参数传入该打印机的机器名称,
并使用第二个参数传送通讯端口的号码 。注意,这个程序只支持单向的传输(即从FreeBSD
到打印机),而很多网络打印机都支持双向传输,而你可能会想要使用这些功能(如取得打印
机状态、统计打印情况等) 。
#!/usr/bin/perl
#
# netprint - Text filter for printer attached to network
# Installed in /usr/local/libexec/netprint
#
$#ARGV eq 1 || die “Usage: $0【2 FreeBSD handbook中文版 11 打印 高级打印机设置 B.Header Pages】”;
$printer_host = $ARGV[0];
$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 () { 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

推荐阅读