5.1. 打印

本节介绍了如何在 SGD 中配置打印服务,其中包括以下主题:

5.1.1. SGD 打印概述

SGD 支持两种类型的打印:PDF 打印和打印机直接打印。

通过 PDF 打印,用户可以从应用程序使用 SGD PDF 打印机进行打印。打印作业必须采用 PostScript 格式。PostScript 打印作业从应用服务器发送到 SGD 服务器,在该服务器上,打印作业将转换为可移植文档格式 (Portable Document Format, PDF) 文件。随后,SGD 服务器将 PDF 文件发送到用户客户端设备上的 PDF 查看器中,可在此查看器中查看、保存和打印文件。

通过打印机直接打印,用户可从应用程序打印到其客户端设备所连接的打印机。SGD 通过与 SGD 主机上的 lplpr 打印系统以及应用服务器上的本机打印系统协作来执行此操作。打印作业被从应用服务器发送到 SGD 服务器。随后,SGD 服务器将打印作业发送到 SGD 客户端,该客户端将打印作业发送到用户的客户端打印机。如果应用服务器使用的打印作业格式与客户端打印机所需的格式不同,则 SGD 会先转换打印作业,然后再将其发送到 SGD 客户端。

通常情况下,PDF 打印比打印机直接打印更可靠,且打印质量更好。

SGD 有两种 PDF 打印机:Universal PDF Printer(通用 PDF 打印机)和 Universal PDF Viewer(通用 PDF 查看器)。

在 Microsoft Windows 客户端设备上,通用 PDF 打印机将打印作业作为 PDF 文件显示在 Adobe Reader 中,然后将该 PDF 文件打印到用户的默认打印机。通用 PDF 查看器将打印作业作为 PDF 文件显示在 Adobe Reader 中,然后用户可以决定是打印还是保存该文件。

在 UNIX、Linux 和 Mac OS X 平台客户端设备上,通用 PDF 打印机和通用 PDF 查看器之间没有任何区别,因为打印作业始终作为 PDF 文件显示在 PDF 查看器中。然后用户可以决定是打印还是保存该 PDF 文件。

SGD 使用分布式打印。打印作业将被发送到托管着用户应用程序会话的 SGD 服务器。这意味着用户的打印作业将分布到整个阵列,且不存在瓶颈或单点故障。

SGD 支持打印机直接打印到 PostScript、打印机命令语言 (Printer Command Language, PCL) 以及连接到用户客户端设备的仅文本打印机。SGD tta_print_converter 脚本针对客户端打印机执行正确格式化打印作业所需的任何转换。要从 Postscript 转换到 PCL,必须在 SGD 服务器上安装 Ghostscript。

5.1.2. 设置打印

设置打印涉及以下配置步骤:

  1. 针对打印配置应用服务器。

    应用服务器所需的配置取决于应用服务器平台。

    请参见第 5.1.3 节 “针对打印配置 Microsoft Windows 应用服务器”

    请参见第 5.1.4 节 “针对打印配置 UNIX 和 Linux 平台应用服务器”

  2. 针对打印配置 SGD 服务器。

    请参见第 5.1.5 节 “针对打印配置 SGD 服务器”

  3. 配置到客户端设备的打印。

    所需的配置取决于客户端设备平台。

    请参见第 5.1.6 节 “配置到 Microsoft Windows 客户端设备的打印”

    请参见第 5.1.7 节 “配置到 UNIX、Linux 和 Mac OS X 平台客户端设备的打印”

5.1.3. 针对打印配置 Microsoft Windows 应用服务器

从在 Microsoft Windows 应用服务器上运行的应用程序进行打印所需的配置取决于用来连接应用服务器的 Microsoft 远程桌面协议 (Remote Desktop Protocol, RDP) 的版本。请参见以下内容:

5.1.3.1. 为 Microsoft RDP 5.0 或更高版本配置打印

如果应用服务器支持 Microsoft RDP 版本 5.0 或更高版本,SGD 会在 Windows 应用程序会话中自动创建打印机队列。这适用于 Microsoft Windows 2003 Server 和更高版本的应用服务器。

当用户启动或恢复某个 Windows 应用程序时,SGD 客户端会向 SGD 发送有关客户端打印机的信息。SGD 向应用服务器提供此信息,然后,应用服务器在 Windows 远程桌面服务会话中创建或映射这些打印机。用户会看到连接到客户端设备的打印机以及直接连接到应用服务器的打印机。

为了能够在 Microsoft Windows 应用程序会话中创建客户端打印机,必须符合以下条件:

必须在应用服务器上安装的打印机驱动程序如下所示:

SGD 管理员可以控制在 Windows 远程桌面服务会话中可用的 SGD 打印机。请参见第 5.1.3.1.1 节 “配置在 Windows 远程桌面服务会话中可用的打印机。”

5.1.3.1.1. 配置在 Windows 远程桌面服务会话中可用的打印机。

SGD 允许管理员控制在 Windows 远程桌面服务会话中可用的打印机。您可以通过以下方式配置打印机:

  • 全局配置。在管理控制台中,转至 "Global Settings"(全局设置)→ "Printing"(打印)选项卡。

  • 单独配置。在管理控制台中,转至某个组织、组织单元、用户配置文件或 Windows 应用程序对象的 "Printing"(打印)选项卡。

    如果您配置某个组织或组织单元对象,则这会影响该组织或组织单元内的所有用户。

    如果您配置某个 Windows 应用程序对象,则这会覆盖组织、组织单元或用户配置文件对象的打印配置。打印配置的优先级顺序为:Windows 应用程序 → 用户配置文件 → 组织单元 → 组织。

可以在 "Printing"(打印)选项卡上设置以下属性。

表 5.1. 用于配置从 远程桌面服务会话进行打印的属性

属性

描述

Client Printing(客户端打印)

控制用户可以打印到的客户端打印机,可以打印到所有或默认的客户端打印机,也可以不打印到客户端打印机。

默认情况下,用户可以打印到其所有客户端打印机。

Universal PDF Printer(通用 PDF 打印机)

启用 "Universal PDF Printer"(通用 PDF 打印机)打印机。

Make Universal PDF Printer the Default(将通用 PDF 打印机设为默认打印机)

将 "Universal PDF Printer"(通用 PDF 打印机)打印机设置为 Windows 应用程序的客户端设备默认打印机。

Universal PDF Viewer(通用 PDF 查看器)

启用 "Universal PDF Viewer"(通用 PDF 查看器)打印机。

Make Universal PDF Viewer the Default(将通用 PDF 查看器设为默认查看器)

将 "Universal PDF Viewer"(通用 PDF 查看器)打印机设置为 Windows 应用程序的客户端设备默认打印机。

Postscript Printer Driver(Postscript 打印机驱动程序)

用于 PDF 打印的 PostScript 打印机驱动程序的名称。


注意

在 "Printing"(打印)选项卡上进行的任何配置更改仅对新用户会话生效。

如果您将某台 PDF 打印机设置为 Windows 应用程序的默认打印机,且将 SGD 配置为仅允许用户打印到他们的默认打印机,则用户会在 Windows 应用程序会话中看到两台打印机。将会显示用户的默认客户端打印机和 PDF 打印机。

要使用 PDF 打印,您必须在应用服务器上安装要用于 PDF 打印的 PostScript 打印机驱动程序。请确保打印机驱动程序具有可满足用户的足够功能。默认情况下,SGD 被配置为使用 HP Color LaserJet 2800 Series PS 打印机驱动程序。在 "Printing"(打印)选项卡上的 "Postscript Printer Driver"(Postscript 打印机驱动程序)字段中输入的打印机驱动程序名称必须与安装在应用服务器上的打印机驱动程序的名称完全匹配。请特别注意大写字母和空格的使用。/opt/tarantella/etc/data/default.printerinfo.txt 文件包含了所有常用的打印机驱动程序名称(按制造商排序)。为避免错误,请从该文件复制并粘贴驱动程序名称。

注意

如果未在客户端设备上配置 PDF 查看器,则即使启用了 PDF 打印机,PDF 打印机在 Windows 应用程序会话中也不可用。

5.1.3.2. 针对打印配置其他 Microsoft Windows 应用服务器

要从使用低于 Microsoft RDP 协议版本 5.0 的 Microsoft Windows 应用服务器进行打印,您必须在该应用服务器上配置与远程行式打印机 (Line Printer Remote, LPR) 兼容的 TCP/IP 打印机。将打印机配置为将打印作业发送到阵列中的主 SGD 服务器。有关如何配置打印机的详细信息,请参考您的系统文档。

请注意以下限制:

  • 不支持 PDF 打印。

  • 不支持多台打印机。您只能打印到客户端设备的默认打印机。用户无法选择打印机。如果用户需要打印到其他打印机,则必须从 SGD 注销,更改他们的默认打印机,然后重新登录。

  • 打印作业可能被删除。将打印作业从应用服务器传送到 SGD 服务器时,需要用户的 SGD 名称来识别要向其发送打印作业的客户端设备。对于 Microsoft Windows 的某些版本,无法直接将打印作业与 SGD 用户关联。如果 SGD 无法识别哪个用户已打印了某个特定的作业,则该打印作业将被删除。例如,如果两个用户使用同一名称登录应用服务器,则可能会发生此情况。

  • 分布式打印不可用。所有打印作业均通过 SGD 阵列中的主服务器定向。

5.1.4. 针对打印配置 UNIX 和 Linux 平台应用服务器

要从 UNIX 或 Linux 平台应用服务器使用 PDF 打印,您必须在应用服务器上至少安装一个 SGD 打印机队列。不必为通用 PDF 打印机和通用 PDF 查看器安装打印机队列。但是,如果您正在使用的 UNIX 或 Linux 平台应用程序不允许您配置打印机参数,或由于名称中包含空格而不允许您指定通用 PDF 打印机和通用 PDF 查看器,则必须另行安装一个名为 tta_pdfprinter 的打印机队列,并打印到该队列。

要从 UNIX 或 Linux 平台应用服务器使用打印机直接打印,您必须按以下方式安装 SGD 打印机队列:

  • 单个打印机队列。为阵列中的主 SGD 服务器安装一个 SGD 打印机队列。所有打印作业均被定向到主 SGD 服务器,且主服务器将打印作业发送到客户端设备。

  • 多个打印机队列。为阵列中的每台 SGD 服务器安装一个 SGD 打印机队列。每个打印机队列将打印作业重定向到某台 SGD 服务器,且该 SGD 服务器将打印作业发送到客户端设备。

    注意

    最好使用多个打印机队列,以便将打印作业分布到整个阵列中,且不存在瓶颈或或单点故障。

可以使用 SGD 打印机队列安装脚本配置打印机队列。请参见第 5.1.4.1 节 “如何在 UNIX 或 Linux 平台应用服务器上安装 SGD 打印机队列”

SGD 打印机队列安装脚本会安装 lplpr 替换脚本。这些脚本被用来替代标准脚本,从而确保打印作业包含足够的信息,以使 SGD 能够识别打印它们的用户。有关详细信息,请参见第 5.1.4.4 节 “使用 SGD lp 和 lpr 脚本打印”

5.1.4.1. 如何在 UNIX 或 Linux 平台应用服务器上安装 SGD 打印机队列

如果应用服务器同时还是 SGD 服务器,则当您安装 SGD 时,将自动安装打印机队列。

  1. 从 SGD 服务器将 /opt/tarantella/bin/scripts/prtinstall.en.sh 脚本复制到应用服务器上的一个临时目录。

  2. 以超级用户 (root) 身份登录到应用服务器。

  3. 转到该临时目录。

  4. 运行脚本以安装打印机队列。

    有关 SGD 打印机队列安装脚本的所有命令选项的详细信息,请参见第 5.1.4.2 节 “SGD 打印机队列安装脚本”

    • 如果阵列包含单台 SGD 服务器,请使用以下命令:

      # sh prtinstall.en.sh

      当出现提示时,键入 SGD 服务器的完整域名系统 (Domain Name System, DNS) 名称。

    • 如果阵列包含多台 SGD 服务器,请为阵列中的每台 SGD 服务器创建一个打印机队列。使用以下命令:

      # sh prtinstall.en.sh --ttahost DNS-name --appprinter name
      

      DNS-name 是 SGD 服务器的完整 DNS 名称。每个打印机队列的名称(由 --appprinter 参数指定)可以是您所需的任何内容,但必须唯一。

    如果使用通用 UNIX 打印系统 (Common UNIX Printing System, CUPS),您可能必须为 prtinstall.en.sh 使用 --cups 选项来指示您正在使用 CUPS。您可能还必须重新配置 CUPS。请参见第 5.1.4.3 节 “为 CUPS 配置打印”

5.1.4.2. SGD 打印机队列安装脚本

SGD 打印机队列安装脚本 prtinstall.en.sh 会在 UNIX 或 Linux 平台应用服务器上安装 SGD 打印机队列。它还会安装 SGD lplpr 替换脚本。

prtinstall.en.sh 脚本位于 SGD 服务器上的 /opt/tarantella/bin/scripts 目录中。

您必须是超级用户 (root) 才能运行此脚本。

此脚本的语法如下:

sh prtinstall.en.sh [--ttahost SGD_hostname]
                    [--ttaprinter printer_name]
                    [--appprinter printer_name]
                    [--uninstall [printer_name]]
                    [--cups y | n | auto]
                    [--cupsconf filename]
                    [--cupscontrol filename]
                    [--gsbindir gs_bin_dir]
                    [--append]
                    [--help]

下表介绍了此脚本的可用选项。

选项

描述

--ttahost SGD_hostname

SGD 服务器的全限定 DNS 名称

--ttaprinter printer_name

使用此选项指定打印机队列的名称。如果 SGD 服务器还用作应用服务器,请使用此选项。如果您不使用此选项,则将以默认名称 tta_printer 来创建打印机。

--appprinter printer_name

使用此选项指定 UNIX 或 Linux 平台应用服务器上的打印机队列名称。如果您不使用此选项,则将以默认名称 tta_printer 来创建打印机队列。

--uninstall [printer_name]

卸载 SGD 打印机队列。如果您未指定打印机队列,则会提示您指定一个队列。

--cups y | n | auto

指示您正在使用 CUPS。

如果您未使用此选项,则会默认为 auto,这意味着 SGD 将自动检测是否正在使用 CUPS。如果错误地检测了 CUPS,请使用此选项告知 SGD 是正在使用 CUPS (y) 还是未使用 CUPS (n)。

--cupsconf filename

指定 CUPS 配置文件的路径。

如果您未使用此选项,CUPS 配置文件将被假定为 /etc/cups/cupsd.conf

--cupscontrol filename

指定 CUPS 启动脚本的路径。

如果您未使用此选项,CUPS 启动脚本将被假定为 /etc/init.d/cups

--gsbindir gs_bin_dir

使用此选项指定安装 Ghostscript 的目录。

如果 Ghostscript 未安装在默认位置之一,或者在安装了多个 Ghostscript 版本的情况下要指定要使用的版本,请使用此选项。

仅当您正在 SGD 主机上运行打印机队列安装脚本时,才使用此选项。有关详细信息,请参见第 5.1.5.1 节 “在 SGD 主机上检查 Ghostscript 安装”

--append

安装额外的打印机队列,而非替换现有的打印机队列。

--help

显示 prtinstall.en.sh 脚本选项的列表。

以下示例在应用服务器上安装名为 tta_london 的 SGD 打印机。

# sh prtinstall.en.sh --appprinter tta_london

5.1.4.3. 为 CUPS 配置打印

SGD 打印仅适用于 CUPS 版本 1.1.19 或更高版本。可能需要执行以下配置更改来启用 CUPS 的打印:

  • 必须为所有 LPD 客户端启用 CUPS LPD 兼容模式。

    如果您的应用服务器上有任何行式打印机守护进程 (Line Printer Daemon, LPD) 客户端,则必须启用 CUPS LPD 兼容模式,以便 CUPS 能够接受来自 LPD 客户端的远程打印作业。《CUPS Software Administrators Manual》(《CUPS 软件管理员手册》)介绍了如何启用 LPD 兼容模式。

  • 必须启用 CUPS 原始打印。

    在安装了 SGD 的主机上,通过编辑 /etc/cups/mime.convs/etc/cups/mime.types 文件在 CUPS 中启用原始打印。这些文件包含了解释如何执行此操作的注释。请搜索包含 "raw" 一词的注释。

注意

对 CUPS 配置进行更改后,您可能必须重新启动 CUPS 守护进程。

要使用 CUPS 进行打印,您必须使用 /opt/tarantella/bin/lp 脚本。

5.1.4.4. 使用 SGD lp 和 lpr 脚本打印

SGD 打印机队列安装脚本 prtinstall.en.sh 将安装 SGD lplpr 替换脚本。用户从 UNIX 或 Linux 平台应用服务器进行打印时必须使用这些替换脚本。这些替换脚本确保打印作业包含足够的信息,以使 SGD 能够识别打印它们的用户。

SGD 登录脚本将设置用户的 PATH,以确保替换脚本优先于系统脚本。但是,如果应用程序使用完整路径名(例如 /usr/bin/lp)或修改了 PATH 本身,您必须将应用程序重新配置为使用 /opt/tarantella/bin/lp/opt/tarantella/bin/lpr

用户按以下方式使用替换脚本进行打印:

$ lp -d printer file
$ lpr -P printer file

如果省略了 -d-P 参数,输出将发送到客户端的默认打印机。如何指定 printer 取决于客户端设备。有关详细信息,请参见第 5.1.6 节 “配置到 Microsoft Windows 客户端设备的打印”第 5.1.7 节 “配置到 UNIX、Linux 和 Mac OS X 平台客户端设备的打印”

5.1.5. 针对打印配置 SGD 服务器

针对打印配置 SGD 服务器涉及以下配置步骤:

5.1.5.1. 在 SGD 主机上检查 Ghostscript 安装

SGD 使用 Ghostscript 将打印作业转换为 PDF 文件。要使用 PDF 打印,必须在 SGD 主机上安装 Ghostscript。为获得最佳效果,请安装 Ghostscript 的最新版本。Ghostscript 分发必须包含 ps2pdf 程序。

对于打印机直接打印,tta_print_converter 脚本使用 Ghostscript 将打印作业从 PostScript 转换为 PCL 格式。为获得最佳效果,请下载并安装附加字体。

SGD 软件中不包含 Ghostscript。

在安装 SGD 时,如果将其安装在下列位置之一,它将自动检测 Ghostscript:

  • /usr/local/bin

  • /usr/bin

  • /usr/sfw/bin

  • /opt/sfw/bin

  • /bin

  • /usr/sbin

  • /sbin

  • /usr/lbin

如果 Ghostscript 安装在其他位置,请在 SGD 主机上运行 SGD 打印机队列安装脚本。使用脚本的 --gsbindir 选项来配置 Ghostscript 的位置。有关更多详细信息,请参见第 5.1.4.2 节 “SGD 打印机队列安装脚本”

如果安装了多个 Ghostscript 版本,请在使用 --gsbindir 选项的情况下运行 SGD 打印机队列安装脚本,以告诉 SGD 要使用哪个版本。

如果未在 SGD 主机上安装 Ghostscript,或者您的 Ghostscript 分发未包含 ps2pdf 程序,请安装 Ghostscript,然后运行 SGD 打印机队列安装脚本。

5.1.5.1.1. 使用 gstest 脚本测试 Ghostscript 安装

您可以使用 gstest 脚本来测试 SGD 主机上的 Ghostscript 安装。当您安装 SGD 时,默认情况下运行此脚本。

gstest 脚本会检查 Ghostscript 安装中的错误,并使用 ps2pdf 来生成一个测试 PDF 文件。脚本输出将报告到屏幕上,并且还将写入到 /opt/tarantella/var/log/print.log 文件。

请按以下方式运行 gstest

# /opt/tarantella/bin/scripts/gstest

以此方式使用 gstest 将对 SGD 主机上的字体安装执行基本测试,并生成一个字体测试文件 /opt/tarantella/var/info/sample.pdf。如果正确安装了 Ghostscript 字体,sample.pdf 文件中将包含三行,其中每一行都以不同的字体呈现。使用的字体列在 /opt/tarantella/var/log/print.log 文件中。

另外,您还可以指定 gstest 要使用的输入文件和输出文件。例如:

# cd /opt/tarantella/bin/scripts
# gstest /tmp/myPostScriptFile.ps /home/indigojones/myPDFFile.pdf

如果您未指定输出文件,gstest 将在 /tmp/sgd_sample.pdf 中创建输出 PDF 文件。

注意

如果您指定了自己的输入文件,gstest 将不会生成字体测试 PDF 文件 /opt/tarantella/var/info/sample.pdf

5.1.5.2. 将 SGD 主机配置为接受远程打印请求

打印作业将从应用服务器发送到 SGD 服务器,然后再从 SGD 服务器发送到客户端设备。为了能够将打印作业从应用服务器定向到客户端设备,必须将 SGD 主机配置为接受远程打印请求。如何执行此配置因每个平台而异。有关此操作的信息,请查看您的系统管理文档。

例如,如果您正在 Linux 系统上使用 lpd,则必须为可能会发送打印请求的每台应用服务器在 /etc/hosts.equiv/etc/hosts.lpd 文件(如果有)中添加一个条目。执行这些更改后,记得要重新启动 lpd 守护进程。

5.1.5.3. 配置 SGD 打印作业转换

通过打印机直接打印,打印作业将被从应用服务器发送到 SGD 服务器。然后,SGD 服务器将打印作业发送到 SGD 客户端设备,客户端设备再将打印作业发送到用户的打印机。当打印作业到达 SGD 服务器后,可能需要将它们转换为适合客户端打印机的格式。

注意

从不会转换来自 Windows RDP 会话的打印作业,因为它们被认为处于正确的格式。

为确定是否需要转换某个打印作业,SGD 服务器将检查打印机类型配置文件以查看客户端打印机使用的格式是否与应用服务器使用的格式匹配。如果格式匹配,则打印作业将被转发到客户端设备打印机,且不会进行任何转换。如果格式不匹配,则 SGD 服务器会使用 tta_print_converter 脚本将打印作业转换为正确的格式。

为了确保正确处理打印作业的格式,您可能必须编辑打印机类型配置文件和 tta_print_converter 脚本。以下各节对此进行了介绍。

小心

只有当您必须使用打印机直接打印并且需要解决打印作业格式问题时,才需编辑这些文件。在大多数情况下,PDF 打印提供了针对打印作业格式问题的较好解决方案。

5.1.5.3.1. 打印机类型配置文件

SGD 使用以下配置文件来确定打印机类型:

如果您希望支持特定的打印机或添加新的打印机类型,则可以编辑这些文件。

注意

如果您添加新的打印机类型,则可能还必须编辑 tta_print_converter 脚本。

如果这些文件中的详细信息不足或映射不正确,则 SGD 不一定会转换打印作业,或根本不转换打印作业。

5.1.5.3.2. tta_print_converter 脚本

tta_print_converter 脚本将打印作业从应用服务器使用的格式转换为客户端设备所需的格式,具体取决于打印机类型。默认情况下,该脚本可以识别 PostScript 和非 PostScript 格式。要将打印作业从 Postscript 转换为 PCL,必须在 SGD 主机上安装 Ghostscript。有关为 SGD 打印安装和配置 Ghostscript 的更多信息,请参见第 5.1.5.1 节 “在 SGD 主机上检查 Ghostscript 安装”

您可以编辑 tta_print_converter 脚本以识别不同的打印作业格式并在它们之间进行转换,或添加对新打印机类型的支持。

注意

您必须以超级用户 (root) 身份登录才能编辑该脚本。

tta_print_converter 脚本位于 /opt/tarantella/bin/scripts 目录中。该脚本包含可帮助您对其进行定制的注释。

shell 函数 GetDataType 根据打印作业的前 128 个字节确定打印作业格式。此数据采用 URL 编码,例如,将 % 字符编码为 %25

客户端打印机类型以大写字母传递到该脚本,例如 POSTSCRIPTMYNEWTYPE

如果您在打印到 PCL 打印机时遇到问题,则 tta_print_converter 脚本中包含已取消注释的某个代码。您可以使用该代码来查看这是否能够解决问题。

5.1.6. 配置到 Microsoft Windows 客户端设备的打印

打印到 Microsoft Windows 客户端设备所需的配置取决于您使用的是 PDF 打印还是打印机直接打印,如以下各节中所述。

5.1.6.1. PDF 打印

为了能够使用 PDF 打印,必须在客户端设备上安装 Adobe Reader 版本 4.0 或更高版本。

从 Microsoft Windows 应用程序,您可以以正常方式进行打印,并可以在应用程序的 "Print"(打印)对话框中选择 "Universal PDF Printer"(通用 PDF 打印机)或 "Universal PDF Viewer"(通用 PDF 查看器)。

从在 UNIX 或 Linux 平台应用服务器上运行的应用程序,您可以使用 SGD lplpr 替换脚本以正常方式进行打印。可以选择某台 PDF 打印机作为打印命令的一部分,例如:

$ /opt/tarantella/bin/lp -d "Universal PDF Printer" filename
$ /opt/tarantella/bin/lpr -P "Universal PDF Viewer" filename
注意

filename 必须是一个 PostScript 文件,因此应用程序必须能够输出 PostScript。

当用户进行打印时,PDF 文件将显示在 Adobe Reader 中。如果选择了 "Universal PDF Printer"(通用 PDF 打印机),则 PDF 文件将自动打印到用户的默认打印机。Adobe Reader 最小化运行,并且在完成打印作业后不退出。如果选择了 "Universal PDF Viewer"(通用 PDF 查看器),则 PDF 文件将显示在 Adobe Reader 窗口中。然后用户可以决定是打印还是保存该文件。

在 UNIX、Linux 和 Mac OS X 平台客户端设备上,PDF 文件显示在默认的 PDF 查看器中或者显示在客户端配置文件中配置的 PDF 查看器中。然后用户可以决定是打印还是保存该 PDF 文件。通用 PDF 打印机和通用 PDF 查看器之间并无任何区别,因为打印作业始终显示在 PDF 查看器中。

5.1.6.2. 打印机直接打印

本节介绍了使用打印机直接打印来打印到 Microsoft Windows 客户端设备时可能需要的配置,并包括以下主题:

5.1.6.2.1. 打印机驱动程序映射

从 Microsoft Windows 应用程序打印时,如果可用的客户端打印机数量很多且种类繁多,则可能会导致出现问题。大多数问题是由于未在应用服务器上安装正确的打印机驱动程序导致的。一个解决方案是使用 PDF 打印。另一个解决方案是使用打印机驱动程序映射(仅适用于 Windows 客户端设备)。

通过打印机驱动程序映射,您可以将一个打印机驱动程序名称映射到另一个名称。您可以通过编辑 /opt/tarantella/etc/data/default.printerinfo.txt 文件的 [Previous Names] 部分来执行此操作。

下面是 default.printerinfo.txt 文件中的条目的示例:

[Previous Names]
"HP LaserJet 5"="my HP driver", "my other HP driver"

这意味着如果用户具有使用 "my HP driver" 或 "my other HP driver" 打印机驱动程序的客户端打印机,则创建打印机时,SGD 将使用 "HP LaserJet 5" 打印机驱动程序。

您还可以在 = 符号的右侧使用通配符,如 * 和 ?。使用 * 表示任意字符串(包括空字符串),使用 ? 表示任意单个字符。例如,在具有各种客户端设备的情况下创建通用打印机映射时,这十分有用。

例如,如果文件包含以下条目:

[Previous Names]
"HP LaserJet 5"="hp*laserjet 5*"

所有打印机驱动程序名称(如 "HP LaserJet 5"、"HP LaserJet 5M" 和 "HP Color LaserJet 5")都被映射到打印机驱动程序 "HP LaserJet 5" 中。

default.printerinfo.txt 文件包含了有关如何创建映射的更详细说明。

5.1.6.2.2. 打印机类型配置文件

对于 Microsoft Windows 客户端设备,SGD 使用 /opt/tarantella/etc/data/printertypes.txt 文件来确定在将打印作业发送到客户端设备之前是否将其从一种格式转换为另一种格式。printertypes.txt 文件将打印机驱动程序(例如 pscript.dll)映射到打印机类型(例如 PostScript)。

注意

从不会转换来自 Windows RDP 会话的打印作业,因为它们被认为处于正确的格式。

printertypes.txt 文件包含可帮助您对其进行定制的注释。默认情况下,此文件包含 PostScript、PCL 和仅文本打印机的映射。您必须以超级用户 (root) 身份登录才能编辑此文件。

注意

用于 Windows 客户端的 printertypes.txt 文件还包含 UNIX 平台和 Apple Macintosh 客户端的条目。它仅用作后备方法。对于 UNIX 或 Linux 平台,它将 UNIX 类型映射到打印机类型。对于 Apple Macintosh,它将打印机名称映射到打印机类型。

要查明客户端设备使用的打印机驱动程序的名称,请打印一个测试页并检查 "Driver Name"(驱动程序名称)字段。

要添加对新打印机类型的支持,请在同一模式后添加行。例如:

MyNewType=mydriver.drv

例如,Windows 客户端设备 cairo 运行 Windows,它的默认打印机是 PCL。使用的打印机驱动程序是 unidrv.dllprintertypes.txt 中的 [Windows*] 部分具有以下格式:

[Windows*]
PostScript=pscript5.dll;pscript.dll
PCL=rasdd.dll
PostScript=*

由于没有 unidrv.dll 的具体匹配项,因此将应用最后的条目:PostScript。这意味着当用户进行打印时,打印作业在发送到 cairo 之前将被错误地转换为 PostScript。

要修复此问题,请以 root 用户身份编辑 printertypes.txt,为 unidrv.dll 添加具体的匹配项,如下所示:

PCL=rasdd.dll;unidrv.dll

执行此更改后,SGD 可以正确地识别在 cairo 上配置的打印机,并且该客户端设备的打印作业将转换为 PCL。

5.1.6.2.3. 从 UNIX 或 Linux 平台应用服务器进行打印

从 UNIX 或 Linux 平台应用服务器打印到 Microsoft Windows 客户端设备时,用户可以使用以下任一项指定要打印到的打印机:

  • 客户端可访问的网络打印机的通用命名约定 (Universal Naming Convention, UNC) 名称,例如:

    $ lp -d '\\\\PRTSERVER\\HPLJ5' filename
    
  • “友好的”名称,例如:

    $ lpr -P label-printer filename
    
  • 客户端上的端口,例如:

    $ lpr -P LPT1: filename
    

要使用 UNC 名称,您必须将打印机名称括在引号内并使用额外的反斜杠对每个反斜杠进行转义,如上一示例中所示。由于不同的 shell 处理反斜杠的方式不同,您可能需要尝试反斜杠的数量。您还可以使用下划线而非反斜杠,例如:

$ lp -d __PRTSERVER_HPLJ5 filename
注意

仅当打印机名称的前两个字符是下划线时,使用下划线才有效。

使用一个“友好的”名称可以避免 UNC 名称问题。可以在 /opt/tarantella/etc/data/printernamemap.txt 文件中配置“友好的”名称。此文件中的条目将“友好的”名称映射到 UNC 名称,例如:

"label-printer"="\\PRTSERVER\HPLJ5"
注意

您无需对任何反斜杠进行转义。

5.1.7. 配置到 UNIX、Linux 和 Mac OS X 平台客户端设备的打印

打印到 UNIX、Linux 和 Mac OS X 平台客户端设备所需的配置取决于您使用的是 PDF 打印还是打印机直接打印,如以下各节中所述。

5.1.7.1. PDF 打印

为了能够使用 PDF 打印,必须在客户端设备上安装 PDF 查看器。默认情况下,SGD 支持以下 PDF 查看器。

客户端平台

默认 PDF 查看器

SPARC 平台上的 Oracle Solaris

GNOME PDF 查看器 (gpdf)

Acrobat Reader (acroread)

x86 平台上的 Oracle Solaris

GNOME PDF 查看器 (gpdf)

Linux

GNOME PDF 查看器 (gpdf)

Evince 文档查看器 (evince)

X PDF Reader (xpdf)

Mac OS X

Preview App (/Applications/Preview.app)

注意

Adobe Reader PDF 查看器必须支持 -openInNewWindow 命令选项。Preview App PDF 查看器必须支持 open -a 命令选项。

为了能够使用默认的 PDF 查看器,应用程序必须位于用户的 PATH 上。

如果您更喜欢某个备选 PDF 查看器,则可以在用户的客户端配置文件中配置备选查看器应用程序的命令。在配置文件中,您可以输入命令或命令的完整路径,具体取决于该应用程序是否位于用户的 PATH 上。有关详细信息,请参见第 6.2.4 节 “客户端配置文件设置”

从 Microsoft Windows 应用程序,您可以以正常方式进行打印,并可以在应用程序的 "Print"(打印)对话框中选择 "Universal PDF Printer"(通用 PDF 打印机)或 "Universal PDF Viewer"(通用 PDF 查看器)。

从在 UNIX 或 Linux 平台应用服务器上运行的应用程序,您可以使用 SGD lplpr 替换脚本以正常方式进行打印。可以选择某台 PDF 打印机作为打印命令的一部分,例如:

$ /opt/tarantella/bin/lp -d "Universal PDF Printer" filename
$ /opt/tarantella/bin/lpr -P "Universal PDF Viewer" filename
注意

filename 必须是一个 PostScript 文件,因此应用程序必须能够输出 PostScript。

PDF 文件显示在默认的 PDF 查看器中或显示在客户端配置文件中配置的 PDF 查看器中。然后用户可以决定是打印还是保存该 PDF 文件。通用 PDF 打印机和通用 PDF 查看器之间并无任何区别,因为打印作业始终显示在 PDF 查看器中。

5.1.7.2. 打印机直接打印

要使用打印机直接打印来打印到连接到 UNIX、Linux 或 Mac OS X 平台客户端设备的打印机,必须在下列打印机配置文件之一中定义客户端打印机:

  • 全局打印机配置文件/opt/tarantella/etc/data/default.printerinfo.txt

    此文件为通过该 SGD 服务器进行打印的所有用户设置默认值。由于未在整个阵列中复制此文件,因此您必须手动将其复制到其他 SGD 服务器。

  • 特定于用户的打印机配置文件$HOME/.tarantella/printerinfo.txt

    特定于用户的打印机配置文件是可选的,并且必须在客户端设备上手动创建。用户可以创建其自己的文件,您也可以将全局配置文件用作模板并将其分发给用户。此文件包含各个用户的设置,无论用户通过哪台 SGD 服务器进行打印。此文件中的设置优先于全局配置文件中的设置。

全局打印机配置文件的格式与特定于用户的打印机配置文件的格式相同:

[UNIX]
"printer-name"="windows-driver" printer-type
"printer-name"="windows-driver" printer-type
...

printer-name 是客户端上的 lplpr 系统识别的打印机名称。打印机名称必须用直引号 (") 引起,并且后跟等号 (=)。这是用户从 UNIX 或 Linux 平台应用服务器进行打印时可以指定的名称。它也是用户从 Microsoft Windows 应用服务器进行打印时显示在 "Print"(打印)对话框中的名称。

windows-driver 是从 Microsoft Windows 应用服务器进行打印时要使用的打印机驱动程序的名称。该打印机驱动程序名称必须用双引号引起。该打印机驱动程序的名称必须与安装在 Windows 应用服务器上的打印机驱动程序的名称完全匹配。请特别注意大写字母和空格的使用。default.printerinfo.txt 文件包含了所有常用的打印机驱动程序名称(按制造商排序)。为避免错误,请从该文件复制并粘贴驱动程序名称。

printer-type 是打印作业使用的格式。其值可以是 PostScriptPCLText。此信息是可选的,但是如果缺少此信息,默认情况下会使用 PostScript。此信息用于确定 SGD 是否将打印作业从应用服务器使用的格式转换为客户端打印机所需的格式。另请参见第 5.1.5.3 节 “配置 SGD 打印作业转换”

[UNIX] 部分中列出的第一台打印机是客户端的默认打印机。

首次安装 SGD 时,default.printerinfo.txt 文件中包含以下条目:

[UNIX]
"_Default"="HP Color LaserJet 2800 Series PS" PostScript

通过此配置,当用户从 Windows 应用服务器进行打印时,他们会看到名为 _Default 的打印机。此打印机使用基本 PostScript 打印机驱动程序 "HP Color LaserJet 2800 Series PS" 打印到客户端上的默认打印机。

注意

这意味着即使没有打印机连接到客户端设备,Windows 应用程序中也有打印机也可用。

例如,如果 SGD 用户的 $HOME/.tarantella/printerinfo.txt 文件包含以下条目:

[UNIX]
"drafts"="HP Diskette 970Cxi" PCL
"salespersons"="HP Lacerate 5/5M" PostScript

当用户从 Microsoft Windows 应用服务器打印到 UNIX 平台客户端设备时,有下列打印机可用:

  • drafts

  • salespersons

用户的默认打印机是 drafts,在本例中它被定义为 PCL 打印机。

5.1.8. 管理打印

本节介绍了 SGD 的打印作业管理功能,并包括以下主题:

5.1.8.1. tarantella print 命令

SGD 管理员使用 tarantella print 命令控制打印服务。您可以使用此命令执行以下操作:

  • 列出假脱机打印作业并识别它们所属的 SGD 用户。您可以使用它来检查来自应用服务器打印系统的打印作业是否已到达 SGD 打印队列。

  • 从 SGD 打印队列中删除打印作业。

  • 暂停和重新启动 SGD 打印服务。

  • 将打印作业从一台 SGD 服务器移动到另一台。

tarantella print 命令的语法如下所示:

tarantella print start | stop | status | pause | resume | list | cancel | move

下表显示了 tarantella print 的可用子命令。

子命令

描述

cancel

取消打印作业

list

列出打印作业

move

将排队的打印作业从一台 SGD 服务器移动到另一台

pause

临时暂停打印

resume

恢复打印

start

为阵列启动打印服务

status

显示有关打印服务的信息

stop

停止打印服务

5.1.8.2. 为打印作业设置时间限制

SGD 管理员可以为打印作业设置一个时间限制,以限制其在被删除前可保留在 SGD 服务器上的时间。在您必须管理大量打印时,此功能很有用。

要指定打印作业在服务器上保留的小时数,请使用以下命令:

$ tarantella config edit \
--tarantella-config-array-printjoblifetime hours

要将 SGD 恢复为其默认行为,从而使打印作业无限期地保留在服务器上,请使用以下命令:

$ tarantella config edit \
--tarantella-config-array-printjoblifetime 0

5.1.8.3. 打印作业的用户管理

用户可以从 Webtop 的 "Printing"(打印)区域来管理其自己的打印作业,如图 5.1 “SGD Webtop 的 "Printing"(打印)区域”中所示。

图 5.1. SGD Webtop 的 "Printing"(打印)区域

屏幕抓图中显示了 SGD Webtop 的 "Printing"(打印)区域

"Printing"(打印)区域显示当前位于打印队列中的作业数以及用于管理打印作业的控件。

在打印文档时,Webtop 会告诉用户队列中有多少打印作业。用户可以单击 "Cancel All"(全部取消)来删除所有暂挂的打印作业。

用户还可以单击 "Pause"(暂停)来暂时停止打印。当打印暂停时,任何暂挂的打印作业都将保留在队列中,直到用户取消它们或恢复打印。单击 "Resume"(恢复)可以再次启动打印。打印机图标会发生变化以向您显示暂停打印的时间。

要分别管理打印作业,请单击 "List All Jobs"(列出全部作业)。Webtop 将显示用户在队列中所具有的所有打印作业的列表,以及作业的信息,例如副本的数量和所选择的打印机。

如果您暂停了打印,单击 "Resume"(恢复)按钮可打印这一个打印作业。

要取消某个打印作业,请单击 "Cancel"(取消)按钮。

从 Microsoft Windows 应用服务器、UNIX 或 Linux 平台应用服务器进行打印时,用户可以选择要打印到哪台打印机。如果用户未选择打印机,则输出将被发送到用户的默认打印机。对于所有其他应用服务器,输出始终会被发送到客户端设备的默认打印机。

通过将鼠标指针指向 Webtop 上的打印机图标,用户可以看到哪台打印机是其默认打印机。弹出窗口中将显示默认打印机的名称。

如果用户要更改其默认打印机,必须先从 SGD 注销,更改默认打印机,然后重新登录。

5.1.9. 用户无法从通过 SGD 显示的应用程序进行打印

使用以下核对表来诊断并修复问题:

如果这无法解决问题,请按照第 5.1.9.4 节 “跟踪打印作业”中的步骤执行操作。

5.1.9.1. 客户端设备核对表

使用以下客户端设备故障排除步骤来诊断 SGD 中的打印问题。

Questions

  • 5.1.9.1.1: SGD 是否支持客户端设备或打印机类型的打印?

  • 5.1.9.1.2: 客户端设备上是否暂停了打印?

  • 5.1.9.1.3: 是否正确配置了打印机?

  • 5.1.9.1.4: 对于 PDF 打印,是否在客户端上安装了 PDF 查看器?

  • 5.1.9.1.5: 对于从 UNIX 或 Linux 平台应用服务器进行的 PDF 打印,打印作业的格式是否正确?

  • 5.1.9.1.6: 用户是否有必需的注册表权限?

Questions and Answers

5.1.9.1.1: SGD 是否支持客户端设备或打印机类型的打印?

检查 Webtop 的 "Printing"(打印)区域。打印机图标是否包含红色十字以及是否显示了消息 "No Client Printer Available"(没有可用的客户端打印机)?如果是,则意味着 SGD 不支持该客户端设备或打印机类型的打印,或者创建客户端打印机时出错。

5.1.9.1.2: 客户端设备上是否暂停了打印?

请确保用户未暂停打印。检查以确保未显示 "Printer Paused"(打印机已暂停)图标。

使用 tarantella webtopsession list 命令查看用户是否已暂停打印。

5.1.9.1.3: 是否正确配置了打印机?

请确保已正确配置了打印机,例如,通过从客户端设备上的 Web 浏览器将 Web 页打印到打印机。取决于应用服务器,某些打印作业只能发送到客户端设备的默认打印机。

如果打印到 UNIX、Linux 或 Mac OS X 平台客户端设备,请检查是否已为这些客户端类型配置了打印。请参见第 5.1.7 节 “配置到 UNIX、Linux 和 Mac OS X 平台客户端设备的打印”

5.1.9.1.4: 对于 PDF 打印,是否在客户端上安装了 PDF 查看器?

为了能够在 SGD 中使用 PDF 打印,必须在客户端设备上安装 PDF 查看器。

检查是否在客户端上安装了受支持的查看器或用户的首选查看器,以及该应用程序是否可执行。

在 UNIX、Linux 或 Mac OS X 系统客户端设备上,检查用户对 /tmp 目录是否拥有读写访问权限。

如果 PDF 查看器是 Adobe Reader (acroread),请检查该查看器是否支持 -openInNewWindow 命令选项。如果 PDF 查看器是 Preview app (/Applications/preview.app),请检查该查看器是否支持 open -a 命令选项。

如果未安装或无法访问 PDF 查看器,则 SGD PDF 打印机可供用户使用。

5.1.9.1.5: 对于从 UNIX 或 Linux 平台应用服务器进行的 PDF 打印,打印作业的格式是否正确?

如果用户的 PDF 查看器已启动,但收到了文件格式错误,请检查正在 UNIX 或 Linux 平台应用服务器上打印的文件格式是否为 PostScript。

5.1.9.1.6: 用户是否有必需的注册表权限?

在 Microsoft Windows 客户端设备上,用户必须拥有对 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG\Seed 注册表项的写入访问权限和对注册表其余部分的读取访问权限。

用于打印的多个 Windows 应用编程接口 (application programming interface, API) 需要该访问权限。

5.1.9.2. 应用服务器核对表

使用以下应用服务器故障排除步骤来诊断 SGD 中的打印问题。

Questions

  • 5.1.9.2.1: 是否已在应用服务器上启用了打印?

Questions and Answers

5.1.9.2.1: 是否已在应用服务器上启用了打印?

您可能需要先在应用服务器上启用打印服务,然后用户才能进行打印。

在 Microsoft Windows 应用服务器上,必须启用打印机映射。可以全局配置打印机映射,或将其作为一个组策略。默认情况下,打印机映射处于启用状态。

在 UNIX 和 Linux 平台应用服务器上,打印服务必须处于启用状态。

Questions

  • 5.1.9.2.1: 是否已在应用服务器上配置了打印机?

  • 5.1.9.2.2: 是否已在 Windows 应用程序会话中创建了打印机?

  • 5.1.9.2.3: 应用程序是否打印到正确的打印机?

  • 5.1.9.2.4: 帐户在应用服务器上是否为共享的?

  • 5.1.9.2.5: 服务器的 Windows 名称是否与 DNS 名称相同?

  • 5.1.9.2.6: 如果您使用的是 PDF 打印,则每台 Microsoft Windows 应用服务器上是否安装了相同的 PostScript 打印机驱动程序?

Questions and Answers

5.1.9.2.1: 是否已在应用服务器上配置了打印机?

您可能需要先在应用服务器上配置 SGD 打印机,然后用户才能进行打印。请参见以下内容:

5.1.9.2.2: 是否已在 Windows 应用程序会话中创建了打印机?

如果用户正在尝试从 Microsoft Windows 应用服务器进行打印(使用 Windows 远程桌面服务进行访问),则会自动配置用户的打印机。请参见第 5.1.3.1 节 “为 Microsoft RDP 5.0 或更高版本配置打印”。如果未自动配置,请检查应用服务器上的系统事件日志中是否有以下错误:

  • Event ID: 1111 Description: Driver drivername required for printer printertype is unknown. Contact the administrator to install the driver before you log in again.

  • Event ID: 1105 Description: Printer security information for the printername / clientcomputername /Session number could not be set

  • Event ID: 1106 Description: The printer could not be installed.

这些错误说明应用服务器可能不支持该客户端打印机的打印机驱动程序。请在应用服务器上安装打印机驱动程序,或查看第 5.1.6.2.1 节 “打印机驱动程序映射”以获取有关如何支持其他打印机驱动程序的详细信息(包括使用通配符来支持各种打印机驱动程序名称)。

此外,还应当检查 /opt/tarantella/etc/data/default.printerinfo.txt 中或用户的 $HOME/.tarantella/printerinfo.txt 中的打印机驱动程序名称是否与应用服务器上的驱动程序名称匹配。

如果这不能解决问题,请参见 Microsoft 知识库文章 239088,获取更多详细信息。

5.1.9.2.3: 应用程序是否打印到正确的打印机?

应用程序必须打印到已配置的打印机队列。在 UNIX 或 Linux 平台应用服务器上,默认情况下,prtinstall.en.sh 脚本会创建一个名为 tta_printer 的打印机队列。

在 UNIX 或 Linux 平台应用服务器上,应用程序必须使用由 prtinstall.en.sh 安装的 lplpr 替换脚本进行打印。SGD 登录脚本将设置 PATH,以确保替换脚本优先于系统脚本。如果应用程序使用完整路径名(例如 /usr/bin/lp)或修改了 PATH 本身,请重新配置应用程序以使用 /opt/tarantella/bin/lp/opt/tarantella/bin/lpr

5.1.9.2.4: 帐户在应用服务器上是否为共享的?

如果多个用户使用相同的用户名同时登录到同一台应用服务器,则 SGD 可能无法辨别打印作业属于哪个用户。SGD 将放弃该打印作业,并记录它执行了此放弃操作。在没有 SGD 打印机队列的 UNIX 或 Linux 系统应用服务器上会发生此情况。

要解决此问题,请运行 prtinstall.en.sh 脚本以配置打印机。请参见第 5.1.4.2 节 “SGD 打印机队列安装脚本”

使用 tarantella print 命令检查来自应用服务器打印系统的打印作业是否正在到达 SGD 打印队列。

5.1.9.2.5: 服务器的 Windows 名称是否与 DNS 名称相同?

如果您的 Microsoft Windows NT 服务器的 DNS 名称是 naples.example.com,而 NetBIOS 名称是 VESUVIUS,则来自该服务器的打印作业将失败,因为它们包含主机标识符 VESUVIUS 而非 naples。

可以通过编辑 /opt/tarantella/etc/data 目录中的 hostnamemap.txt 文件避免此问题。通过该文件,您可以将主机名称映射到 DNS 名称。该文件包含有关如何创建映射的说明。

5.1.9.2.6: 如果您使用的是 PDF 打印,则每台 Microsoft Windows 应用服务器上是否安装了相同的 PostScript 打印机驱动程序?

为了能够使用 PDF 打印,必须在每台 Microsoft Windows 应用服务器上安装相同的 PostScript 打印机驱动程序。

在管理控制台中,检查驱动程序的名称是否与在 "Global Settings"(全局设置)→ "Printing"(打印)选项卡或者用户配置文件或父对象的 "Printing"(打印)选项卡上的 "Postscript Printer Drive"(Postscript 打印机驱动程序)字段中配置的名称匹配。如果名称不匹配,则应用服务器上的系统事件日志将显示错误。

5.1.9.3. SGD 服务器核对表

使用以下 SGD 服务器故障排除步骤诊断 SGD 中的打印问题。

Questions

  • 5.1.9.3.1: 是否在阵列中暂停或禁用了打印?

  • 5.1.9.3.2: 对于 Microsoft Windows 客户端设备上的打印,是否禁用了客户端打印?

  • 5.1.9.3.3: 阵列配置是否已更改?

  • 5.1.9.3.4: 对于 PDF 打印,Ghostscript 在 SGD 主机上是否可用?

Questions and Answers

5.1.9.3.1: 是否在阵列中暂停或禁用了打印?

使用 tarantella print status 命令检查是否为阵列暂停或禁用了打印。

如有必要,请使用 tarantella print starttarantella print resume 启用打印。

5.1.9.3.2: 对于 Microsoft Windows 客户端设备上的打印,是否禁用了客户端打印?

在管理控制台中,检查 "Global Settings"(全局设置)→ "Printing"(打印)选项卡,或者用户配置文件或父对象的 "Printing"(打印)选项卡。查看用户是可以访问其所有的客户端打印机,还是只可以访问其默认的客户端打印机,或者无法访问任何客户端打印机。

对于 PDF 打印,请检查是否已启用 SGD PDF 打印机。

5.1.9.3.3: 阵列配置是否已更改?

如果执行以下任何操作,则不会重新配置打印:

  • 创建一个阵列

  • 向该阵列添加一台新的辅助服务器

  • 更改阵列中的主服务器

如果阵列已发生更改,则可能必须重新配置打印,以便可以将打印作业发送至正确的打印机。

5.1.9.3.4: 对于 PDF 打印,Ghostscript 在 SGD 主机上是否可用?

SGD 中的 PDF 打印使用 Ghostscript 将打印作业转换为 PDF 文件。SGD 还使用 Ghostscript 将打印作业从 PostScript 转换为 PCL。

尝试升级到 Ghostscript 的最新版本。升级之后,请确保符号链接 /opt/tarantella/var/info/gsbindir 指向新的 Ghostscript 二进制文件的安装目录。

如果 /opt/tarantella/var/log/print.log 文件包含诸如 "Can't find ps2pdf""Consider obtaining Ghostscript from http://www.ghostscript.com" 之类的消息,则 Ghostscript 未安装或安装在非标准位置。

有关如何解决 Ghostscript 安装问题的详细信息,请参见第 5.1.5.1 节 “在 SGD 主机上检查 Ghostscript 安装”

5.1.9.4. 跟踪打印作业

如果上述的核对表未解决您的 SGD 打印问题,请尝试以下故障排除步骤。通过这些步骤,您可以跟踪打印作业从应用服务器到 SGD 服务器再到客户端设备的的进度。

Questions

  • 5.1.9.4.1: 步骤 1:是否可以从 SGD 服务器进行打印?

  • 5.1.9.4.2: 步骤 2:SGD 服务器上是否安装了 SGD 打印机队列?

  • 5.1.9.4.3: 步骤 3:打印作业是否正在离开 UNIX 或 Linux 平台应用服务器?

  • 5.1.9.4.4: 步骤 4:UNIX 或 Linux 系统假脱机目录中是否存在打印作业?

  • 5.1.9.4.5: 步骤 5:打印作业是否正在离开 Windows 应用服务器?

  • 5.1.9.4.6: 步骤 6:打印作业是否正要到达 SGD 服务器?

  • 5.1.9.4.7: 步骤 7:是否已检查了打印日志文件?

Questions and Answers

5.1.9.4.1: 步骤 1:是否可以从 SGD 服务器进行打印?

将 X 或字符应用程序配置为在 SGD 服务器上运行。显示一个终端窗口,例如 xterm,然后从您的 SGD Webtop 中启动应用程序。

通过运行 /opt/tarantella/bin/scripts/printtestpage.en.sh 脚本尝试打印一个测试页。

如果测试页无法打印,请运行 /opt/tarantella/bin/scripts/printtestpage.en.sh --direct。此操作将绕过 UNIX 或 Linux 系统假脱机程序。

检查以下问题:

  • 是否已打印了第一张测试页?

    该问题与打印作业从应用服务器移动到 SGD 服务器相关。

    • 对于 UNIX 或 Linux 平台应用服务器,请转至步骤 3

    • 对于 Windows 远程桌面服务,请转至步骤 5

  • 是否已打印了第二张测试页?

    该问题与 SGD 主机上 UNIX 或 Linux 系统的打印系统相关。

    请调查并解决任何问题,并使用您的 UNIX 或 Linux 系统文档获得帮助。然后尝试再次打印。

  • 是否所有测试页都未打印?

    该问题与 SGD 服务器相关。

    转至步骤 2

5.1.9.4.2: 步骤 2:SGD 服务器上是否安装了 SGD 打印机队列?

在 SGD 主机上的打印机列表中,检查 tta_printer 的条目。

要了解如何显示打印机列表,请参考您的 UNIX 或 Linux 系统文档。在某些系统上,可以使用 lpstat -t。如果您的系统包含文件 /etc/printcap,则其中以纯文本格式包含了打印机列表。

检查以下问题:

  • SGD 主机中是否存在 tta_printer 打印机?

    该问题与打印作业从 SGD 服务器移动到客户端设备相关。转至步骤 7

  • SGD 主机中是否缺少 tta_printer 打印机?

    在 SGD 服务器上运行 prtinstall.en.sh 脚本。然后尝试再次打印。

    另请参见第 5.1.4.2 节 “SGD 打印机队列安装脚本”

5.1.9.4.3: 步骤 3:打印作业是否正在离开 UNIX 或 Linux 平台应用服务器?

使用所配置的一个应用程序对象在 UNIX 或 Linux 系统应用服务器上显示一个终端窗口,尝试使用 SGD 打印机打印一个小的文本文件。例如,键入命令:lp -d tta_printer /etc/hosts

检查以下问题:

  • 该命令是否返回了错误消息?

    检查是否将 UNIX 或 Linux 平台应用服务器配置为通过 SGD 进行打印。您可能需要运行 prtinstall.en.sh 脚本。有关更多详细信息,请参见第 5.1.4.2 节 “SGD 打印机队列安装脚本”

  • 该命令是否返回了打印作业 ID?

    这表明已正确配置了 SGD 打印,但是问题可能在于 UNIX 或 Linux 打印系统。转至步骤 4

5.1.9.4.4: 步骤 4:UNIX 或 Linux 系统假脱机目录中是否存在打印作业?

打印假脱机目录因不同的 UNIX 或 Linux 系统而异。请参考 UNIX 或 Linux 系统文档以获取帮助。

检查以下问题:

  • 假脱机目录中是否存在该打印作业?

    应用服务器与 SGD 服务器之间可能有网络问题。转至步骤 6

  • 假脱机目录中是否缺少该打印作业?

    检查您的 UNIX 或 Linux 系统 LPD 打印配置。例如,确保 /etc/hosts.equiv/etc/hosts.lpd 中包含合适的条目,并且不存在 .deny 文件,例如 /etc/hosts.equiv.deny

    检查 lpd 守护进程是否正在运行和侦听。例如,使用以下命令:

    # ps -ef | grep lpd
    # netstat -a | grep printer

    再次尝试打印。

5.1.9.4.5: 步骤 5:打印作业是否正在离开 Windows 应用服务器?

检查应用服务器上的打印队列。如果需要有关如何执行此操作的帮助信息,请参考您的系统文档。

检查以下问题:

  • 打印作业是否正在离开应用服务器?

    应用服务器与 SGD 服务器之间可能有网络问题。转至步骤 6

  • 打印作业是否正在离开应用服务器?

    检查 SGD 打印机的配置,如下所述:

    • 检查从应用服务器到 SGD 服务器的 pingtelnet 命令是否可以成功。

    • 在 "Event Log"(事件日志)中查找错误。

    • 在命令提示符中,使用 lpr -s server -p tta_printer filename 命令进行打印。如果该命令起作用,则说明应用服务器上的打印机驱动程序可能未正确安装或配置。

5.1.9.4.6: 步骤 6:打印作业是否正要到达 SGD 服务器?

检查 SGD 服务器上的 SGD 打印假脱机目录:/opt/tarantella/var/spool/opt/tarantella/var/print/queue

检查以下问题:

  • SGD 服务器上是否存在该打印作业?

    检查您在应用程序对象中是否使用了全限定 DNS 名称,以及名称解析是否正常工作。

    有关更多信息,请检查打印日志文件。转至步骤 7

  • SGD 服务器中是否缺少该打印作业?

    检查 SGD 服务器的配置,如下所述:

    • 检查您的 UNIX 或 Linux 系统 LPD 打印配置。

      例如,确保 /etc/hosts.equiv/etc/hosts.lpd 中包含合适的条目,并且不存在 .deny 文件,例如 /etc/hosts.equiv.deny

      检查 lpd 守护进程是否正在运行和侦听。例如,使用以下命令:

      # ps -ef | grep lpd
      # netstat -a | grep printer
    • 检查从应用服务器到 SGD 服务器的 pingtelnet 命令是否可以成功。

    • 如果您在使用 Windows 远程桌面服务,请显示一个命令提示符并使用 lpr -s server -p tta_printer filename 命令进行打印。如果该命令起作用,则说明应用服务器上的打印机驱动程序未正确安装或配置。

5.1.9.4.7: 步骤 7:是否已检查了打印日志文件?

可以使用 tarantella query 命令检查阵列中的日志。日志文件存储在阵列中每台 SGD 服务器上的 /opt/tarantella/var/log 中。

如果打印日志文件为空,请编辑日志过滤器,以记录打印消息。在管理控制台中,转至 "Global Settings"(全局设置)→ "Monitoring"(监视)选项卡,然后添加以下日志过滤器:

server/printing/*:print%%PID%%.log
server/printing/*:print%%PID%%.jsl

如果该日志包含的消息表明用户名映射有问题,则说明您正在使用应用服务器上的共享帐户。请参见 appserver 共享帐户

5.1.10. 对其他打印问题进行故障排除

本节介绍了通过 SGD 进行打印时出现的一些典型问题,其中包括以下主题。

5.1.10.1. 对打印机首选项和设置进行故障排除

从 Windows 应用程序进行打印时,用户可为其使用的打印机设置首选项。以下是打印机首选项的常见问题。

5.1.10.1.1. 当前客户端打印机首选项被忽略

首次为用户定义客户端打印机时,打印机首选项(例如纸张大小和方向)是应用服务器的打印机驱动程序的默认设置,而非客户端打印机的当前首选项。

用户可以在应用服务器上更改打印机首选项,当用户下一次通过具有同一打印机的客户端设备进行连接时,会使用这些修改后的首选项。

5.1.10.1.2. 未记住对打印机首选项所做的更改

用户更改其打印机首选项(例如更改默认纸张大小)后,某些时候当下次运行 Windows 应用程序时可能未记住此更改。

在更改首选项与新首选项被发送到客户端之间有一个时间延迟。更改打印机首选项后,应该稍等几分钟,然后再从 Windows 应用程序中注销。

5.1.10.1.3. 打印机首选项损坏

如果存在大量的客户端打印机,打印机首选项有时可能会损坏。

使用 "Printer Preference Caching"(打印机首选项缓存)(--noprintprefs) 属性为 Windows 应用程序禁用对打印机首选项的存储,如下所示:

$ tarantella object edit --name appname --noprintprefs 1

其中,appname 是 Windows 应用程序的名称。

5.1.10.1.4. 用户更改打印机时打印机首选项丢失

打印机首选项直接链接到驱动程序名称。因此,如果用户更改了他们使用的打印机并且新的打印机使用不同的驱动程序名称,则他们必须重新设置打印机首选项。

5.1.10.1.5. 无法在远程 Windows 应用程序会话中设置本地打印机设置

当使用 SGD 时,无法在远程 Windows 应用程序会话中对打印机设置本地打印机的打印机设置。不过,当使用 Microsoft 远程桌面连接客户端时,可以执行该设置。

SGD 不支持此功能。

5.1.10.1.6. 使用 PDF 打印时打印机设置被忽略

如果在 Microsoft Windows 客户端设备上使用 PDF 打印,某些打印机设置可能会被 Adobe Reader 忽略。

这可能是因为用于 PDF 打印的打印机驱动程序具有在客户端打印机上不可用的设置。

某些设置(例如页面方向)必须在 Adobe Reader 打印对话框中以及在 Windows 应用程序会话中在打印机上进行设置。设置 Reader 后,设置将被记住。

5.1.10.2. 禁用 SGD 打印后,打印作业可以进行排队

禁用 SGD 打印系统后,通过运行 tarantella print stop 仍可以在应用服务器对打印作业进行假脱机处理。这些作业将一直保持在队列中,直到重新启动 SGD 打印。

要阻止提交打印作业,请在应用服务器上手动禁用 SGD 打印队列。

5.1.10.3. 使用 PDF 打印时字体未正确打印

使用 PDF 打印时,用户可能会发现打印输出上的字体不是预期的字体。

当从 Windows 应用程序进行打印时,因为 PDF 打印依赖于 Windows 打印机驱动程序、用来提供其输出的 Ghostscript 和 PDF 查看器的组合,因此,您可能必须试验这些组件中的每一个组件的字体设置并查看这是否可以产生更好的效果。

5.1.10.3.1. TrueType 字体和 Windows 应用程序

从 Windows 应用程序进行打印并且文档包含 TrueType 字体时,用户可能会发现打印机使用自己的字体(称为设备字体)而不是 TrueType 字体。这可能会导致某些字符被打印为“空白框”([])。

解决此问题的方法是强制打印机下载 TrueType 字体用于打印。

在 Windows 应用程序中显示 "Print"(打印)对话框并选择 "Properties"(属性)→ "Advanced"(高级)。在 "Graphic"(图形)部分中,将 "TrueType Font"(TrueType 字体)选项更改为 "Download as Softfont"(下载为软字体)。

5.1.10.4. 在 Windows 应用程序会话中更改打印机名称

在 Windows 远程桌面服务会话中创建的打印机名称取决于客户端设备平台。

对于 Unix、Linux 和 Mac OS X 平台客户端设备,该名称来源于用于客户端设备的打印机配置文件。有关更多详细信息,请参见第 5.1.7 节 “配置到 UNIX、Linux 和 Mac OS X 平台客户端设备的打印”

对于 Windows 客户端设备,该名称来源于打印机驱动程序。

如果您使用的是 PDF 打印,则可以修改 PDF 打印机的名称。请参见第 5.1.10.5 节 “更改 SGD PDF 打印机的名称”

5.1.10.5. 更改 SGD PDF 打印机的名称

SGD PDF 打印机的名称是可配置的。可以按以下方式修改这些名称。

要为所有用户更改 PDF 打印机名称,请使用以下命令:

$ tarantella config edit \
--printing-pdfprinter name --printing-pdfviewer name

要为某个组织、组织单元或用户配置文件对象更改 PDF 打印机名称,还必须配置对象以覆盖父对象的打印设置。使用以下命令:

$ tarantella object edit --name object \
--userprintingconfig true --pdfprinter name --pdfviewer name

5.1.10.6. 用户在 Windows 应用程序会话中看到了一个名为 _Default 的打印机?

从 UNIX、Linux 或 Mac OS X 平台客户端设备访问 Windows 应用程序的用户可能会在其 Windows 应用程序会话中看到一个名为 _Default 的打印机。如果用户的客户端打印机具有一个不同的名称或者他们没有客户端打印机,则这可能会给用户造成困惑。

这是由 printerinfo.txt 文件中的默认设置导致的,当从 Windows 应用程序进行打印时,该文件用于将打印机驱动程序名称与打印作业相关联。

要更正打印机名称,请编辑 printerinfo.txt 文件。

要删除 _Default 打印机名称,请从 printerinfo.txt 文件中删除 _Default 条目。

有关 printerinfo.txt 文件的更多详细信息,请参见第 5.1.7 节 “配置到 UNIX、Linux 和 Mac OS X 平台客户端设备的打印”