15.8. 打印到 NetWare 打印队列

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
此命令将打印文件/home/matt/ethylene.ps两份到名为PSLASER的打印机,该打印机位于REDS01文件服务器上,并使用从~/.nwclient文件中获得的用户名和密码。

15.8.1. 将 nprint 与线路打印机守护程序一起使用

您会记得我们之前提到 ncpmount–c选项对于打印很有用。 最后,我们将解释原因和方法。

Linux 通常使用 BSD 样式的线路打印机软件。 线路打印机守护程序 (lpd) 是一个守护程序,用于检查本地假脱机目录中是否有要打印的排队作业。 lpd 从特殊格式的假脱机文件中读取打印机名称和其他一些参数,并将数据写入打印机,可以选择通过过滤器传递数据以某种方式转换或操作数据。

lpd 守护程序使用一个名为/etc/printcap的简单数据库来存储打印机配置信息,包括要运行哪些过滤器。 lpd 通常以名为 lp 的特殊系统用户的权限运行。

您可以将 nprint 配置为 lpd 使用的过滤器,这允许您的 Linux 机器的用户直接输出到 NetWare 文件服务器托管的远程打印机。 为此,lp 用户必须能够将 NCP 请求写入到与服务器的 NCP 连接。

一种无需 lp 用户建立自己的连接和登录即可实现此目的的简单方法是将 lp 指定为另一个用户建立的连接的所有者。 如何设置 Linux 打印系统来处理来自 NetWare 客户端的打印作业的完整示例分三个步骤列出

  1. 编写一个包装脚本。

    /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.

  2. 中。 编写/etc/printcap 条目。

    我们需要将我们创建的p2pslaser脚本配置为/etc/printcap 中的输出过滤器。 这看起来像
    pslaser|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:                                                                    

  3. 。将–c选项添加到 ncpmount

    ncpmount -S REDS01 .... -c lp ....

    我们的本地用户 stuart 必须在挂载远程 NetWare 服务器时将 lp 用户指定为连接的所有者。

现在,任何 Linux 用户都可以在调用 lp 时选择将pslaser指定为打印机名称。 打印作业将发送到指定的 NetWare 服务器并假脱机以进行打印。

15.8.2. 管理打印队列

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 的一些产品。 希望您的打印队列名称更有意义!