Linux 版 (精华区)

发信人: tcpip (高级草包), 信区: Linux
标  题: 打印及传真 - 16. 在 lpd 下使用序列式打印机
发信站: 紫 丁 香 (Tue Apr 11 19:22:18 2000) WWW-POST

打印及传真 - 16. 在 lpd 下使用序列式打印机  


16.1 设定 printcap 
Lpd 在 /etc/printcap 中提供了五个可以设定的属性, 让你用来控制打印机所连接的串
行的设定. 阅读 printcap 的在线手□(man page), 并请注意 br#, fc#, xc#, fs# 和 
xs# 的意义. 其中最后的四个属性是比特列(bitmap), 用来代表该串行的使用设定. 而 
br# 属性只是单纯的鲍率(baud rate), 例如 `br#9600'. 


要将 stty 的设定转换为 printcap 的旗标设定(flag settings) 非常简单. 假使你需要
, 请现在就看看 stty 的在线手□. 


你可以用 stty 来设定打印机埠, 以便让你可以将一个文件 cat 到该埠, 并且使它正确
地打印出来. 这儿是我的打印埠 `stty -a' 的结果: 

dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr 
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
-tostop -echoprt -echoctl -echoke

这里和开机时串行初始化的设定方式唯一的不同在於 -clocal, -crtscts, 和 ixon. 根
据你的打印机的流量控制(flow control) 方式, 你的设定可能会不同. 

实际上, 你是以特殊的方式使用 stty. 因为 stty 的对象是连接在标准输入(standard 
input) 上的终端机装置, 你是用如上所示的 `<' 字符, 来使得 stty 处理所指定的串行



只要你的 stty 设定正确, `cat file > /dev/ttyS2' (在我的例子中) 就可以将文件送
到打印机了, 请看一下这个文件 /usr/src/linux/include/asm-i386/termbits.h, 它包
含了很多的 #define 和一些 struct (你可能想把它 cat 到打印机 (已经可以用了吧, 
对不对?), 然后把它当做便条纸). 找到下面这一行: 


/* c_cflag bit meaning */
#define CBAUD   0000017

这一段列出了 fc# 和 fs# 比特的意义. 你会发现到那儿的名称 (在鲍率之后) 和 stty 
输出的结果其中一行相符合, 我不是说这会很容易吗? 

找到那些在你的 stty 结果中前面有减号(-) 的设定, 把那些数字(是八进位的) 加起来
. 这代表了你要清除的比特, 结果就是你的 fc# 能力. 当然你也可以直接用 
`fc#0177777' (我就是), 因为你将会在清除之后立刻设定这些比特. 


现在对那些在 stty 的结果中没有减号在前面的设定 (在这一段中所列出的) 做同样的事
. 在我的例子中, 重要的设定有 CS8 (0000060), HUPCL (0002000), 和 CREAD 
(0000200). 同时也找到代表你的鲍率的旗标 (我的是 0000015), 把它们统统加起来, 在
我的例子中会得到 0002275. 这就是你的 fs# 能力 (`fs#02275' 在我的例子中运作的很
好). 


用同样的方式针对这个标题档(include file) 中的下一段, "c_lflag bits", 做设定和
清除的动作. 在我的例子中我不需要设定任何东西, 所以只要用 `xc#0157777' 和 
`xs#0' 就可以了. 


16.2 会掉字的旧型序列式打印机 
Jon Luckey 指出有些具有 ten-cent 序列界面和小缓冲区的旧型的序列式打印机, 当使
用流量控制时, 说停止就是真的表示停止. 他发现用 setserial 停用他的 Linux 机器的
 16550 串行的 FIFO 功能後, 掉字的问题就解决了 (如果你要这样做, 似乎只要将 
uart 的种类指定为 8250 就可以了). 
 

 
--
"这一千多年没写诗了?"
"写了, 不过只写了两句."
"千年得两句, 一定是万古丽句了. 念来听听."
"好吧, 我现丑了" 太白星清了清嗓子, 浑厚的男中音在天庭响起:
大海啊, 都是水;
骏马啊, 四条腿;

※ 来源:·紫 丁 香 bbs.hit.edu.cn·[FROM: tcpip.hit.edu.c] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.331毫秒