打印

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

安装

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. 打印文档以重现问题。打印后,将有一个 spool 文件保存在 /var/spool/cups-ctx/$logon_user/$spool_file 下。

  6. 确认 spool 是否为空。如果 spool 文件大小为零,表示有问题。请联系 Citrix 支持(并提供打印日志)以获取更多指导。

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

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

  8. 要将映射的打印机更改为其他第三方打印机驱动程序,请使用 postscript 客户端打印机,例如:

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

    2. 打开打印管理门户:

      localhost:631
      <!--NeedCopy-->
      
    3. 选择映射的打印机 CitrixUniversalPrinter:$ClientName:app/dek$SESSION_IDModify Printer(修改打印机)。此操作要求使用管理员权限。

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

    5. 在“Make and Model”(品牌和型号)页面,选择其他 postscript 驱动程序,而不是 Citrix UPD 驱动程序(例如,Citrix Universal Driver Postscript)。例如,如果安装了 CUPS-PDF 虚拟打印机,可以选择“Generic CUPS-PDF Printer”(通用 CUPS-PDF 打印机)。保存修改。

    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-->
打印