打印

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

安装

Linux VDA 要求同时启用 cupsfoomatic 过滤器。在安装 VDA 时安装过滤器。还可以根据分发情况手动安装过滤器。例如:

在 RHEL 7 上:

sudo yum –y install cups

sudo yum -y install foomatic-filters

在 RHEL 6:

sudo yum –y install cups

sudo yum -y install foomatic

配置

Citrix 提供了三种类型的通用打印机驱动程序(postscript、pcl5 和 pcl6)。但是,通用打印机驱动程序可能与您的客户端打印机不兼容。在这种情况下,早期版本中的唯一选择为编辑 ~/.CtxlpProfile$CLIENT_NAME 配置文件。自版本 1906 起,可以选择改为在 Citrix Studio 中配置打印机驱动程序映射和兼容性策略。

要在 Citrix Studio 中配置打印机驱动程序映射和兼容性策略,请执行以下操作:

  1. 选择打印机驱动程序映射和兼容性策略。
  2. 单击添加
  3. 使用客户端打印机的驱动程序名称填写驱动程序名称。如果使用适用于 Linux 的 Citrix Workspace 应用程序,请改为填写打印机名称。
  4. 选择替换为并键入 VDA 上的驱动程序文件的绝对路径。

    打印机驱动程序映射和兼容性策略示意图

注意:

  • 仅支持 ppd 驱动程序文件。
  • 不支持打印机驱动程序映射和兼容性策略的其他选项。只有替换为生效。

使用情况

可以从已发布的桌面和已发布的应用程序打印。仅客户端默认打印机会映射到 Linux VDA 会话。对于桌面和应用程序,打印机名称不同。

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

注意:

如果同一用户同时打开了已发布的桌面和已发布的应用程序,会话可以访问两种打印机。无法在已发布的应用程序会话中的桌面打印机上打印,也无法在已发布的桌面会话中的应用程序打印机上打印。

故障排除

无法打印

打印无法正常工作时,请检查打印守护程序 ctxlpmngt 和 CUPS 框架。

打印守护程序 ctxlpmngt 是一个按会话进程,必须在会话期间内运行。运行以下命令以确认打印守护程序是否正在运行。如果 ctxlpmngt 未运行,请从命令行中手动启动 ctxlpmngt

ps –ef | grep ctxlpmngt

如果仍无法打印,请检查 CUPS 框架。ctxcups 服务用于打印机管理,并与 Linux CUPS 框架通信。此进程在每个计算机上有一个,可通过运行以下命令进行检查:

service ctxcups status

收集 CUPS 日志的额外步骤

要收集 CUPS 日志,请运行以下命令以配置 CUPS 服务文件。否则,CUPS 日志无法记录在 hdx.log 中:

sudo service cups stop

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

PrivateTmp=false

sudo service cups start

sudo systemctl daemon-reload

注意:

此配置仅在出现问题时收集完整的打印日志时设置。在正常情况下,不建议做此配置,因为这会损害 CUPS 安全性。

打印输出为乱码

打印机驱动程序不兼容可能会导致输出乱码。系统中为每个用户提供了驱动程序配置,该配置可通过编辑 ~/.CtxlpProfile$CLIENT_NAME 配置文件进行配置。

[DEFAULT_PRINTER]

printername=

model=

ppdpath=

drivertype=

重要:

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
    
    

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

     model=xerox/ph3115.ppd.gz
    
  • 如果通用打印机驱动程序与客户端打印机不兼容,请配置本机打印机驱动程序的 ppd 文件路径。ppdpath 值是本机打印机驱动程序文件的绝对路径。

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

     ppdpath=/home/tester/NATIVE_PRINTER_DRIVER.ppd
    
  • Citrix 提供了三种类型的通用打印机驱动程序(postscript、pcl5 和 pcl6)。可以根据打印机属性配置驱动程序类型。

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

     drivertype=pcl5
    

输出大小为零

尝试使用其他类型的打印机。并尝试使用 CutePDF 和 PDFCreator 之类的虚拟打印机以确定此问题是否与打印机驱动程序有关。

打印作业取决于客户端默认打印机的打印机驱动程序。务必确定当前活动驱动程序类型。如果客户端打印机使用的是 PCL5 驱动程序,而 Linux VDA 选择的是 Postscript 驱动程序,则会出现问题。

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

  1. 登录到已发布的桌面会话。
  2. 运行 vi ~/.CtxlpProfile$CLIENT_NAME 命令。
  3. 添加以下字段以在 Linux VDA 上保存后台打印文件:

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

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

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

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

    如果后台打印文件是 PCL,或者客户端操作系统是 Windows,则将后台打印文件复制到客户端,并使用不同的打印机驱动程序在客户端打印机上打印该文件。

  8. 将映射的打印机更改为使用不同的打印机驱动程序。下例以 PostScript 客户端打印机为例:

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

    2. 打开打印管理门户:

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

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

    5. Make(制造商)和 Model(型号)字段中,从 Citrix UPD 驱动程序中选择不同的打印机驱动程序。例如,如果安装了 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>