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