手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>操作系统>FreeBSD>列表

FreeBSD handbook中文版 11 打印 (1)基本设置

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

fs#set-bits
设置sgttyb 结构里的标记位set-bits。
xc#clear-bits
打开通讯端口后,清除local 模式位clear-bits。
xs#set-bits
设置local 模式位set-bits。
第15 页FreeBSD 使用手册
关于fc、fs、xc 以及xs 关键词各个bit 的说明,请参考
/usr/include/sys/ioctl_compat.h。当LPD 打开由lp 所指定的通讯端口时,会先读取
sgttyb 这个结构,然后清掉fc 关键词所指定的位再设置由fs 关键词所指定的位。设置完
成后,才开始使用这个结构。同样的,对local 模式位设置也是以一样方式的处理。
让我们在我们的例子里为第六个串行端口设置这些位。我们会将传输速率设置成38400 bps。
而在标记位方面,我们会设置TANDEM、ANYP、LITOUT、FLUSHO 以及PASS8 这些位。而local
模式位,我们将设置LITOUT 以及PASS8 位:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:fs#0x82000c1:xs#0x820:
11.3.1.4.6 安装文本过滤器
现在可以开始设置LPD 用什么文字过滤程序送工作给打印机。一个文字过滤程序也叫做
输入用过滤程序,当LPD 有东西要打印时,它就会执行这个程序。当LPD 运行这个程序时,
它会将过滤程序的标准输入设为要打印工作的标准输入,而过滤程序的标准输出则送给以
lp 关键词指定的通讯端口。因此过滤程序必需要能从标准输入读入要打印的东西,做适当
的处理后,将结果从标准输出送出。而这些输出就会被打出来。请参考过滤程序的运作方式
这一节以更进一步的了解过滤程序。
在我们的打印机设置里,文字过滤程序可能只是一个执行/bin/cat 命令的shell script
将工作送给打印机。FreeBSD 里有一个叫做lpf 的过滤程序能处理倒退、底线等打印机可能
无法正确处理的资料。当然,你也可以用任何你想用的过滤程序。关于lpf 这个过滤程序在
文字过滤程序:lpf 这一节里有更详细的说明。
首先, 让我们做一个简单的shell script 文字过滤程序,
/usr/local/libexec/if-simple。用你熟悉的编辑器编辑这个文件:
#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout. Ignores all filter arguments.
第16 页FreeBSD 使用手册
/bin/cat && exit 0
exit 2
然后要让这个文件可执行:
# chmod 555 /usr/local/libexec/if-simple
同时,在/etc/printcap 设置文件里用if 关键词告诉LPD 来使用这个过滤程序。在下面
的例子里,我们在/etc/printcap 中为两台打印机都指定了过滤程序:
#
# /etc/printcap for host rose - added text filter
#
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:\
:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:\
:if=/usr/local/libexec/if-simple:
11.3.1.4.7 打开LPD
lpd 从/etc/rc 运行,通过使用lpd_enable 来控制。默认是NO。如果你还没有启用它,
可以加入下面这行到/etc/rc.conf,然后重新启动电脑或只运行lpd:
lpd_enable="YES"
# lpd
11.3.1.4.8 测试
你已经把LDP 需要的设置都完成了。不过,我们需要测试看看这些设置是否可以正确地
工作。测试的方法就是打出一些东西。如果要用LPD 系统来打印,我们可以使用lpr 这个命
令来送出一些打印工作。
你可以使用检查打印机连接状况这一节里介绍的lpr 及lptest 来产生一些测试文字。
测试LPD 设置:
第17 页FreeBSD 使用手册
输入:
# lptest 20 5 | lpr -Pprinter-name
其中printer-name 是/etc/printcap 里的某一台打印机名称或别名。如果要测试默认
的打印机,那么在执行lpr 命令时不要指定-P 这个参数。再一次的提醒,如果你要测试的
是PostScript 打印机,那么请传送PostScript 程序给打印机,而不要用lptest。你可以
将程序放在一个文件里然后输入lpr file。
如果是PostScript 打印机,你应该会得到程序输出的结果。如果你是用lptest 的话,
那么你的结果看起来应该是下面这个样子:
!”#$%&’()* ,-./01234
“#$%&’()* ,-./012345
#$%&’()* ,-./0123456
$%&’()* ,-./01234567
%&’()* ,-./012345678
如果要做更进一步的测试,你可以下载更大的程序(给某个特定打印机语言的打印机使
用)或是在执行lptest 时加一些额外的参数。例如lptest 80 60 将会产生60 行每行80 个
字符的测试数据。
如果打印机并没有反应,请参考疑难解答这一节。
11.3.1.4.9 疑难解答
用lptest 做过简单的测试后,你可能会遇到下列的问题。打印机打了一阵子,但是并
没有输出任何结果。
打印机打出上面所列的东西,但是没多久就停了。这时,你可能需要按打印机上的PRINT
REMAINING 或FORM FEED 钮才看得到输出的结果。
如果是这种情况的话,打印机在打印前可能在等待是否还有更多的资料要打印。要解决
这个问题,你可以让你的文字过滤程序送出FORM FEED 字符(或是其它需要的字符)给打印机。
这个动作让打印机打出目前打印机缓存区里的资料。同时也确定每个工作的最后一页可以完
整的输出,使得下个工作不会从前一个工作的最后一页中间输出。
下面这个shell script 取代/usr/local/libexec/if-simple。将工作送给打印机后,
会再送出一个form feed 字符:
#!/bin/sh
第18 页FreeBSD 使用手册
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout. Ignores all filter arguments.
# Writes a form feed character (\f) after printing job.
/bin/cat && printf “\f” && exit 0
exit 2

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!