系统管理指南:打印

第 8 章 管理 LP 打印调度程序和打印请求(任务)

本章包括其他打印任务,系统管理员可能需要使用 LP 打印服务命令在每日、每周或不定期执行这些任务。

有关概述信息,请参见第 1 章

管理 LP 打印调度程序(任务图)

任务 

说明 

参考 

检查打印机的状态。 

使用 lpstat 命令可以检查所有打印机或特定打印机的状态。使用此命令可以确定哪些打印机可用,并可以检查这些打印机的特征。

如何检查打印机的状态

停止打印调度程序。 

如果打印调度程序停止接受打印请求,则您可能需要先停止再重新启动打印调度程序。 

如何停止打印调度程序

重新启动打印调度程序。 

停止打印调度程序后,您将需要重新启动打印调度程序,以便打印机可以开始接受请求。 

如何重新启动打印调度程序

使用选项启动打印调度程序。 

借助 Solaris 管理工具 (Solaris Management Facility, SMF) 将选项传递给打印调度程序有两种方法。您可以设置用于调用期间的选项,也可以设置系统引导后保留的选项。 

如何设置仅用于调用期间的打印选项值

如何设置在系统重新引导过程中保留的打印机选项值

检查打印机状态

许多日常的打印机管理任务都需要有关 LP 打印服务或特定打印机的状态信息。例如,您可以确定哪些打印机可用。您还可以检查这些打印机的特征。您可以使用 lpstat 命令查找有关 LP 打印服务或特定打印机的状态信息。

如果使用了 PPD 文件创建或修改打印队列,则在 lpstat 输出中将列出特定的 PPD 文件。如果在创建打印队列时未指定 PPD 文件,则 lpstat 输出中的 PPD 项是 none

Procedure如何检查打印机的状态

  1. 登录到网络上的任何系统。

  2. 检查打印机的状态。

    此处仅显示最常用的选项。有关其他选项,请参见 lpstat(1) 手册页。


    $ lpstat [-d] [-p] printer-name [-D] [-l] [-t]
    -d

    显示系统的缺省打印机。

    -p printer-name

    显示打印机处于活动状态还是空闲状态、启用或禁用打印机的时间以及打印机是否正在接受打印请求。

    您可以使用此命令指定多个打印机名称。使用空格或逗号来分隔打印机名称。如果您使用空格,请用引号将打印机名称列表引起来。如果不指定 printer-name,则会显示所有打印机的状态。

    -D

    显示指定 printer-name 的说明。

    -l

    显示指定 printer-name 的特征。

    -t

    显示有关 LP 打印服务的状态信息,包括所有打印机的状态,如它们是否处于活动状态以及是否正在接受打印请求。


示例 8–1 检查打印机的状态

以下示例说明如何显示系统的缺省打印机。


$ lpstat -d
system default destination: luna

以下示例说明如何显示打印机 luna 的状态。


$ lpstat -p luna
printer luna is idle. enabled since Jul 12 11:17 2001. available.

以下示例说明如何显示打印机 asteroidluna 的说明。


$ lpstat -p "asteroid luna" -D
printer asteroid faulted. enabled since Jan 5 11:35 2004. available.
unable to print: paper misfeed jam

Description: Printer by break room
printer luna is idle. enabled since Jan 5 11:36 2004. available.
Description: Printer by server room.

以下示例说明如何显示打印机 luna 的特征。


$ lpstat -p luna -l
printer luna is idle. enabled since Thu Jul 12 15:02:32 PM PDT
        Form mounted: 
        Content types: postscript
        Printer types: PS
        Description:
        Connection: direct
        Interface: /usr/lib/lp/model/standard
				PPD: none
        After fault: continue
        Users allowed:
                (all)
        Forms allowed:
                (none)
        Banner not required
        Character sets:
							 (none)
				Default pitch:
        Default page size: 80 wide 66 long
        Default port settings:

停止和重新启动打印调度程序

打印调度程序 lpsched 处理打印服务器上的打印请求。但是,打印调度程序有时可能会在系统上停止运行,从而停止接受或打印打印请求。将本地打印机添加到系统时,lpadmin 命令自动启用 lpsched 服务;删除最后一台本地打印机时,该命令将禁用此服务。以下过程描述如何停止和重新启动打印调度程序。如果打印调度程序停止运行时正在对打印请求进行打印,则重新启动打印调度程序时将完整打印该打印请求。

Procedure如何停止打印调度程序

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 确定打印调度程序是否正在运行。


    # svcs application/print/server
    

    您还可以使用 lpstat -r 命令确定打印调度程序是否正在运行。

    如果打印调度程序未运行,则显示消息 scheduler is not running

  3. 如果打印调度程序正在运行,请将其停止。


    # svcadm disable application/print/server
    

    您还可以使用 lpshut 命令停止打印调度程序。

Procedure如何重新启动打印调度程序

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 确定打印调度程序是否正在运行。


    # svcs application/print/server
    

    您还可以使用 lpstat -r 命令确定打印调度程序是否正在运行。

    如果打印调度程序未运行,则显示消息 scheduler is not running

  3. 如果打印调度程序未运行,请将其启动。


    # svcadm enable application/print/server
    

    您还可以使用 /usr/lib/lpsched 命令启动打印调度程序。有关使用 /usr/lib/lpsched 命令与使用 svcadm enable application/print/server 命令启动打印调度程序之间差异的更多信息,请参见使用选项启动打印调度程序

使用选项启动打印调度程序

借助 SMF 将选项传递给打印调度程序有两种方法:

Procedure如何设置仅用于调用期间的打印选项值

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 设置选项值。


    # /usr/lib/lpsched option value
    
    -f num_filters

    指定可以在打印服务器上运行的并发慢速过滤器数。

    -n num_notifiers

    指定可以在打印服务器上运行的并发通知进程数。

    -p fd_limit

    指定 lpsched 进程的文件描述符资源限制。

    -r reserved_fds

    指定调度程序为重负载下的内部通信保留的文件描述符数。


示例 8–2 设置仅用于调用期间的选项值

此示例说明如何将过滤器数设置为 2。其余选项将使用打印调度程序中的缺省值。


# /usr/lib/lpsched -f 2

要使用打印调度程序中的缺省选项,请运行不带任何选项的 /usr/lib/lpsched 命令。

请注意,使用 /usr/lib/lpsched 命令启动打印调度程序时,不会使用通过 svccfg 命令设置的值。


Procedure如何设置在系统重新引导过程中保留的打印机选项值

  1. 成为超级用户 lp 或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 设置一个或所有选项。


    # svccfg
    svc:> select svc:/application/print/server
    svc:/application/print/server> setprop property = value
    .
    .
    .
    svc:/application/print/server> quit
    

    对于要设置的每个选项,请在单独的行上重复 setprop property = value 命令。

  3. 通过显示打印服务器属性的当前值,验证是否已正确设置了选项。


    # svcprop svc:/application/print/server
    
  4. 重新启动打印调度程序。

    • 如果打印调度程序未运行,请使用以下命令:


      # svcadm refresh svc:/application/print/server
      # svcadm enable svc:/application/print/server
      
    • 如果打印调度程序正在运行,请使用以下命令:


      # svcadm refresh svc:/application/print/server
      # svcadm restart svc:/application/print/server
      

    要确定打印调度程序是否正在运行,请运行 svcs application/print/server 命令。


示例 8–3 设置在系统重新引导过程中保留的打印机选项值

此示例说明如何将过滤器数设置为 1。在系统重新引导过程中或者重新启动打印调度程序时,此选项将保留其设置。


# svccfg
svc:> select svc:/application/print/server
svc:/application/print/server> setprop lpsched/num_filters = count: 1
svc:/application/print/server> quit

此示例说明如何设置所有选项。


# svccfg
svc:> select svc:/application/print/server
svc:/application/print/server> setprop lpsched/num_filters = count: 1
svc:/application/print/server> setprop lpsched/num_notifiers = count: 1
svc:/application/print/server> setprop lpsched/fd_limit = count: 4096
svc:/application/print/server> setprop lpsched/reserved_fds = count: 2
svc:/application/print/server> quit

以下是设置所有选项的样例脚本。


#!/bin/ksh

svccfg <<-EOF
select svc:/application/print/server
setprop lpsched/num_filters = count: 1
setprop lpsched/num_notifiers = count: 1
setprop lpsched/fd_limit = count: 4096
setprop lpsched/reserved_fds = count: 2

EOF

使用 LP 打印命令管理打印请求(任务图)

任务 

说明 

参考 

检查打印请求的状态。 

使用 lpstat 命令检查打印请求的状态。

如何检查打印请求的状态

启用或禁用打印机。 

使用 enabledisable 命令可以控制打印机对打印队列中的请求进行打印还是停止打印。

如何启用或禁用打印机

接受或拒绝打印机的打印请求。 

使用 acceptreject 命令可以打开或关闭存储要打印的请求的打印队列。

如何接受或拒绝打印机的打印请求

取消打印请求。 

使用 cancel 命令取消打印请求。

如何取消打印请求

取消特定用户的打印请求。 

取消特定用户的打印请求。 

如何取消特定用户的打印请求

将打印请求移动到其他打印机。 

移动或取消当前在打印机中排队的任何打印请求。 

如何将打印请求移动到其他打印机

更改打印请求的优先级。 

采用以下方式之一更改打印请求的优先级:

  • 如果打印请求尚未完成打印,则将其挂起。

  • 将打印请求移动到队列开头。

  • 更改仍在等待打印的作业的优先级。

如何更改打印请求的优先级

当用户从打印客户机提交打印请求时,打印请求将先添加到打印服务器上的队列中,然后发送到打印机。当打印请求在队列中时,您可以从客户机系统取消该打印请求或获取有关它的状态信息。您必须登录到打印服务器,才能使用 LP 打印服务命令移动、挂起、恢复打印请求或更改打印请求的优先级。这些操作有助于保持打印服务顺利进行。

下表列出了用于通过 lp -H 命令更改打印请求优先级的值。

表 8–1 用于更改打印请求优先级的值

-H change-priority 的值

说明 

hold

将打印请求挂起,直到您取消该请求或指示 LP 打印服务恢复打印该请求。 

resume

将已挂起的打印请求放回队列。该请求将根据其优先级和在队列中的位置进行打印。如果挂起已经在打印的打印作业,则 resume 会将打印请求放在队列开头,以便它成为打印的下一个请求。

immediate

将打印请求放在队列开头。如果请求已经在打印,则您可以挂起该请求,以允许立即打印下一个请求。 

Procedure如何检查打印请求的状态

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 检查打印机和打印请求的状态。

    此处仅显示最常用的选项。有关其他有效选项,请参见 lpstat(1) 手册页。


    $ lpstat -o [list] | -u [user-list]
    -o list

    显示特定打印机上打印请求的状态。list 可以是一个或多个打印机名称、打印机类名或打印请求 ID。

    要为 list 指定多个打印机名称、类名和 ID,请使用空格或逗号分隔各值。如果使用空格,请用引号将值列表引起来。

    如果不指定 list,则将显示发送到所有打印机的打印请求的状态。

    -u user-list

    显示特定用户的打印请求的状态。user-list 可以是一个或多个用户名。

    要使用此命令指定多个用户,请使用空格或逗号分隔用户名。如果使用空格,请用引号将名称列表引起来。

    如果不指定 user-list,则将显示所有用户的打印请求的状态。

    使用 lpstat 命令检查打印请求的状态时,该命令会为每个打印请求显示一行。

    该行从左至右显示以下信息:

    • 请求 ID

    • 用户

    • 输出大小(字节)

    • 请求的日期和时间,

    • 有关请求的信息,如“正在过滤”


示例 8–4 检查打印请求的状态

以下示例说明用户 fred 具有一个在打印机 luna 上排队的打印请求。


$ lpstat
luna-1    fred     1261    Jul 12 17:34

以下示例说明用户 paul 当前在队列中没有打印请求。


$ lpstat -u paul

以下示例说明两个打印请求在打印机 moon 上排队。


$ lpstat -o moon
moon-78    root     1024   Jul 14 09:07
moon-79    root     1024   Jul 14 09:08

启用或禁用打印机的打印操作

enabledisable 命令控制打印机打印还是停止打印打印队列中的请求。当您禁用打印机时,打印机将停止打印队列中的请求。但是,请求仍被添加到队列中。若不希望将请求添加到队列中,则必须将打印机设置为拒绝打印请求。有关拒绝打印请求的信息,请参见接受或拒绝打印请求

使用 Solaris Print Manager 添加打印机后,将启用该打印机以执行打印任务并接受打印请求。Solaris Print Manager 不提供任何其他有关打印机处理的管理功能。

只要打印机被禁用(打印机出现故障时可能会出现此情况),您就必须启用打印机。启用打印机时,它将打印来自打印队列的请求,直到队列为空,即使打印服务拒绝打印队列中的其他请求时也是如此。

下图显示在禁用打印机时中断处理打印请求的时刻。

图 8–1 启用或禁用打印机时发生的情况

显示启用的打印机(处理队列中的请求)和禁用的打印机(不处理队列中的请求)的图。

Procedure如何启用或禁用打印机

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 停止打印打印请求。


    # disable [-c | -W] [-r "reason"] printer-name
    
    disable

    取消当前作业,然后禁用打印机。保存当前作业,以便在启用打印机时重新打印。

    -c

    取消当前作业,然后禁用打印机。将来不打印当前作业。

    -W

    在禁用打印机之前一直等待,直到完成当前作业。

    -r "reason"

    为用户提供禁用打印机的原因。只要用户通过使用 lpstat -p 命令检查打印机的状态,就会存储并显示原因。

    printer-name

    指定将停止打印请求的打印的打印机的名称。


    注 –

    无法启用或禁用打印机类。只能启用或禁用单台打印机。


  3. 开始打印打印请求。


    # enable printer-name
    
  4. 验证是否已启用打印机。


    # lpstat -p printer-name
    

示例 8–5 启用或禁用打印机

以下示例说明如何停止打印机 luna 上的当前作业、保存该作业以便将来打印,以及提供打印机停止打印请求的打印的原因。


# disable -r "changing the form" luna

以下示例说明如何在打印机 luna 上开始打印打印请求。


# enable luna
printer "luna" enabled

接受或拒绝打印请求

利用 acceptreject 命令,可以打开或关闭打印队列(其中存储着要打印的请求)。

使用 reject 命令时,将关闭指定打印机的打印队列。新的打印请求无法进入打印服务器上的队列。但是,仍将打印队列中的所有打印请求。如果您希望打印机停止打印队列中已有的请求,则必须禁用该打印机。下表对 acceptrejectenabledisable 命令的功能进行了比较。

表 8–2 acceptrejectenabledisable 打印命令的功能

命令 

功能 

accept

接受发送到打印队列的打印请求。 

disable

停止打印打印队列中当前的请求。 

enable

打印打印队列中的请求。 

reject

拒绝发送到打印队列的打印请求。 

如果拒绝打印请求,则 LP 打印服务会通知或将消息发送给提交该请求的用户。该消息说明指定打印机未接受打印请求。

您还可以通过命令行指定不接受请求的原因。当用户尝试检查打印机队列时,将在用户的系统上显示原因。下图显示打印队列拒绝打印请求时中断处理打印请求的时刻。

图 8–2 打印队列接受或拒绝请求时发生的情况

显示接受和处理打印请求的打印机和拒绝打印请求的打印机(这意味着打印队列阻塞)的图。

Procedure如何接受或拒绝打印机的打印请求

  1. 在打印服务器上以超级用户 lp 或同等角色的身份登录。

  2. 停止接受打印机的打印请求。


    # reject [-r "reason"] printer-name
    
    -r "reason"

    为用户提供打印机拒绝打印请求的原因。只要用户通过使用 lpstat -p 命令检查打印机的状态,就会存储并显示原因。

    printer-name

    指定将停止接受打印请求的打印机的名称。

    只要启用打印机,就会继续打印已排队的请求。有关禁用打印机以便它停止打印的说明,请参见如何启用或禁用打印机

  3. 开始接受打印机的打印请求。


    # accept printer-name
    
  4. 检查打印机的状态,查看它是接受还是拒绝打印请求。


    $ lpstat -p printer-name
    

示例 8–6 接受或拒绝打印机的打印请求

以下示例说明如何阻止打印机 luna 接受打印请求。


# reject -r "luna is down for repairs" luna
destination "luna" will no longer accept requests

以下示例说明如何将打印机 luna 设置为接受打印请求。


# accept luna
destination "luna" now accepting requests

取消打印请求

您可以使用 cancel 命令取消打印机队列中的打印请求或者取消正在打印的作业。

使用 cancel 命令的方式有三种:

使用 cancel 命令时将显示一条消息,指明已取消一个或多个请求,并将打印队列中的下一个请求。

仅在以下情况下,您才能取消打印请求:

要取消特定请求,您需要了解其请求 ID。请求 ID 包含打印机的名称、破折号,以及打印请求编号。例如,luna-185

提交打印请求时,将显示请求 ID。如果您忘记了打印请求 ID,则可以通过将 lpstat 命令与 -o printer 选项一起使用来查找它。

Procedure如何取消打印请求

  1. 如果要取消其他用户的打印请求,则需要成为超级用户 lp 或同等角色。

  2. 确定要取消的打印请求的请求 ID。


    # lpstat 
    

    有关更多详细信息,请参见如何检查打印请求的状态

  3. 取消打印请求。


    # cancel request-id | printer-name
    
    request-id

    指定要取消的打印请求的请求 ID。您可以使用此命令指定多个请求 ID。使用空格或逗号来分隔请求 ID。如果使用空格,请用引号将请求 ID 的列表引起来。

    printer-name

    指定要为其取消当前打印的打印请求的打印机。

    您可以使用此命令指定多个打印机名称。使用空格或逗号来分隔打印机名称。如果您使用空格,请用引号将打印机名称列表引起来。

  4. 验证是否已取消打印请求。


    $ lpstat -o printer-name
    

示例 8–7 取消打印请求

以下示例说明如何取消 luna-3luna-4 打印请求。


$ cancel luna-3 luna-4
request "luna-3" cancelled
request "luna-4" cancelled

以下示例说明如何取消打印机 luna 上当前打印的打印请求。


# cancel luna
request "luna-9" cancelled

Procedure如何取消特定用户的打印请求

  1. 如果要取消其他用户的打印请求,则需要成为超级用户 lp 或同等角色。

  2. 取消特定用户的打印请求。


    $ cancel -u user-list [printer-name]
    -u user-list

    取消指定用户的打印请求。

    user-list 可以是一个或多个用户名。使用空格或逗号来分隔用户名。如果使用空格,请用双引号将名称列表引起来。

    printer-name

    指定要为其取消指定用户的打印请求的打印机。

    printer-name 可以是一个或多个打印机名称。使用空格或逗号来分隔打印机名称。如果您使用空格,请用引号将打印机名称列表引起来。

    如果不指定 printer-name,则会在所有打印机上取消特定用户的打印请求。


示例 8–8 取消特定用户的打印请求

以下示例说明如何在打印机 luna 上取消用户 george 提交的所有打印请求。


# cancel -u george luna
request "luna-23" cancelled

以下示例说明如何在所有打印机上取消用户 george 提交的所有打印请求。


# cancel -u george
request "asteroid-3" cancelled
request "luna-8" cancelled

移动打印请求

如果您计划更改打印机的使用方式,或者决定停用打印机,则应该将 LP 打印服务设置为拒绝其他打印请求。然后,移动或取消当前在打印机中排队的任何请求。您可以使用 lpmove 命令将单个或所有打印请求移动到其他本地打印机。

在您移动打印请求时,不会更改请求 ID,因此用户仍可以找到其请求。如果新指定的打印机无法满足打印请求的要求(如特定的文件内容类型或形式),则不能移动这些打印请求。必须取消这些打印请求。

Procedure如何将打印请求移动到其他打印机

要将所有打印请求从一台打印机移动到其他打印机,您无需知道请求 ID。但是,在移动打印请求之前,请首先确定受影响的打印请求的数量。

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 列出原始打印机上的打印请求的 ID。


    # lpstat -o printer-name1
    
  3. 检查目标打印机是否正在接受打印请求。


    # lpstat -a printer-name2
    

    -a printer-name2 报告打印目标是否正在接受请求。

  4. 将所有打印请求从原始打印机移动到目标打印机。


    # lpmove printer-name1 printer-name2
    
    printer-name1

    指定将从其中移动所有打印请求的打印机的名称。

    printer-name2

    指定将向其移动所有打印请求的打印机的名称。

    有关更多信息,请参见 lpmove(1M) 手册页。

    如果一些请求无法在目标打印机上打印,则将这些请求保留在原始打印机的队列中。通过使用请求 ID,您还可以使用 lpmove 命令将特定的打印请求移动到其他打印机。

  5. 开始接受原始打印机上的打印请求。

    如果您将所有打印请求移动到其他打印机,则 lpmove 命令将自动停止接受该打印机的打印请求。如果要开始接受打印机的新打印请求,则此步骤是必需的。


    # accept printer-name1
    
  6. 检查原始打印机队列中是否存在任何剩余的打印请求。


    # lpstat -o printer-name1
    

    请确保指定的所有打印请求都已移动到目标打印机的队列中。


    # lpstat -o printer-name2
    

示例 8–9 将打印请求移动到其他打印机

以下示例说明如何将打印请求从打印机 luna 移动到打印机 terra。然后,指示原始打印机 luna 恢复接受打印请求。


# lpmove luna terra
# accept luna

更改打印请求的优先级

在用户提交打印请求后,您可以通过执行以下任一操作,更改它在打印服务器队列中的优先级:

Procedure如何更改打印请求的优先级

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 确定要更改其优先级的打印请求的请求 ID。


    # lpstat
    

    有关更多信息,请参见如何检查打印请求的状态

  3. 更改打印请求的优先级。


    # lp -i request-id -H change-priority
    
    -i request-id

    指定要更改的打印请求的请求 ID。

    您可以使用此命令指定多个请求 ID。使用空格或逗号来分隔请求 ID。如果使用空格,请用引号将请求 ID 的列表引起来。

    -H change-priority

    指定更改打印请求优先级的三种方法之一: holdresumeimmediate

    有关 change-priority 的有效值的详细信息,请参见表 8–1

    您还可以使用 lp -q 命令更改指定打印请求的优先级。您可以将优先级从 0(最高优先级)更改为 39(最低优先级)。


示例 8–10 更改打印请求的优先级

以下示例说明如何将请求 ID 为 asteroid-79 的打印请求的优先级更改为优先级 1。


# lp -i asteroid-79 -q 1