广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 8477 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
pigpig5442
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x13
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 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",所产生 的列印工作将被自动地传送到印表机所连接的主机上。



献花 x0 回到顶端 [楼 主] From:台湾中华电信 | Posted:2005-07-18 23:07 |
graceman
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x4
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

蛮详细的, thanks for sharing


献花 x0 回到顶端 [1 楼] From:台湾中华电信 | Posted:2005-08-25 00:06 |
mnbmnb5266
个人文章 个人相簿 个人日记 个人地图
小有名气
级别: 小有名气 该用户目前不上站
推文 x5 鲜花 x46
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

感谢您的说明,又学到不少啊,


我的收藏
https://pan.baidu.com/s/1QUJ9lr_VzxXKRJAlBJgUQA
提取码:am2c
献花 x0 回到顶端 [2 楼] From:加拿大Rogers | Posted:2010-08-26 23:22 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.068800 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言