pigpig5442
|
分享:
▼
x0
|
[UNIX] Unix 列印说明
[Chapter 6. 列印]
Table of Contents 6.1. 印表机常驻程式 6.2. 设定 /etc/printcap 6.3. 设定 Ghostscript 6.4. 管理印表机的指令 6.5. 远端列印 这一章描述简单的列印设定,使用 HP Deskjet 690C 印表机, 以平行埠为连结介面作为例子。首先,必须设定系统来印纯文件, 接着延伸设定并使用 Ghostscript 程式来列印 PostScript 文件。
6.1. 印表机常驻程式 在安装完成后还不能进行列印,因为 lpd 列印伫列常驻程式还未启动。要启动 lpd , 则在 /etc/rc.conf 中必须更改这一行:
lpd=NO
为
lpd=YES
这个改变在下次开机时便会生效,但可以立刻以手动方式启动:
# lpd -s
要检查 lpd 是否启动,键入以下指令:
# ps ax | grep lpd 179 ?? Is 0:00.01 lpd
如果你没有看到有关 lpd 的项目,则常驻程式没有启动。
在设定 /etc/printcap 以前,最好先做 印表机测试,检查连线是否正常。例如:
# lptest 20 10 > /dev/lpt0
看看输出的结果,使用相同的指令,但是不要将输出重导到印表机:
# lptest 20 10
常见的问题是输出至印表机的资料不会标齐而会有"锯齿状"。 这通常是表示是指印表机被设定为,在同时接收到 (carriage return, ASCII 13) 字元和 (line feed, ASCII 10) 字元后,才会在左边界开始新的一行。 可以修正这个问题:
更改印表机的设定
使用简单的列印过滤程式(稍后会叙述)
Note: 在先前的例子,lpd 伫列程式 并没有用到,因为程式的输出直接导向列印装置 (/dev/lpt0) 而且没有被伫列。
6.2. 设定 /etc/printcap 这一段解释如何简单的设定来列印纯文件。
在 /etc/printcap 中必须有印表机的 记载项目;这个项目包括印表机的 id(印表机的名称)和印表机的 描述。lp id,是许多程式的预设值。
Example 6-1. /etc/printcap
lp|local printer|HP DeskJet 690C:\ :lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:\ :sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter:
档案格式和选项都被详细地描述在 printcap(5) 里。请注意 输入过滤程式已经被指明 (即为 if 选项)而将会避免产生锯齿状的问题。
if=/usr/local/libexec/lpfilter
印表机驱动程式和 HP 印表机: Example 6-1 使用 lpa# 装置做为印表机(询查模式),而不是 lpd# (中断模式)。使用中断模式会和某些印表机产生沟通的问题, 而 HP Deskjet 690C 正好是其中之一:列印会非常慢,列印一页 PostScript 文件可能要花上一个小时。这个问题可以藉由使用 lpa 驱动程式来解决。我们也可以重新 编译一个个人化核心使 lpd 成为询查模式。
printcap 中关于印表机的项目所指明的伫列目录必须被建立; 这个目录将被 lpd 常驻程式用来累积 资料以进行列印。
# cd /var/spool/lpd # mkdir lp # chown daemon:daemon lp # chmod 770 lp
唯一遗漏的部份是 lpfilter 输入过滤程式,我们必须撰写它。这个过滤程式唯一的工作只是在 资料被送往列印以前,做排除锯齿状问题的工作。在此例中,印表机 需要以下的字串做初始化:"ESC &k2G"。
Example 6-2. /usr/local/libexec/lpfilter
#!/bin/sh # Treat LF as CR+LF printf "\033&k2G" && cat && exit 0 exit 2
# cd /usr/local/libexec # chmod 755 lpfilter*
Note: 有另一个过滤程式可以被使用:
:if=/usr/libexec/lpr/lpf:
这个过滤程式比之前的更为复杂。它被用来处理 nroff 的输出以及底线和附加列印, 展开 tab 字元和转换 LF 成 CR + LF。这个过滤程式的 原始码可以在此被找到 /usr/src/usr.sbin/lpr/filters/lpf.c。
再一次执行 lptest 指令,这次使用 lpd 伫列程式。
# lptest 20 10 | lpr -h
使用 lpr 程式列印文件将会利用伫列程式 将资料送往印表机;-h 选项会避免标题页的 列印(不是必要的,因为 sh 选项已经 出现在 /etc/printcap 中了)。
你可以使用各种不同的工具和方法解决锯齿状的问题,例如 C 程式。 使用上述的方法是最简单的。
6.3. 设定 Ghostscript 基本的列印已经可以运作了,我们现在要加入列印 PostScript 档案 的功能。此例中的印表机并不支援 PostScript;我们必须使用程式来 转换 PostScript 文件成一连串的命令使印表机能了解。在 package 集合中的 Ghostscript 程式可以达成 这个目的(请看 Chapter 8)。这一段解释如何设定 Ghostscript 使 HP Deskjet 690C 能 列印 PostScript 档案。
在 /etc/printcap 中为印表机建立第二 个 id:新的 id 将使用不同的输入过滤程式,将会呼叫 Ghostscript 来执行 PostScript 文件的列印。因此,纯文件将会使用 lp 印表机而 PostScript 文件则使用 ps 印表机:两者都使用相同的实体印表机, 但却有不同的列印过滤程式。
可以使用不同的设定来达到相同的结果。例如,在设定项目中只使用 一个过滤程式:过滤程式能够自动地决定所要列印文件的格式并使用 适当的列印程式。这个方法较为简单但却导致一个较为复杂的过滤程 式;或许你可以考虑从 package 集合安装 magicfilter:它会自动地完成这个结 果并做许多其他的工作。
新的 /etc/printcap 看起来像这样:
Example 6-3. /etc/printcap
lp|local printer|HP DeskJet 690C:\ :lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:\ :sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter:
ps|Ghostscript driver:\ :lp=/dev/lpa0:sd=/var/spool/lpd/ps:lf=/var/log/lpd-errs:\ :mx#0:sh:if=/usr/local/libexec/lpfilter-ps:
对列印 PostScript 档案而言,mx#0 是非常重要 的选项,因为它排除了输入档案大小的限制;PostScript 文件可以 非常大。if 选项指向新的过滤程式。也有一个新 的伫列目录。
最后的步骤是建立新的伫列目录和过滤程式。
# cd /var/spool/lpd # mkdir ps # chown daemon:daemon ps # chmod 770 ps
处理 PostScript 输出的过滤程式比纯文件的较为复杂:要列印的档案 必须经过直译器,也就是利用印表机的控制语言,传送一连串的命令给 印表机。我们可以利用 NetBSD 作业系统和一些功能强大的而免费的 package,使得廉价的彩色印表机能够接受 PostScript 格式的输出。 设定 Ghostscript 所使用的选项在 Ghostscript 文件中有详细的叙述:cdj550 是 HP 印表机的驱动程式。
Example 6-4. /usr/local/libexec/lpfilter-ps
#!/bin/sh # Treat LF as CR+LF printf "\033&k2G" || exit 2 # Print the postscript file /usr/pkg/bin/gs -dSAFER -dBATCH -dQUIET -dNOPAUSE -q -sDEVICE=cdj550 \ -sOutputFile=- -sPAPERSIZE=a4 - && exit 0 exit 2
摘要:在系统上要建立两个不同的印表机名称,指向相同的实体印表机 但使用不同的选项,不同的过滤程式和不同的伫列目录。纯文件和 PostScript 文件都可以被列印。要列印 PostScript 文件则 Ghostscript package 必须安装在系统上。
6.4. 管理印表机的指令 这一段列出一些有用的 BSD 的列印和管理列印工作的指令。除了 已经提到的 lpr 和 lpd 以外,我们有:
lpq 检查列印伫列。
lprm 删除列印伫列中的工作。
lpc 检查列印系统,增加或取消印表机及印表机的功能。
6.5. 远端列印 我们也可以设定列印系统来使用连接在远端主机上的印表机。举例 说明,你在 wotan 主机上工作而你想要使 用连接在 loge 主机上的印表机。 /etc/printcap 是在特别情况 Example 6-3 中的一个设定档。 在这个特殊情况中,在 wotan 上也可以 列印 Ghostscript 文件。
第一步是使这个特殊的主机能够列印从 wotan 主机上所提交的工作。在特殊主机的 /etc/hosts.lpd 中,加入一行 wotan 主机的名称。这个档案的格式非常简单: 每一行都包含一个能够使用的主机。
接着,必须设定 wotan 上的 /etc/printcap 为了使工作能传送到特殊主机。例如:
lp|line printer on loge:\ :lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\ :rm=loge:rp=lp
ps|Ghostscript driver on loge:\ :lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\ :mx#0:\ :rm=loge:rp=ps
There are four main differences between this configuration and the one of Example 6-3. 在这个设定和 Example 6-3 中的那一个有四个 主要的不同点。
"lp" 定义是空白的。
"rm" 设定项目定义了印表机所连接的主机的名称。
"rp" 设定项目定义了连接到远端主机的印表机的名称。
指明输入过滤程式是必要的,因为在特殊主机上的定义将会被使用。
现在在 wotan 上执行 "lp" 和 "ps",所产生 的列印工作将被自动地传送到印表机所连接的主机上。
|