该ncpfs软件包包含一个名为 nprint 的小程序,它通过 NCP 连接将打印作业发送到 NetWare 打印队列。如果连接当前不存在,此命令将创建连接,并使用我们之前描述的~/.nwclient文件来隐藏用户名和密码,防止他人窥视。用于管理登录过程的命令行参数与 ncpmount 使用的参数相同,因此我们在此不再赘述。 我们将在示例中介绍最重要的命令行选项;有关详细信息,请参阅nprint(1)手册页。
nprint 唯一必需的选项是要打印的文件名。 如果指定的文件名为 – 或者根本未指定任何文件名,则 nprint 将从stdin接受打印作业。 最重要的 nprint 选项指定您希望将作业发送到的文件服务器和打印队列。 表 15-4 列出了最重要的选项。
表 15-4. nprint 命令行选项
选项 | 描述 |
---|---|
-S服务器名称 | 支持您希望打印到的打印队列的 NetWare 文件服务器的名称。 通常,服务器在~/.nwclient中有一个条目会很方便。 此选项是必需的。 |
-q队列名称 | 要将打印作业发送到的打印队列。 此选项是必需的。 |
-d作业描述 | 在打印控制台实用程序中显示排队作业列表时将显示的文本。 |
-l行数 | 每打印页的行数。 默认为 66。 |
-r列数 | 每打印页的列数。 默认为 80。 |
-c份数 | 要打印的作业份数。 默认为 1。 |
使用 nprint 的一个简单示例是
$ nprint -S REDS01 -q PSLASER -c 2 /home/matt/ethylene.ps |
您会记得我们之前提到 ncpmount 的–c选项对于打印很有用。 最后,我们将解释原因和方法。
Linux 通常使用 BSD 样式的线路打印机软件。 线路打印机守护程序 (lpd) 是一个守护程序,用于检查本地假脱机目录中是否有要打印的排队作业。 lpd 从特殊格式的假脱机文件中读取打印机名称和其他一些参数,并将数据写入打印机,可以选择通过过滤器传递数据以某种方式转换或操作数据。
lpd 守护程序使用一个名为/etc/printcap的简单数据库来存储打印机配置信息,包括要运行哪些过滤器。 lpd 通常以名为 lp 的特殊系统用户的权限运行。
您可以将 nprint 配置为 lpd 使用的过滤器,这允许您的 Linux 机器的用户直接输出到 NetWare 文件服务器托管的远程打印机。 为此,lp 用户必须能够将 NCP 请求写入到与服务器的 NCP 连接。
一种无需 lp 用户建立自己的连接和登录即可实现此目的的简单方法是将 lp 指定为另一个用户建立的连接的所有者。 如何设置 Linux 打印系统来处理来自 NetWare 客户端的打印作业的完整示例分三个步骤列出
编写一个包装脚本。
该/etc/printcap文件不允许将选项提供给过滤器。 因此,您需要编写一个简短的脚本来调用您想要的命令及其选项。 包装脚本可以像
#!/bin/sh # p2pslaser - simple script to redirect stdin to the # PSLASER queue on the REDS01 server # /usr/bin/nprint -S REDS01 -U stuart -q PSLASER # |
这样简单。将脚本存储在文件/usr/local/bin/p2pslaser.
中。 编写/etc/printcap
我们需要将我们创建的p2pslaser脚本配置为/etc/printcappslaser|Postscript Laser Printer hosted by NetWare server:\
:lp=/dev/null:\
:sd=/var/spool/lpd/pslaser:\
:if=/usr/local/bin/p2pslaser:\
:af=/var/log/lp-acct:\
:lf=/var/log/lp-errs:\
:pl#66:\
:pw#80:\
:pc#150:\
:mx#0:\
:sh:
。将–c选项添加到 ncpmount。
ncpmount -S REDS01 .... -c lp .... |
我们的本地用户 stuart 必须在挂载远程 NetWare 服务器时将 lp 用户指定为连接的所有者。
现在,任何 Linux 用户都可以在调用 lp 时选择将pslaser指定为打印机名称。 打印作业将发送到指定的 NetWare 服务器并假脱机以进行打印。
pqlist 命令列出指定服务器上可供您使用的所有打印队列。 如果您没有使用-S选项在命令行上指定文件服务器,也没有指定登录名和密码,则这些信息将从您的~/.nwclient文件中的默认条目中获取。
# pqlist -S vbrew_f1 -U guest -n Server: ALES_F1 Print queue name Queue ID ------------------------------------------------------------ TEST AA02009E Q2 EF0200D9 NPI223761_P1 DA03007C Q1 F1060004 I-DATA 0D0A003B NPI223761_P3 D80A0031 |
我们的示例显示了guest用户在ALES_F1文件服务器上可用的打印队列列表。[1]
要查看打印队列上的打印作业,请使用 pqstat 命令。 它将打印队列名称作为参数,并列出该队列中的所有作业。 您可以选择提供另一个参数,指示您要列出队列中的多少个作业。 以下示例输出已进行了一些压缩以适应本书页面的宽度
$ pqstat -S ALES_F1 NPI223761_P1 Server: ALES_F1 Queue: NPI223761_P1 Queue ID: 6A0E000C Seq Name Description Status Form Job ID ------------------------------------------------------------------------ 1 TOTRAN LyX document - proposal.lyx Active 0 02660001 |
我们可以看到队列中只有一个打印作业,其所有者是用户TOTRAN。 其余选项包括作业的描述、其状态和作业标识符。
pqrm 命令用于从指定的打印队列中删除打印作业。 要删除我们刚刚获取其状态的队列中的作业,我们将使用
$ pqrm -S ALES_F1 NPI223761_P1 02660001 |
该命令非常简单明了,但匆忙中使用起来很笨拙。 编写一个基本脚本来简化此操作将是一个有价值的项目。
[1] | 看起来系统管理员在选择其中一些打印队列名称之前一直在品尝 Virtual Brewery 的一些产品。 希望您的打印队列名称更有意义! |