打印

本文提供有关打印最佳实践的信息。

安装

Linux VDA 需要 cupsfoomatic 筛选器。根据您的 Linux 发行版运行以下命令:

RHEL 7 打印支持:

sudo yum –y install cups

sudo yum -y install foomatic-filters
<!--NeedCopy-->
  • RHEL 6 打印支持:
sudo yum –y install cups

sudo yum -y install foomatic
<!--NeedCopy-->

用法

您可以从已发布的桌面和已发布的应用程序进行打印。只有客户端默认打印机映射到 Linux VDA 会话中。桌面和应用程序的打印机名称必须不同。请考虑以下事项:

  • 对于已发布的桌面: CitrixUniversalPrinter:$CLIENT_NAME:dsk$SESSION_ID

  • 对于已发布的应用程序: CitrixUniversalPrinter:$CLIENT_NAME:app$SESSION_ID

注意:

如果同一用户同时打开已发布的桌面和已发布的应用程序,则两个打印机都可用于会话。在已发布的应用程序会话中打印到桌面打印机,或在已发布的桌面中打印到应用程序打印机将失败。

故障排除

无法打印

当打印无法正常工作时,有多种项目需要检查。打印守护程序是每个会话的进程,并且必须在会话期间运行。请验证打印守护程序是否正在运行。

ps –ef | grep ctxlpmngt
<!--NeedCopy-->

如果 ctxlpmngt 进程未运行,请从命令行手动启动 ctxlpmngt。如果打印仍然无法工作,请检查 CUPS 框架。ctxcups 服务用于打印机管理,并与 Linux CUPS 框架通信。它是每台计算机一个进程,可以通过以下方式进行检查:

service ctxcups status
<!--NeedCopy-->

打印 CUPS 时出现额外日志

作为 Linux VDA 的组件之一,获取打印组件日志的方法与其他组件类似。

对于 RHEL,需要一些额外的步骤来配置 CUPS 服务文件。否则,某些日志无法记录在 hdx.lo 中:

sudo service cups stop

sudo vi /etc/systemd/system/printer.target.wants/cups.service

PrivateTmp=false

sudo service cups start

sudo systemctl daemon-reload
<!--NeedCopy-->

注意:

此配置仅用于在出现问题时收集完整的打印日志。通常不建议使用此配置,因为它会破坏 CUPS 安全性。

打印输出乱码

不兼容的打印机驱动程序可能会导致输出乱码。可以使用按用户驱动程序配置,通过编辑 ~/.CtxlpProfile$CLIENT_NAME 配置文件进行配置:

[DEFAULT_PRINTER]

printername=

model=

ppdpath=

drivertype=
<!--NeedCopy-->

重要:

printername 是一个字段,其中包含当前客户端默认打印机的名称。它是一个只读值。请勿编辑。

ppdpathmodeldrivertype 字段不能同时设置,因为对于映射的打印机,只有一个会生效。

如果通用打印机驱动程序与客户端打印机不兼容,请使用 model= 选项配置本机打印机驱动程序的型号。您可以使用 lpinfo 命令查找打印机的当前型号名称:

lpinfo –m

…

xerox/ph3115.ppd.gz Xerox Phaser 3115, SpliX V. 2.0.0

xerox/ph3115fr.ppd.gz Xerox Phaser 3115, SpliX V. 2.0.0

xerox/ph3115pt.ppd.gz Xerox Phaser 3115, SpliX V. 2.0.0
<!--NeedCopy-->

然后,您可以设置型号以匹配打印机:

Model=xerox/ph3115.ppd.gz
<!--NeedCopy-->

如果通用打印机驱动程序与客户端打印机不兼容,请配置本机打印机驱动程序的 PPD 文件路径。ppdpath 的值是本机打印机驱动程序文件的绝对路径。

例如,在 /home/tester/NATIVE_PRINTER_DRIVER.ppd 下有一个 ppd 驱动程序

ppdpath=/home/tester/NATIVE_PRINTER_DRIVER.ppd
<!--NeedCopy-->

Citrix® 提供了三种类型的通用打印机驱动程序(postscript、pcl5 和 pcl6)。如果没有可用的本机打印机驱动程序,您可以配置驱动程序类型。

例如,如果客户端默认打印机驱动程序类型为 PCL5:

drivertype=pcl5
<!--NeedCopy-->

输出大小为零

尝试不同类型的打印机。并尝试使用 CutePDF 和 PDFCreator 等虚拟打印机,以查明此问题是否与打印机驱动程序有关。

打印作业取决于客户端默认打印机的打印机驱动程序。识别当前活动驱动程序类型非常重要。如果客户端打印机使用 PCL5 驱动程序,但 Linux VDA 选择 Postscript 驱动程序,则可能会出现问题。

如果打印机驱动程序类型正确,您可以通过执行以下步骤来识别问题:

要识别此问题:

  1. 登录到 ICA® 会话桌面。
  2. vi ~/.CtxlProfile$CLIENT_NAME
  3. 将以下字段添加到 Linux VDA 上的保存池文件:

    deletespoolfile=no
    <!--NeedCopy-->
    
  4. 注销并重新登录以加载配置更改。

  5. 打印文档以重现问题。打印后,假脱机文件将保存在 /var/spool/cups-ctx/$logon_user/$spool_file 下。

  6. 验证假脱机是否为空。如果假脱机文件为零,则表示存在问题。请联系 Citrix 支持(并提供打印日志)以获取更多指导。

  7. 如果假脱机大小不为零,请将文件复制到客户端。假脱机文件内容取决于客户端默认打印机的打印机驱动程序类型。如果映射的打印机(本机)驱动程序是 postscript,则假脱机文件可以直接在 Linux 操作系统中打开。验证内容是否正确。

    如果假脱机文件是 PCL,或者客户端操作系统是 Windows,请将假脱机文件复制到客户端并使用客户端打印机进行打印。完成此步骤后,请使用其他打印机驱动程序进行测试。

  8. 要将映射的打印机更改为另一个第三方打印机驱动程序,请以 postscript 客户端打印机为例:

    1. 登录到活动会话并在客户端桌面上打开浏览器。

    2. 打开打印管理门户:

      localhost:631
      <!--NeedCopy-->
      
    3. 选择映射的打印机 CitrixUniversalPrinter:$ClientName:app/dek$SESSION_ID 并单击修改打印机。此操作需要管理员权限。

    4. 保留 cups-ctx 连接,然后单击“继续”以更改打印机驱动程序。

    5. 在“制造商和型号”页面中,选择其他 postscript 驱动程序而不是 Citrix UPD 驱动程序(例如,Citrix Universal™ Driver Postscript)。例如,如果安装了 CUPS-PDF 虚拟打印机,请选择 Generic CUPS-PDF Printer。保存修改。

    6. 如果此过程成功,请在 .CtxlpProfile$CLIENT_NAME 中配置驱动程序的 PPD 文件路径,以允许映射的打印机使用此第三方驱动程序。

已知问题

在 Linux VDA 上打印期间已发现以下问题:

CTXPS 驱动程序与某些 PLC 打印机不兼容

如果遇到打印输出损坏,请将打印机驱动程序设置为制造商提供的本机驱动程序。

大型文档打印性能缓慢

当您在本地客户端打印机上打印大型文档时,文档会通过服务器连接进行传输。在慢速连接上,传输可能需要很长时间。

从其他会话中看到的打印机和打印作业通知

Linux 没有与 Windows 操作系统相同的会话概念。因此,所有用户都会收到系统范围的通知。您可以通过更改 CUPS 配置文件 /etc/cups/cupsd.conf 来禁用这些通知。

找到文件中配置的当前策略名称:

DefaultPolicy default

如果策略名称为 default,请将以下行添加到默认策略 XML 块中:

<Policy default>

     # Job/subscription privacy...

     JobPrivateAccess default

     JobPrivateValues default

     SubscriptionPrivateAccess default

     SubscriptionPrivateValues default

     … …

     <Limit Create-Printer-Subscription>

          Require user @OWNER

          Order deny,allow

     </Limit>

     <Limit All>

          Order deny,allow

     </Limit>

</Policy>
<!--NeedCopy-->
打印