IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  AIX and UNIX  >

在 AIX 上管理虚拟打印机

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 中级

Adam Cormany, 国家数据中心经理, Scientific Games Corporation

2009 年 8 月 17 日

尽管大多数 IBM® AIX® 管理员知道如何通过 System Management Interface Tool (SMIT) 或常见打印命令设置打印队列和管理打印,但是实现 UNIX® 系统的打印功能远远不止这些。除了在 AIX 上设置或管理虚拟打印机外,如果还需要了解更多内容,那么这篇文章正是为您撰写的。大多数成功的 AIX 和 UNIX 管理员所依靠的正是他们对所管理系统的深入了解。打印只是系统的一个方面,但是非常有必要了解它。

尽管大多数 AIX 管理员知道如何通过 SMIT 或常见打印命令设置打印队列和管理打印,但是在 UNIX 上实现打印功能远远不止这些。本文将带您一览 AIX 的假脱机(spooler)后端程序,比如 piomkpqpiolsvplsvirprtchvirprtrmvirprt

什么是虚拟打印机?

虚拟打印机即一种可以充当打印机驱动程序的软件;然而,虚拟打印机不需要被连接到一台真实的打印机中。如果您对此感到困惑,那么可以将虚拟打印机看作另一种形式的标准输出。如果希望创建 Portable Document Format (PDF) 格式,通常可以打开文本文档并将其保存为 PDF。这使用了一种虚拟打印机的形式 — 即将文本文档打印为某种格式,这种格式可以被保存到文件中并一定程度上防止其他作者修改。您可以使用虚拟打印机从文档中创建图像、传真文档,或将文档发送给一个队列,以针对特定类型的打印机进行格式化。最后一种情况正是本文所讨论的虚拟打印机。





回页首


找不到文件!它们在哪?

在详细研究虚拟打印机命令之前,需要了解本文所讨论的文件的位置。本文提到的大多数命令都未出现在用户的典型 PATH 环境变量中。解决这个小问题有两种简单的方法:

  • 始终将完整路径打印到可执行文件中。
  • 将虚拟打印机命令的路径添加到用户的 PATH 中。

如果命令的使用非常频繁,我建议将其添加到用户的 PATH 中。通常来讲,用户的 PATH 最初来自 AIX 中的 /etc/environment,随后用户用于本地环境变量的 ${HOME}/.profile 将在登录时或 ~/.profile 重新获取来源时进行更新。考虑到打印机管理通常由根用户管理,因此更明智的做法是修改根用户的本地 .profile 文件,而不是影响到所有用户。如果 ~root/.profile 并不存在,那么可以随意创建该文件。

首先,第一次编辑 PATH 变量需要注意一点:在将新的目录添加到 PATH 环境变量时,更聪明的做法是将新目录添加到当前 PATH 值的末端,而不是添加到开始部分。比较有经验的 UNIX 用户可能已经习惯这样做,但是对于新手来说,如果不遵循这种做法,则会导致问题。如果不熟悉 PATH 变量的工作方式,那么下面将稍作解释。当执行一个命令时,shell 必须读取用户的 PATH 环境变量来查找可执行文件。PATH 按照从左到右的顺序读取,并且使用冒号分隔。如果用户的 PATH 被设置为 A:B:C:D,那么 shell 将首先尝试在目录 A 中查找命令。如果未在其中找到,那么 shell 将继续在目录 B 中查找,依此类推。

问题在于:在这个例子中,用户的 PATH 最初被设置为 /usr/bin:/etc:/usr/sbin。如果存在多个命令版本(比如,/usr/bin/foo/usr/local/bin/foo)并且用户仅输入命令而不是完全限定文件名,那么将尝试执行按照 PATH 变量顺序查找到的第一个实例(本例中为 /usr/bin/foo)。现在假设用户希望将 /usr/local/bin 添加到 PATH,以便能够轻松地查找和执行 /usr/local/bin/bar。然而,用户将新目录添加到 PATH 的开始部分(即 PATH=/usr/local/bin:${PATH})。bar 的执行非常顺利,但是用户现在在执行 foo 时得到了异常结果。这是因为现在执行的是 /usr/local/bin/foo 而不是最初的 /usr/bin/foo。要获得正确的结果,应当执行 PATH=${PATH}:/usr/local/bin

对于典型的 AIX 系统,大部分虚拟打印机命令位于 /usr/lib/lpd/pio/etc 和 /usr/sbin 目录中,如 清单 1 所示。因此,可以将 PATH 更新为 PATH=${PATH}:/usr/sbin:/usr/lib/lpd/pio/etc


清单 1. 虚拟打印机队列命令的位置
				
# find /usr \( -name piomkpq -o -name piolsvp -o -name lsvirprt -o -name chvirprt -o
 -name rmvirprt \) -ls

187195   36 -r-xr-s---  1 root    printq    34894 Sep 16  2002 /usr/sbin/chvirprt
187491   48 -r-xr-xr-x  1 root    printq    47474 Sep 16  2002 /usr/sbin/lsvirprt
187763   44 -r-xr-s---  1 root    printq    41474 Sep 16  2002 /usr/sbin/rmvirprt
98653   40 -r-xr-xr-x  1 bin     bin       40522 May 26  2006 /usr/lib/lpd/pio/etc/piolsvp
98706   36 -r-sr-x---  1 root    printq    32782 Sep 16  2002 /usr/lib/lpd/pio/etc/piomkpq





回页首


创建一个虚拟打印机队列

通过命令行在 AIX 中创建打印队列是一件非常简单的事。通过使用 piomkpq 命令,可以快速创建新的打印队列并将一个打印机添加到现有队列中。

表 1 提供了一些在执行 piomkpq 时可以使用的 switch 语句,要获得完整的 switch 列表,请参考 man piomkpq


表 1. piomkpq 中的 switch
Switch描述
-A <attachment>打印机如何连接到队列中?有效连接类型为:
  • local:打印机被连接到本地主机。
  • remote:打印机被连接到远程主机。
  • xstation:打印机被连接到 Xstation。
  • ascii:打印机被连接到 American Standard Code for Information Interchange (ASCII) 终端。
  • hpJetDirect:打印机为网络打印机。
  • file:打印机是 /dev 上的一个文件。
  • ibmNetPrinter:打印机是 IBM 网络打印机。
  • ibmNetColor:打印机是 IBM 网络彩色打印机。
  • other:打印机由用户定义。
-D <data stream>这个打印队列的数据流类型是什么?有效的数据流包括 ascchtepsglkjipclprops
-Q <queue name>在已存在的情况下使用打印队列 <queue name>
注意:您不能同时使用-Q-q switch,因为使用现有队列和创建新队列不能同时进行。
-a <attribute=value>应当对此队列设置哪些属性?可用的属性包括 interfaceptopauthconfigspeedparitybpcstopsxondtrtbc
-d<device>设备的名称是什么(比如 lp0、tty2、fileA)?
-p <printer type>打印机的类型是什么?可以在 /usr/lib/lpd/pio/predef 下找到 AIX 中的有效打印机列表。
-q <queue name>创建一个新队列并将其命名为 <queue name>
注意:不能同时使用 -Q -q,因为使用现有队列和创建新队列不能同时进行。
-w <port>队列应当使用什么端口?
-s <type>w打印机是否通过 parallel、rs232 或 rs422 连接?

通常,用户指定 localasciifile 作为连接类型。如果您的 AIX 系统有其他的连接类型,那么可以在 /usr/lib/lpd/pio/etc 中查找连接类型配置文件(使用 .attach 扩展名),如 清单 2 所示。


清单 2. 连接类型配置文件的位置
				
# ls -l /usr/lib/lpd/pio/etc/*.attach
-r--r--r--  1 root   printq    1150 Sep 13 2002  /usr/lib/lpd/pio/etc/ascii.attach
-r--r--r--  1 root   printq    1144 Sep 13 2002  /usr/lib/lpd/pio/etc/file.attach
-r--r--r--  1 root   printq    1182 Jan 17 2003  /usr/lib/lpd/pio/etc/hpJetDirect.attach
-r--r--r--  1 root   printq    1209 Jan 17 2003  /usr/lib/lpd/pio/etc/ibmNetColor.attach
-r--r--r--  1 root   printq    1203 Jan 17 2003  /usr/lib/lpd/pio/etc/ibmNetPrinter.attach
-r--r--r--  1 root   printq    1188 Sep 13 2002  /usr/lib/lpd/pio/etc/local.attach
-r--r--r--  1 root   printq    1094 Sep 13 2002  /usr/lib/lpd/pio/etc/remote.attach
-r--r--r--  1 root   printq    1201 Sep 13 2002  /usr/lib/lpd/pio/etc/xstation.attach

清单 3 展示了 AIX 中的配置文件。


清单 3. AIX 中的示例配置文件
				
# grep -vE "^#|^[[:space:]]*$"  /usr/lib/lpd/pio/etc/ascii.attach
        # ASCII attachment
        description     =       piobe.cat,4,20;Printer Attached to ASCII Terminal
        add_queue       =       ps_makprt_prt
        add_printer     =       ps_makprt_prt
        seq_num         =       4
        submit_job      =       ps_qprt_fileName
        change_queue    =       ps_chpq_attachName
        change_filters  =       ps_pqfilters_ghostName
        remove_queue    =       ps_rmpq_ghostName_other

现在您已经连了解了基本命令,让我们创建一个新打印队列:

# piomkpq –A local –p ibm6252 –d lp0 –D asc –q ATC_QUEUE
Added print queue 'ATC_QUEUE'.

现在,使用 ASCII 数据流为现有的 IBM 6252(名为 lp0)打印机创建一个名为 ATC_QUEUE 的新本地打印队列:

# piomkpq –A local –p ibm6252 –D asc  -Q ATC_QUEUE –d lp1
Added printer 'lp1' to print queue 'ATC_QUEUE'.

观察到第一个和第二个 piomkpq 示例之间的差别了吗?虽然很细微,但是十分重要。第一个示例使用 -q switch 创建了一个新的打印队列。在第二个示例中,使用了 -Q 并告诉 piomkpq 使用现有的名为 ATC_QUEUE 的队列。如果刚刚接触 UNIX 或 Linux®,那么这个例子很好地演示了大小写对执行命令的重要性。仅仅将 q 修改为大写 Q 就会完全改变这个命令,如前面的例子所示。

要确认打印队列和适当的设备已被添加,需要查看 /etc/qconfig,如 清单 4 所示。打印机配置文件应当按照 lpstat 中的显示顺序在文件末端列出队列,因为它们是通过 piomkpq 在最后添加的,并且没有手动添加到 /etc/qconfig。


清单 4. /etc/qconfig 片段
				
ATC_QUEUE:
        device = lp0,lp1
lp0:
        file = /dev/lp0
        header = never
        trailer = never
        access = both
        backend = /usr/lib/lpd/piobe
lp1:
        file = /dev/lp1
        header = never
        trailer = never
        access = both
        backend = /usr/lib/lpd/piobe





回页首


列出打印机

现在,您已经创建了一个打印队列或将一个打印机添加到现有队列中,最好能够确认队列已被创建并看看您的 AIX 系统中是否存在其他队列。在 AIX 中列出虚拟打印机甚至比创建它们更加简单。通过使用 piolsvp 命令,您可以查看现有打印队列或可用的连接类型。

表 2 提供了在执行 piolsvp 时可用的 switch。有关完整的 switch 列表,请参考 man piolsvp


表 2. piolsvp 的 Switch
Switch描述
-A显示所有可用的连接类型。
-P <queue name>选择 <queue name> 以执行其他 switch。对 piolsvp 仅使用 –P 不会显示任何信息。
-d显示队列设备。
-n <field>显示配置文件中的 <field> 的连接名称和值。可用于查询的属性字段包括 submit_jobadd_queueadd_printerremove_queueprinter_connchange_queuechange_filters
-p展示所有队列、它们的描述和位置。
-q展示所有的队列和描述。
-v展示所有虚拟打印机。

在讨论 piomkpq 时,我提到您可以手动查看连接类型配置文件,因为这些文件属于 ASCII 文本。如果并不关心所有设置,仅仅希望得到一个快速清单,那么可以使用 piolsvp 命令,如 清单 5 所示。


清单 5. 查看连接类型
				
# piolsvp –A
# ATTACHMENT TYPE      DESCRIPTION
  local                Printer Attached to Local Host
  remote               Printer Attached to Remote Host
  xstation             Printer Attached to Xstation
  ascii                Printer Attached to ASCII Terminal
  hpJetDirect          Network Printer (HP JetDirect)
  file                 File (in /dev directory)
  ibmNetPrinter        IBM Network Printer
  ibmNetColor          IBM Network Color Printer
  other                User Defined Backend

下面的示例演示了如何显示一个特定打印队列 — 在本例中,打印队列 ATC_HPLJ5

# piolsvp -P ATC_HPLJ5 -d

# PRINTER		DESCRIPTION
  hp@ATC_HPLJ5   	hplj-5si (PCL)

清单 6 展示了如何快速浏览所有已定义的打印队列、它们的位置和描述。


清单 6. 显示所有打印队列
				
# piolsvp -p

# PRINT QUEUE          PRINTER              DESCRIPTION
  PAC06_ps             hp@PAC06             generic (PostScript)
  PAC06_pcl            hp@PAC06             generic (PCL Emulation)
  ATC08_pcl            hp@ATC08             generic (PCL Emulation)
  AMDC79_ps            hp@AMDC79            hplj-4000 (PostScript)
  LAB125_pcl           hp@LAB125            hplj-4000 (PCL)
  LAB125_ps            hp@LAB125            hplj-4000 (PostScript)
  ATC_HPLJ5pcl         hp@ATC_HPLJ5         hplj-5si (PCL)
  ATC_HPLJ5PS          hp@ATC_HPLJ5         hplj-5si (PostScript)
  ATC_QUEUE            lp0                  IBM 6252 Impactwriter
                       lp1                  IBM 6252 Impactwriter

下面的示例查询针对名为 add_queue 的字段查询队列 AMDC79_ps 的连接配置。由于队列使用的连接类型为 hpJetDirect,因此将搜索文件 /usr/lib/lpd/pio/etc/hpJetDirect.attach。

# piolsvp -P qaljlab1_pcl -nadd_queue

hp@AMDC79_ps          hpJetDirect          ps_makhp_prt

为了保持简单,以上查询实际上被格式化为下面的 grep 语句:

# grep "add_queue"  /usr/lib/lpd/pio/etc/hpJetDirect.attach

add_queue       =       ps_makhp_prt

lpstat 命令对于大部分 UNIX 用户来说十分熟悉。它是大部分 UNIX 和 Linux 系统上的标准命令,可以显示一个打印机或若干打印机的状态,如 清单 7 所示。


清单 7. 使用 lpstat 查看打印队列
				
# lpstat -W

Queue           Dev            Status       Job Files         User    PP   %  Blks  Cp Rnk
--------------- -------------- -----------  ----------------- ------- ---- -- ----- -- ---
PAC06_ps        hp@PAC06       READY
PAC06_pcl       hp@PAC06       READY
ATC08_pcl       hp@ATC08       READY
AMDC79_ps       hp@AMDC79      READY
LAB125_pcl      hp@LAB125      READY
LAB125_ps       hp@LAB125      READY
ATC_HPLJ5pcl    hp@ATC_HPLJ5   READY
ATC_HPLJ5PS     hp@ATC_HPLJ5   READY
ATC_QUEUE       lp0            READY
ATC_QUEUE       lp1            READY

可以查看在 /var/spool/lpd/pio/@local/custom 创建的打印队列的实际配置文件:

# ls -l /var/spool/lpd/pio/@local/custom/ATC_QUEUE:lp[[:digit:]]*

-rw-rw-r-- 1 root  printq 7019 Apr 28 10:29 /var/spool/lpd/pio/@local/custom/ATC_QUEUE:lp0
-rw-rw-r-- 1 root  printq 7019 Apr 28 10:31 /var/spool/lpd/pio/@local/custom/ATC_QUEUE:lp1

配置文件为可读的 ASCII 文本。所谓可读,就是指它采用纯文本的形式,尽管这对于 UNIX 新手来说没有太大意义。例如,清单 8 展示了共 250 行的 ATC_QUEUE:lp0 中的前 20 行。


清单 8. 查看打印队列配置文件
				
# head -20 /var/spool/lpd/pio/@local/custom/ATC_QUEUE:lp0

:056:__FLG::
:625:CB:S[B]DyEn:
:626:CC:S[C]DyEn:
:627:CD:S[D]DyEn:
:629:CF:S[F]DyEn:
:630:CG:S[G]DyEn:
:622:Ca:DyS[G500]I[1810532]EnR[pioattr1.cat,1,631;(diag1) - do not print job; display 
main pipeline and pre-processing filter,(diag2) - do not print job; display all pipelines 
and filters,(display) - print job; display all pipelines and filters,(ignore) - print job;
ignore stderr produced by filters,(normal) - print job; exit if filters produce stderr=
-a1,-a0\x27 \x27-A3,-a0\x27 \x27-A2,-a0\x27 \x27-A0,-a0\x27 \x27-A1]:%?%G_a%t-a%I_a%e-a%
I_a\x27 \x27-A%I_A%;
:013:_A:DnEnR[0,1,2,3]:1
:789:_E:S[B020]I[1810501]%IWY:!
:621:_H:S[F350]I[1810503]Dy:
:791:_J:S[C950]I[1810533]%IWY:+
:792:_K:S[B030]I[1810550]%IWY:!
:793:_L:S[D020]I[1810504]%IWY:+
:036:_O:Dn:2
:794:_W:S[B025]I[1810506]%IWY:!
:795:_X:S[D030]I[1810507]EtL[/usr/bin/ls -1 /usr/lib/lpd/pio/trans1 | /usr/bin/sed '/^850
$/d']V[%`WX]:ISO8859-1
:614:_Z:S[D035]I[1810534]%IWY:+
:063:_a:DnEnR[0,1]:0
:635:_b:S[D010]I[1810508]E#G[0..%?%G_l%{0}%=%t%e%G_l%G_t%-%{1}%-%d%;]:0
:658:_d:S[C925]I[1810509]EnL[%IW2]F1:a





回页首


查看虚拟打印机属性

现在,我们创建了虚拟打印机,来看一下它的属性。要查看虚拟打印机的属性,需要使用 lsvirprt 命令。

表 3 提供了可以在执行 lsvirprt 时使用的 switch。有关完整的 switch 列表,请参考 man lsvirprt


表 3. lsvirprt 的 switch
Switch描述
-a <attribute>仅显示 <attribute>。这非常有必要,因为虚拟打印机的属性列表非常大。
-d <device>查询队列的名为 <device> 的设备。
-q <queue>查询打印机的名为 <queue> 的队列。

清单 9 使用 lsvirprt 列出本文前面创建的虚拟打印机的所有属性。


清单 9. 列出虚拟打印机属性
				
# lsvirprt -q ATC_QUEUE -d lp0 | more

Name    Description                                          Value
__FLG   VALUES THAT MAY BE OVERRIDDEN WITH FLAGS ON THE
          COMMAND LINE
CB      -------------- Text Print Options -------------
CC
----------- Job Processing Options ------------
CD
----------- Text Formatting Options -----------
CF
--------- Header/Trailer Page Options ---------
CG
------------- Messages/Diagnostics ------------
Ca      DIAGNOSTIC LEVEL                                     %?%G_a%t-a%I_a%e-a
                                                             %I_a\x27 \x27-A%I_
                                                             A%;
_A      stderr returned? 0: no;  1: yes, & pipelines;  2:    1
          yes, & values, pipelines
_E      DOUBLE-HIGH print?                                   !
_H      HOSTNAME for "PRINTED AT:" on HEADER PAGE
_J      RESTORE printer?                                     +
_K      CONDENSED print?                                     !
_L      WRAP long lines?                                     +
_O      Type of Input Paper Handling (1: manual, 2:          2
          pinwheel, 3: sheetfeed)
_W      DOUBLE-WIDE print?                                   !
_X      CODE PAGE of print file                              ISO8859-1
_Z      Send FORM FEED after each file?                      +
_a      0: Normal Print;  1: Return Flag Values &            0
          Pipeline, But Don't Print
_b      BOTTOM MARGIN (lines)                                0
_d      Print file TYPE                                      a
_e      EMPHASIZED print?                                    !
_f      Pre-processing FILTER NAME
_g      PAGE NUMBER where printing should begin              1
_h      TITLE STRING for 'pr' filter
_i      Number of columns to INDENT                          0
_j      INITIALIZE printer?                                  +
_l      LINES per page                                       66

注意,我将输出传递给 more。因此可以查看虚拟打印机的所有属性。仅这台虚拟打印机就拥有大约 500 行属性。

如果知道要查看哪个字段,可以将属性名附加到 -a switch 中。本例中将查看每个页面中的行或 _l(小写 L):

# lsvirprt -q ATC_QUEUE -d lp0 -a _l

Name    Description                                          Value
_l      LINES per page                                       66





回页首


修改虚拟打印机属性

目前为止已经创建了一个虚拟打印机并查看了属性。现在修改其中一个虚拟打印机。chvirprt 命令允许您将一个已知属性修改为一个合适的值。

表 4 提供了在执行 chvirprt 时可以使用的 switch。有关完整的 switch 列表,请参考 man chvirprt


表 4. chvirprt 的 switch
Switch描述
-a <attribute=value><attribute> 修改为拥有值 <value>
-d <device>查询队列中名为 <device> 的设备。
-q <queue>查询打印机中名为 <queue> 的队列。

阅读了前面有关 lsvirprt 的小节后,现在您已经了解了如何查看每个页面中的值。要在此基础上进行扩展,请执行下面的步骤,将值从 66 修改为 50:

  1. 首先,查看属性值,从而知道在需要时应当如何执行恢复:

    # lsvirprt -q ATC_QUEUE -d lp0 -a _l
    
    Name    Description                                          Value
    _l      LINES per page                                       66

    注意:应当始终对初始值和新值进行归档,以防需要恢复到初始值。

  2. 将每个页面的行数从 66 修改为 50:

    # chvirprt -q ATC_QUEUE -d lp0 -a _l=50

  3. 检验修改是否成功:

    #  lsvirprt -q ATC_QUEUE -d lp0 -a _l
    
    Name    Description                                          Value
    _l      LINES per page                                       50

可以看到,针对每页面的行数进行了修改。

如果完成修改后,使用打印机的组管理者希望将值修改为 60,并且希望将水平和垂直选项卡的最大数量修改为 62,这时该怎么办?幸运的是,可以同时完成这两项修改,只需执行以下步骤:

  1. 首先,再次查看属性值,了解在需要时应当恢复为什么值,如 清单 10 所示。



    清单 10. 列出多个虚拟打印机属性
    						
    # lsvirprt -q ATC_QUEUE -d lp0 -a _l -a mx -a my
    
    Name    Description                                          Value
    _l      LINES per page                                       50
    mx      Maximum Number of Horizontal Tabs That Can Be        64
              Defined
    my      Maximum Number of Vertical Tabs That Can Be          64
              Defined

  2. 将属性修改为理想值:

    # chvirprt -q ATC_QUEUE -d lp0 -a _l=60 mx=62 my=62

  3. 查看修改是否成功,如 清单 11 所示。



    清单 11. 列出多个虚拟打印机属性
    						
    # lsvirprt -q ATC_QUEUE -d lp0 -a _l -a mx -a my
    
    Name    Description                                          Value
    _l      LINES per page                                       60
    mx      Maximum Number of Horizontal Tabs That Can Be        62
              Defined
    my      Maximum Number of Vertical Tabs That Can Be          62
              Defined

可能是我有一些多疑,总觉得会同时修改队列中的所有设备,或者不小心修改为一个错误的值。但是,多进行一些检查始终是一种好的做法。在 清单 11 中,注意只有设备 lp0 得到了修改,而 lp1 保持初始值,如 清单 12 所示。


清单 12. 列出多个虚拟打印机属性
				
# lsvirprt -q ATC_QUEUE -d lp1 -a _l -a mx -a my

Name    Description                                          Value
_l      LINES per page                                       66
mx      Maximum Number of Horizontal Tabs That Can Be        64
          Defined
my      Maximum Number of Vertical Tabs That Can Be          64
          Defined





回页首


删除虚拟打印机

不管您是出于什么原因要删除队列:输入了错误的队列名、不再需要使用打印队列,或者仅仅是想知道如何删除队列,在 AIX 中删除虚拟打印队列十分简单。IBM 提供了 rmvirprt 命令来满足管理人员的好奇心。

要删除本文前面创建的两个虚拟打印机,只需执行下面的命令:

# rmvirprt -q ATC_QUEUE -d lp1
# rmvirprt -q ATC_QUEUE -d lp0

通过执行 rmvirprt,您就可以删除指定给打印队列的虚拟打印机。打印队列仍然存在,但是在再次查看打印机时,描述已经被删除,如 清单 13 所示。这是因为虚拟打印机配置文件已经通过 rmvirprt 被删除。


清单 13. 显示所有打印队列
				
# piolsvp -p

# PRINT QUEUE          PRINTER              DESCRIPTION
  PAC06_ps             hp@PAC06             generic (PostScript)
  PAC06_pcl            hp@PAC06             generic (PCL Emulation)
  ATC08_pcl            hp@ATC08             generic (PCL Emulation)
  AMDC79_ps            hp@AMDC79            hplj-4000 (PostScript)
  LAB125_pcl           hp@LAB125            hplj-4000 (PCL)
  LAB125_ps            hp@LAB125            hplj-4000 (PostScript)
  ATC_HPLJ5pcl         hp@ATC_HPLJ5         hplj-5si (PCL)
  ATC_HPLJ5PS          hp@ATC_HPLJ5         hplj-5si (PostScript)
  ATC_QUEUE            lp0                  
                       lp1

除了删除打印机队列描述外,注意实际的虚拟打印机也被从 /var/spool/lpd/pio/@local/custom spool 目录中删除:

# ls -l /var/spool/lpd/pio/@local/custom/ATC_QUEUE:lp[[:digit:]]*

ls: 0653-341 The file /var/spool/lpd/pio/@local/custom/ATC_QUEUE:lp[[:digit:]]* does not 
exist.

要在删除虚拟打印机后删除一个打印队列,遵循以下步骤:

  1. 查看涉及到的打印机队列:

    # lsque -q ATC_QUEUE
    ATC_QUEUE:
            device = lp0,lp1

  2. 删除打印机队列设备:

    # rmquedev -d lp1 -q ATC_QUEUE
    # rmquedev -d lp0 -q ATC_QUEUE

  3. 检查打印机队列设备是否被删除:

    # lsque -q ATC_QUEUE
    ATC_QUEUE:	

  4. 从打印队列中删除所有设备之后,删除实际的队列:

    # rmque -q ATC_QUEUE

要检查虚拟打印机、打印机设备和打印队列确实被删除,执行以下步骤:

  1. 通过 lsque 确认打印机队列确实被删除。
    # lsque -q ATC_QUEUE
    lsque: (FATAL ERROR): 0781-193 Queue ATC_QUEUE: not found in qconfig file. Not 
    printed.

  2. 通过 piolsvp 确认打印机队列和设备确实被删除,如 清单 14 所示。

    清单 14. 显示所有打印队列
    						
    # piolsvp -p
    # PRINT QUEUE          PRINTER              DESCRIPTION
      PAC06_ps             hp@PAC06             generic (PostScript)
      PAC06_pcl            hp@PAC06             generic (PCL Emulation)
      ATC08_pcl            hp@ATC08             generic (PCL Emulation)
      AMDC79_ps            hp@AMDC79            hplj-4000 (PostScript)
      LAB125_pcl           hp@LAB125            hplj-4000 (PCL)
      LAB125_ps            hp@LAB125            hplj-4000 (PostScript)
      ATC_HPLJ5pcl         hp@ATC_HPLJ5         hplj-5si (PCL)
      ATC_HPLJ5PS          hp@ATC_HPLJ5         hplj-5si (PostScript)

  3. 最后,通过 lpstat 确认打印机队列确实被删除,如 清单 15 所示。

    清单 15. 使用 lpstat 确认打印机队列确实被删除
    						
    # lpstat -W
    Queue          Dev            Status   Job    Files   User       PP   %  Blks  Cp Rnk
    -------------- -------------- -------- ------ ------- ---------- ---- -- ----- -- ---
    PAC06_ps       hp@PAC06       READY
    PAC06_pcl      hp@PAC06       READY
    ATC08_pcl      hp@ATC08       READY
    AMDC79_ps      hp@AMDC79      READY
    LAB125_pcl     hp@LAB125      READY
    LAB125_ps      hp@LAB125      READY
    ATC_HPLJ5pcl   hp@ATC_HPLJ5   READY
    ATC_HPLJ5PS    hp@ATC_HPLJ5   READY





回页首


结束语

阅读完本文后,您应该更深入地解了到 AIX 中的虚拟打印机概念、如何创建它们、如何修改或管理它们的设备和队列。了解更多有关打印机和在系统中设置队列的知识非常重要。很多人并没有意识到可以轻松修改大量队列设置。通过根据需求修改打印机能够为用户提供便利。祝您好运!



参考资料

学习
  • 参考 IBM 的 Systems Information Center 页面,了解 虚拟打印机属性

  • 参考 IBM 的 Commands Reference 页面,了解有关以下内容的更多信息:
  • 要了解有关 /etc/qconfig 的更多信息,请参考 IBM 的文件参考资料。

  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。

  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。

  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。

  • developerWorks 技术活动网络广播:随时关注 developerWorks 技术活动和网络广播。

  • 浏览 技术书店,阅读有关这些主题和其他技术主题的图书。


获得产品和技术

讨论


关于作者

Adam Cormany 目前是国家数据中心的经理,同时还一直担任 Scientific Games 公司的 UNIX 系统工程师、UNIX 管理员和运营经理。Adam 潜心从事 AIX 以及 Solaris 和 Red Hat Linux 管理已有 10 多年。他是一位 pSeries AIX 系统管理方面的 IBM eServer 认证专家。除管理外,Adam 还在 BASH、CSH 和 KSH 的 Shell 脚本编写以及 C、PHP 和 Perl 编程方面具有渊博的知识。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款