配置和使用 CUPS 打印服务器


Red Hat Enterprise Linux 10

将您的系统配置为 CUPS 服务器,并管理打印机、打印队列和您的打印环境

Red Hat Customer Content Services

摘要

通用 Unix 打印系统(CUPS)管理{ProductName}上的打印。用户在其主机上的 CUPS 中配置打印机,以便打印。另外,您可以在 CUPS 中共享打印机以使用主机作为打印服务器。
CUPS 支持打印到:
  • AirPrint™ 和 IPP Everywhere™ 打印机
  • 网络和带有打印机应用程序的本地 USB 打印机
  • 带有传统的基于 PostScript 打印机描述(PPD)驱动程序的网络和本地 USB 打印机

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

通过 Jira 提交反馈(需要帐户)

  1. 登录到 Jira 网站。
  2. 在顶部导航栏中点 Create
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您对改进的建议。包括文档相关部分的链接。
  5. 点对话框底部的 Create

第 1 章 安装和配置 CUPS

您可以使用 CUPS 从本地主机打印。您还可以使用此主机在网络中共享打印机,并充当打印服务器。

流程

  1. 安装 cups 软件包:

    # dnf install cups
  2. 如果您将 CUPS 配置为打印服务器,请编辑 /etc/cups/cupsd.conf 文件,并进行以下更改:

    1. 如果要远程配置 CUPS 或将这个主机用作打印服务器,请配置服务侦听哪个 IP 地址和端口:

      Listen 192.0.2.1:631
      Listen [2001:db8:1::1]:631

      默认情况下,CUPS 仅侦听 localhost 接口(127.0.0.1::1)。在方括号中指定 IPv6 地址。

      重要

      不要将 CUPS 配置为侦听允许从不可信网络(如互联网)访问的接口。

    2. 通过允许 <Location /> 指令中的 IP 范围来配置哪些 IP 范围可以访问服务:

      <Location />
        Allow from 192.0.2.0/24
        Allow from [2001:db8:1::1]/32
        Order allow,deny
      </Location>
    3. <Location /admin> 指令中,配置哪些 IP 地址和范围可以访问 CUPS 管理服务:

      <Location /admin>
        Allow from 192.0.2.15/32
        Allow from [2001:db8:1::22]/128
        Order allow,deny
      </Location>

      使用这些设置时,只有 IP 地址为 192.0.2.152001:db8:1::22 的主机才能访问管理服务。

    4. 可选:配置允许访问 web 界面中的配置和日志文件的 IP 地址和范围:

      <Location /admin/conf>
        Allow from 192.0.2.15/32
        Allow from [2001:db8:1::22]/128
        ...
      </Location>
      
      <Location /admin/log>
        Allow from 192.0.2.15/32
        Allow from [2001:db8:1::22]/128
        ...
      </Location>
  3. 如果您运行 firewalld 服务,并希望配置对 CUPS 的远程访问,请在 firewalld 中打开 CUPS 端口:

    # firewall-cmd --permanent --add-port=631/tcp
    # firewall-cmd --reload

    如果您在有多个接口的主机上运行 CUPS,请考虑限制对所需网络的访问。

  4. 启用并启动 cups 服务:

    # systemctl enable --now cups

验证

  • 使用浏览器,并访问 http://<hostname>:631。如果您可以连接到 Web 界面,则 CUPS 工作正常。

    请注意,某些功能(如 Administration 选项卡)需要身份验证和 HTTPS 连接。默认情况下,CUPS 使用自签名证书进行 HTTPS 访问,因此当您验证时连接是不安全的。

第 2 章 在 CUPS 服务器上配置 TLS 加密

CUPS 支持 TLS 加密的连接,默认情况下,服务为所有需要身份验证的请求强制实施加密连接。如果没有配置证书,CUPS 会创建一个私钥和一个自签名证书。如果只从本地主机访问 CUPS ,这就足够了。对于通过网络的安全连接,请使用由证书颁发机构(CA)签名的服务器证书。

警告

如果没有加密或带有自签名的证书,中间人(MITM)攻击可能会泄露敏感数据,例如:

  • 使用 Web 界面配置 CUPS 时管理员的凭证
  • 当通过网络发送打印作业时的机密数据

先决条件

  • CUPS 已配置
  • 您创建了一个私钥,CA 为其发布了服务器证书。
  • 如果需要中间证书才能验证服务器证书,请将中间证书附加到服务器证书中。
  • 私钥不受密码保护,因为 CUPS 在服务读取密钥时,对输入密码不提供选项。
  • 证书中的规范名称(CN)或主题替代名称(SAN)字段与以下之一匹配:

    • CUPS 服务器的完全限定域名(FQDN)
    • DNS 解析服务器 IP 地址的别名
  • 私钥和服务器证书文件使用 Privacy Enhanced Mail (PEM)格式。
  • 客户端信任 CA 证书。
  • 如果启用了 FIPS 模式,客户端必须支持 Extended Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 强制实施 TLS 扩展"Extended Master Secret"

流程

  1. 编辑 /etc/cups/cups-files.conf 文件,并添加以下设置来禁用自动创建自签名证书:

    CreateSelfSignedCerts no
  2. 删除自签名证书和私钥:

    # rm /etc/cups/ssl/<hostname>.crt /etc/cups/ssl/<hostname>.key
  3. 可选:显示服务器的 FQDN:

    # hostname -f
    server.example.com
  4. 将私钥和服务器证书存储在 /etc/cups/ssl/ 目录中,例如:

    # mv /root/server.key /etc/cups/ssl/server.example.com.key
    # mv /root/server.crt /etc/cups/ssl/server.example.com.crt
    重要

    CUPS 要求您将私钥命名为 <fqdn>.key ,将服务器证书文件命名为 <fqdn>.crt。如果使用别名,则必须将文件命名为 <alias>.key<alias>.crt

  5. 对私钥设置安全权限,以使只有 root 用户可以读取此文件:

    # chown root:root /etc/cups/ssl/server.example.com.key
    # chmod 600 /etc/cups/ssl/server.example.com.key

    因为在客户端和服务器建立安全连接之前,证书是它们之间通信的一部分,所以任何客户端都可以检索证书,而无需身份验证。因此,您不需要对服务器证书文件设置严格的权限。

  6. 恢复 SELinux 上下文:

    # restorecon -Rv /etc/cups/ssl/
  7. 可选:显示证书的 CN 和 SAN 字段:

    # openssl x509 -text -in /etc/cups/ssl/server.example.com.crt
    Certificate:
      Data:
        ...
        Subject: CN = server.example.com
        ...
        X509v3 extensions:
          ...
          X509v3 Subject Alternative Name:
            DNS:server.example.com
      ...
  8. 如果服务器证书中的 CN 或 SAN 字段包含与服务器的 FQDN 不同的别名,请将 ServerAlias 参数添加到 /etc/cups/cupsd.conf 文件中:

    ServerAlias alternative_name.example.com

    在这种情况下,使用替代名称而不是流程剩余部分中的 FQDN。

  9. 默认情况下,CUPS 仅在任务需要身份验证时才强制实施加密的连接,例如在 web 界面中的 /admin 页面中执行管理任务时。

    要为整个 CUPS 服务器强制实施加密,请将 Encryption Required 添加到 /etc/cups/cupsd.conf 文件中的所有 <Location> 指令中,例如:

    <Location />
      ...
      Encryption Required
    </Location>
  10. 重启 CUPS:

    # systemctl restart cups

验证

  1. 使用浏览器并访问 https://<hostname>:631/admin/。这要求您的浏览器信任 CA 证书。如果连接成功,则您正确地在 CUPS 中配置了 TLS 加密。
  2. 如果您为整个服务器所需的该加密,请访问 http://<hostname>:631/。本例中,CUPS 返回一个 Upgrade Required 错误。

故障排除

  • 显示 cups 服务的 systemd 日志条目:

    # journalctl -u cups

    在使用 HTTPS 协议无法连接到 Web 界面后,如果日志包含 Unable to encrypt connection: Error while reading file 错误,请验证私钥和服务器证书文件的名称。

默认情况下,sysrootwheel 组的成员可以在 web 界面中执行管理任务。但是,某些其他服务也使用这些组。例如,wheel 组的成员默认可以使用 sudo 运行具有 root 权限的命令。为了避免 CUPS 管理员在其他服务中获得意外权限,请为 CUPS 管理员使用专用组。

先决条件

  • CUPS 已配置
  • 您要使用的客户端的 IP 地址具有访问 Web 界面中管理区域的权限。

流程

  1. 为 CUPS 管理员创建一个组:

    # groupadd cups-admins
  2. 将应在 web 界面中管理服务的用户添加到 cups-admins 组中:

    # usermod -a -G cups-admins <username>
  3. 更新 /etc/cups/cups-files.conf 文件中 SystemGroup 参数的值,并附加 cups-admin 组:

    SystemGroup sys root wheel cups-admins

    如果只有 cups-admin 组应该具有管理访问权限,请从参数中删除其他组名称。

  4. 重启 CUPS:

    # systemctl restart cups

验证

  1. 使用浏览器并访问 https://<hostname_or_ip_address>:631/admin/

    注意

    只有在使用 HTTPS 协议时,才能访问 Web UI 中的管理区域。

  2. 开始执行一个管理任务。例如,单击 Add printer
  3. Web 界面会提示输入用户名和密码。要继续操作,请使用其是 cups-admins 组成员的用户凭证进行身份验证。

    如果身份验证成功,此用户可以执行管理任务。

Red Hat Enterprise Linux (RHEL)为 CUPS 提供不同的带有打印机驱动程序的软件包。以下是这些软件包的的总体概述,以及它们包含哪些供应商的驱动程序:

Expand
表 4.1. 驱动程序软件包列表
软件包名称打印机的驱动程序

cups

zebra, Dymo

c2esp

Kodak

foomatic

Brother, Canon, Epson, Gestetner, HP, Infotec, Kyocera, Lanier, Lexmark, NRG, Ricoh, Samsung, Savin, Sharp, Toshiba, Xerox 等

gutenprint-cups

Brother, Canon, Epson, Fujitsu, HP, Infotec, Kyocera, Lanier, NRG, Oki, Minolta, Ricoh, Samsung, Savin, Xerox 等

hplip

HP

pnm2ppa

HP

splix

Samsung、Xerox 等

请注意,一些软件包可能包含同一打印机厂商或打印机型号的驱动程序,但具有不同的功能。

安装所需的软件包后,您可以在 CUPS Web 界面中或使用 lpinfo -m 命令显示驱动程序的列表。

CUPS 支持无驱动程序打印,这意味着您可以在不为打印机型号提供任何特定于硬件的软件的情况下打印。因此,打印机必须告知客户端其功能,并使用以下标准之一:

  • AirPrint™
  • IPP Everywhere™
  • Mopria®
  • Wi-Fi Direct Print Services

您可以使用 ipptool 工具发现打印机是否支持无驱动程序打印。

先决条件

  • 打印机或远程打印服务器支持 Internet 打印协议(IPP)。
  • 主机可以连接到打印机或远程打印服务器的 IPP 端口。默认 IPP 端口为 631。

流程

  • 查询 ipp-versions-supporteddocument-format-supported 属性,并确保 get-printer-attributes 测试通过:

    • 对于远程打印机,请输入:

      # ipptool -tv ipp://<ip_address_or_hostname>:631/ipp/print get-printer-attributes.test | grep -E "ipp-versions-supported|document-format-supported|get-printer-attributes"
      Get printer attributes using get-printer-attributes      [PASS]
          ipp-versions-supported (1setOf keyword) = ...
          document-format-supported (1setOf mimeMediaType) = ...
    • 对于远程打印服务器上的队列,请输入:

      # ipptool -tv ipp://<ip_address_or_hostname>:631/printers/<queue_name> get-printer-attributes.test | grep -E "ipp-versions-supported|document-format-supported|get-printer-attributes"
      Get printer attributes using get-printer-attributes      [PASS]
          ipp-versions-supported (1setOf keyword) = ...
          document-format-supported (1setOf mimeMediaType) = ...

    要确保无驱动程序打印可以正常工作,请在输出中验证:

    • get-printer-attributes 测试返回 PASS
    • 打印机支持的 IPP 版本是 2.0 或更高版本。
    • 格式列表包含以下内容之一:

      • application/pdf
      • image/urf
      • image/pwg-raster
    • 对于彩色打印机,输出中包含上述格式之一,还包含image/jpeg

第 6 章 无驱动程序 USB 打印和扫描

无驱动程序打印和扫描对使用 USB 连接的设备有变体。其涵盖在 IPP over USB 标准中。您需要安装 ipp-usb 软件包,以便无驱动程序打印和扫描可以正常工作。它在本地主机上使用 Avahi 注册设备,使 USB 设备看起来像一个网络设备。

6.1. 安装并检查设备功能

在无驱动程序打印中,安装设备涉及到在网络上识别该设备,并使用打印服务器设置打印队列。然后,您可以通过访问打印队列中的设置或使用诸如 ipptool 的工具来验证设备的功能。

先决条件

  • 您可以更新设备固件。
  • 如果没有用于从远程打印服务器安装打印机,您可以停止并禁用 cups-browsed 服务。请注意,在这种情况下,BrowsePoll 服务器在 /etc/cups/cups-browsed.conf 文件中使用。

流程

  1. 安装 ipp-usb 软件包:

    # dnf install ipp-usb
    注意

    ipp-usb 软件包默认与 CUPS 和 sane-airscane 软件包一起安装。

  2. 检查设备是否有打印功能:

    1. 验证该设备是否被 ipp-usb 识别:

      # sudo ipp-usb check
    2. 检查设备是否在在现有目的地中被 CUPS 识别。ipp-usb 创建的服务名称具有后缀 _USB

      $ lpstat -e
      Canon_MF440_Series_USB

      ipp-usb 创建的服务名称具有 _USB 后缀。例如,这里 Canon_MF440_Series_USB 代表名为 Canon I-Sensys MF433 的 IPP-over-USB 设备

      重要

      如果 lpstat -e 命令的输出中显示 Canon_MF440_Series_USB,但没有在应用程序中显示,请向应用程序报告问题。

    3. 检查设备功能:

      # ipptool -tv ipp://localhost:60000/ipp/print get-printer-attributes.test
      
      # lpoptions -p Canon_MF440_Series_USB -l

      ipptool 命令返回设备支持的所有 IPP 属性。如果您的打印选项在 IPP 响应中存在,但没有在 lpoptions 输出中存在,则它是一个 CUPS 问题,因为通用的 PPD 选项是从某些属性生成的。lpoptions 工具返回可用的 PPD 选项。

  3. 检查设备是否有扫描功能:

    1. 检查 sane-airscan 后端是否能识别您的设备:

      # scanimage -L
      
      device `airscan:e0:HP LaserJet MFP M130fw' is a eSCL HP LaserJet MFP M130fw ip=127.0.0.1
      Here, the HP LaserJet MFP M130fw device here is used for illustration, it does not show its real IPP-over-USB compatibility or its real options shared via AirScan from ipp-usb.
    2. 检查设备功能:

      # scanimage --help -d 'airscan:e0:HP LaserJet MFP M130fw (E700D6)'

6.2. 迁移现有的经典打印队列和扫描仪设备

ipp-usb 软件包与经典打印和 IPP-over-USB 设备的扫描驱动程序不兼容,因此升级后需要根据用户的选择手动进行干预。您可以查看可用的打印和扫描功能,并决定对设备使用哪种支持:

  • 无驱动程序
  • 经典驱动程序

流程

使用无驱动程序支持 USB 设备

要将带有经典驱动程序的现有配置迁移到 USB 设备的无驱动程序支持,请遵循以下提到的步骤,具体取决于设备功能:

  1. 如果设备有打印功能,请删除过去为该设备安装的任何现有打印机。
  2. 要搜索打印机名称,请运行:

    # lpstat -a
  3. 删除打印机:

    # lpadmin -x <printer_name>
  4. 如果设备有扫描功能,请禁用提供扫描支持的 SANE 后端,例如 hpaio。您可以通过在配置文件 /etc/sane.d/dll.conf 或目录 /etc/sane.d/dll.d 中的特定文件中注释掉其名称,或者卸载扫描驱动程序来实现这一点。例如,要禁用 hpaio 扫描后端:

    # scanimage -L
    device `hpaio:/usb/laserjet_mfp_m129-m134?serial=XXXX' is a Hewlett-Packard laserjet_mfp_m129-m134 all-in-one
    device `airscan:e0:HP LaserJet MFP M130fw (E700D6)' is a eSCL HP LaserJet MFP M130fw (E700D6) ip=127.0.0.1
    
    # sudo sed -i 's,^\s*hpaio$,#hpaio,' /etc/sane.d/dll.d/hpaio

    因此,后端 HPAIO 支持的扫描设备在扫描仪列表中不可见。

使用经典驱动程序来支持设备

选择经典驱动程序需要在 ipp-usb 配置中拒绝打印机模型。

  1. 搜索设备型号名称:

    # sudo ipp-usb check
    Configuration files: OK
    IPP over USB devices:
     Num  Device              Vndr:Prod  Model
       1. Bus 001 Device 005  04a9:2823  "Canon MF440 Series"
  2. ipp-usb 创建一个 quirk,并在 /etc/ipp-usb/quirks 目录中的新 quirk 文件中使用名称。请注意,.conf 后缀是必需的。

    # cat /etc/ipp-usb/quirks/canon.conf
    
    [Canon MF440 Series]
    blacklist = true
  3. 重启 ipp-usb 服务:

    $ systemctl restart ipp-usb

    此 quirk 拒绝 ipp-usb 中的设备支持,而经典驱动程序将正常工作。ipp-usb 生成的打印机被从现有打印机列表中删除。

注意

您可以通过删除 ipp-usb 软件包,并从 DNF 操作中排除它,来选择退出无驱动程序 USB 支持。

第 7 章 设置传统打印机

您可以使用打印机应用程序来支持不支持无驱动程序标准的传统打印机。在打印机应用程序中安装传统打印机后,应用程序使传统打印机可供 CUPS 使用。

重要

在 CUPS 中安装带有经典驱动程序的打印机已弃用。

您可以通过在打印机应用程序中配置一个传统打印机,将经典 CUPS 驱动程序与现代打印架构一起使用。目前,RHEL 包括基于 PAPPL 的打印机应用程序,如 lprintlegacy-printer-app。RHEL 中当前基于 PAPPL 的打印机应用程序及其正在侦听的 TCP 端口如下:

  • LPrint: 8000
  • 传统打印机应用程序:8001

7.1. 设置基于 PAPPL 的打印机应用程序

要轻松有效地支持各种打印需求,并准备好安装传统打印机,您可以设置一个基于 PAPPL 的打印机应用程序。

先决条件

  • CUPS 配置了 TLS 证书。

流程

  1. 安装基于 PAPPL 的打印机应用程序软件包,例如 lprint

    # dnf install <printer_application_name>
  2. 可选:在 firewalld 中启用端口 8000,来从远程主机访问打印机应用程序 Web 界面:

    # firewall-cmd --permanent --add-port=8000/tcp
    # firewall-cmd --reload
  3. 启用并启动服务:

    # systemctl enable --now <printer_application_name>

您可以检查 /etc/lprint.conf 配置文件中的端口。

您可以使用基于 PAPPL 的打印机应用程序 Web 界面安装传统打印机。

先决条件

  • CUPS 配置了 TLS 证书。
  • 打印机应用程序已配置且正在运行。

流程

  1. 在打印机应用程序主页中,单击 Add Printer
  2. 对于网络打印机,请选择 printer namedevicehostname/IP address,请从提供的列表中选择驱动程序名称,然后单击 Add Printer。您还可以使用 auto-detect 选项来搜索驱动程序。

    对驱动程序使用 auto-detection 选项可能会导致为您的设备找到一个不兼容的驱动程序,如果设备型号与可用驱动程序有太大不同。建议您在打印之前检查分配的驱动程序,请手动更改驱动程序,以防止任何打印问题。

  3. 使用的驱动程序位于 block Status 中的第二行。您可以通过单击 Print Test Page 来测试功能。

您可以使用命令行界面在基于 PAPPL 的打印机应用程序中安装传统打印机。

先决条件

  • CUPS 配置了 TLS 证书。
  • 打印机应用程序已设置并正在运行。

流程

  1. 在基于 PAPPL 的打印机应用程序中搜索可用的驱动程序:

    # lprint drivers
    zpl_2inch-203dpi-dt "Zebra ZPL 2-inch/203dpi/Direct-Thermal
  2. 安装打印机。例如,要安装具有指定驱动程序的网络打印机,请输入:

    # lprint add -d <printer name> -v socket://<hostname> -m zpl_2inch-203dpi-dt

验证

  1. 检查打印机是否在打印机列表中可见,及其用于发送原始数据的原始套接字:

    # lprint printers
    <printer_name> - printer - ipp://localhost/ipp/print/<printer_name>
    <printer_name> - raw socket - socket://localhost:9101/

7.2. 将生成的网络打印机设置为 CUPS 永久队列

您可以使用命令行界面,将专用打印机应用程序生成的网络打印机设置为 CUPS 永久队列。

注意

在以下流程中,LPrint printer 应用程序被用作一个示例。但是,类似的步骤对任何基于 PAPPL 的打印机应用程序是有效的。

先决条件

  • CUPS 配置了 TLS 证书。
  • 您在 CUPS 中具有管理打印机的权限。
  • 传统打印机已安装在打印机应用程序中。

流程

  1. 检查生成的网络打印机是否可用:

    # lpstat -e
    <printer_name_in_printer_application>
  2. 搜索打印机应用程序正在使用的端口:

    # grep 'server-port=' /etc/lprint.conf
    server-port=8000
  3. 使用端口号 8000 安装永久队列:

    # lpadmin -p <printer_name_in_CUPS> -v ipps://localhost:8000/ipp/print/<printer_name_in_printer_application> -m everywhere -E
  4. 检查是否安装了 CUPS 队列:

    # lpstat -a
    <printer_name_in_CUPS>  accepting requests since Wed 07 May 2025 02:31:04 AM EDT

第 8 章 使用 Web 界面向 CUPS 添加打印机

在用户可以通过 CUPS 打印之前,您必须添加打印机。您可以使用网络打印机和直接附加到 CUPS 主机的打印机,例如通过 USB。

您可以使用 CUPS 无驱动程序功能或使用 PostScript 打印机描述(PPD)文件来添加打印机。

注意

CUPS 更喜欢无驱动程序打印,使用驱动程序已被弃用。

Red Hat Enterprise Linux (RHEL)不提供名称服务切换多播 DNS 插件(nss-mdns),它通过查询 mDNS 响应程序来解析请求。因此,RHEL 不提供使用 mDNS 对本地无驱动程序打印机的自动发现和安装。要临时解决这个限制,请手动安装单个打印机,或使用 cups-browsed 自动安装在远程打印服务器上可用的大量打印队列。

先决条件

流程

  1. 使用浏览器并访问 https://<hostname>:631/admin/

    您必须使用 HTTPS 协议连接到 Web 界面。否则,CUPS 会因为安全原因在以后的步骤中阻止身份验证。

  2. 单击 Add printer
  3. 如果您还没有验证,CUPS 会提示输入管理用户的凭证。输入授权用户的用户名和密码。
  4. 如果您决定不使用无驱动程序打印,并且您要添加的打印机可被自动检测到,请选择它,然后单击 Continue
  5. 如果没有检测到打印机:

    1. 选择打印机支持的协议。

      选择协议

      如果您的打印机支持无驱动程序打印,且您想要使用此功能,请选择 ippipps 协议。

    2. Continue
    3. 输入到打印机或到远程打印服务器上队列的 URL。

      输入打印机 URL
    4. Continue
  6. 输入名称,可选输入描述和位置。如果您使用 CUPS 作为打印服务器,而其他客户端应该能够通过这个打印机上的 CUPS 打印,请选择" Share this printer "。

    输入打印机详情
  7. Make 列表中选择打印机制造商。如果打印机制造商不在列表中,请选择 Generic 或上传一个打印机的 PPD 文件。
  8. Continue
  9. 选择打印机型号:

    • 如果打印机支持无驱动程序打印,请选择 IPP Everywhere。请注意,如果您之前在本地安装了特定于打印机的驱动程序,则列表可能还包含诸如 <printer_name> - IPP Everywhere 的条目。
    • 如果打印机不支持无驱动程序打印,请选择型号或上传打印机的 PPD 文件。
    选择打印机型号
  10. Add Printer
  11. Set printer options 页面上的设置和标签页取决于驱动程序以及打印机支持的功能。使用此页面设置默认选项,比如为纸张大小。

    设置打印机选项
  12. Set default options

验证

  1. 打开 Web 界面中的 打印机 选项卡。
  2. 点打印机的名称。
  3. Maintenance 列表中,选择 Print test page

故障排除

第 9 章 使用 lpadmin 工具将打印机添加 CUPS

在用户可以通过 CUPS 打印之前,您必须添加打印机。您可以使用网络打印机和直接附加到 CUPS 主机的打印机,例如通过 USB。

您可以使用 CUPS 无驱动程序功能或使用 PostScript 打印机描述(PPD)文件来添加打印机。

注意

CUPS 更喜欢无驱动程序打印,使用驱动程序已被弃用。

Red Hat Enterprise Linux (RHEL)不提供名称服务切换多播 DNS 插件(nss-mdns),它通过查询 mDNS 响应程序来解析请求。因此,RHEL 不提供使用 mDNS 对本地无驱动程序打印机的自动发现和安装。要临时解决这个限制,请手动安装单个打印机,或使用 cups-browsed 自动安装在远程打印服务器上可用的大量打印队列。

先决条件

流程

  • 在 CUPS 中添加打印机:

    • 要添加带有无驱动程序支持的打印机,请输入:

      # lpadmin -p Demo-printer -E -v ipp://192.0.2.200/ipp/print -m everywhere

      如果 -m anywhere 选项不适用于您的打印机,请尝试 -m driverless:<uri>,例如:-m driverless:ipp://192.0.2.200/ipp/print

    • 要从带有无驱动程序支持的远程打印服务器添加一个队列,请输入:

      # lpadmin -p Demo-printer -E -v ipp://192.0.2.201/printers/example-queue -m everywhere

      如果 -m anywhere 选项不适用于您的打印机,请尝试 -m driverless:<uri>,例如:-m driverless:ipp://192.0.2.200/printers/example-queue

    • 要在文件中添加带有驱动程序的打印机,请输入:

      # lpadmin -p Demo-printer -E -v socket://192.0.2.200/ -P /root/example.ppd
    • 要从驱动程序在文件中的远程打印服务器添加一个队列,请输入:

      # lpadmin -p Demo-printer -E -v ipp://192.0.2.201/printers/example-queue -P /root/example.ppd
    • 要添加驱动程序在本地驱动程序数据库中的打印机:

      1. 列出数据库中的驱动程序:

        # lpinfo -m
        ...
        drv:///sample.drv/generpcl.ppd Generic PCL Laser Printer
        ...
      2. 将带有 URI 的打印机添加到数据库中的驱动程序中:

        # lpadmin -p Demo-printer -E -v socket://192.0.2.200/ -m drv:///sample.drv/generpcl.ppd

    这些命令使用以下选项:

    • -p <printer_name> :设置 CUPS 中打印机的名称。
    • -E :启用打印机,CUPS 接受它的作业。请注意,您必须在 -p 之后指定这个选项。详情请查看您系统上手册页中的选项描述。
    • -v <uri> :设置到打印机或远程打印服务器队列的 URI。
    • -m <driver_uri> : 根据从本地驱动程序数据库获取的驱动程序 URI 设置 PPD 文件。
    • -P <PPD_file> :设置 PPD 文件的路径。

验证

  1. 显示可用的打印机:

    # lpstat -p
    printer Demo-printer is idle. enabled since Fri 23 Jun 2023 09:36:40 AM CEST
  2. 打印测试页:

    # lp -d Demo-printer /usr/share/cups/data/default-testpage.pdf

打印机管理员有时需要在打印服务器上执行不同的任务。例如:

  • 维护任务,如在技术人员修复打印机时临时暂停打印机
  • 管理任务,如更改打印机的默认设置

您可以使用 CUPS Web 界面执行这些任务。

先决条件

流程

  1. 使用浏览器并访问 https://<hostname>:631/printers/

    您必须使用 HTTPS 协议连接到 Web 界面。否则,CUPS 会因为安全原因在以后的步骤中阻止身份验证。

  2. 点您要配置的打印机的名称。
  3. 根据您是否要执行维护或管理任务,从列表中选择所需的操作。
  4. 如果您还没有验证,CUPS 会提示输入管理用户的凭证。输入授权用户的用户名和密码。
  5. 执行任务。

使用 samba-krb5-printing 包装器,登录到 Red Hat Enterprise Linux (RHEL)的活动目录(AD)用户可以使用 Kerberos 向活动目录(AD)进行身份验证,然后打印到将打印作业转发到 Windows 打印服务器的本地 CUPS 打印服务器。

此配置的好处在于,RHEL 上的 CUPS 管理员不需要在配置中存储固定的用户名和密码。CUPS 使用发送打印作业的用户的 Kerberos ticket 验证 AD。

注意

红帽支持只支持从本地系统向 CUPS 提交打印作业,不支持在 Samba 打印服务器上重新共享打印机。

先决条件

  • 要添加到本地 CUPS 实例中的打印机在 AD 打印服务器上是共享的。
  • 您将 RHEL 主机作为成员加入到 AD 。
  • CUPS 安装在 RHEL 上,并且 cups 服务正在运行。
  • 打印机的 PostScript 打印机描述(PPD)文件存储在 /usr/share/cups/model/ 目录中。

流程

  1. 安装 samba-krb5-printingsamba-clientkrb5-workstation 软件包:

    # dnf install samba-krb5-printing samba-client krb5-workstation
  2. 可选: 作为域管理员授权并显示 Windows 打印服务器上共享的打印机列表:

    # smbclient -L <windows_print_server> -U administrator@<AD_KERBEROS_REALM> --use-kerberos=required
    
    	Sharename       Type      Comment
    	---------       ----      -------
    	...
    	Example         Printer   Example
    	...
  3. 可选:显示 CUPS 模型列表以识别打印机的 PPD 名称:

    lpinfo -m
    ...
    samsung.ppd Samsung M267x 287x Series PXL
    ...

    在下一步中添加打印机时,需要 PPD 文件的名称。

  4. 在 CUPS 中添加打印机:

    # lpadmin -p "<printer_name>" -v smb://<windows_print_server>/<printer_share_name> -m samsung.ppd -o auth-info-required=negotiate -E

    该命令使用以下选项:

    • -p <printer_name> 在 CUPS 中设置打印机的名称。
    • -v <URI_to_Windows_printer> 将 URI 设置为 Windows 打印机。使用以下格式:smb://<host_name>/<printer_share_name>
    • -m <PPD_file> 设置打印机使用的 PPD 文件。
    • -o auth-info-required=negotiate 将 CUPS 配置为在将打印作业转发到远程服务器时使用 Kerberos 身份验证。
    • -e 启用打印机,CUPS 接受打印机的作业。

验证

  1. 以 AD 域用户身份登录到 RHEL 主机。
  2. 以 AD 域用户身份进行身份验证:

    # kinit <domain_user_name>@<AD_KERBEROS_REALM>
  3. 将文件输出到您添加到本地 CUPS 打印服务器的打印机:

    # lp -d <printer_name> <file>

cups-browsed 服务使用 DNS 服务发现(DNS-SD)和 CUPS 浏览来使本地 CUPS 服务中自动提供的全部共享远程打印机或过滤的共享远程打印机的子集。

例如,管理员可以在工作站上使用此功能,以使只有来自可信打印服务器的打印机能在应用程序的打印对话框中可用。如果打印服务器共享大量打印机,也可以将 cups-browsed 配置为按某些标准过滤浏览的打印机,以减少列出的打印机的数量。

注意

如果应用程序中的打印对话框使用其它机制(如 DNS-SD)来列出远程打印机,则 cups-browsed 没有影响。cups-browsed 服务也不会阻止用户手动访问未列出的打印机。

先决条件

  • 已在本地主机上配置了 CUPS 服务
  • 存在一个远程 CUPS 打印服务器,且以下条件适用于这个服务器:

    • 服务器侦听可从客户端访问的接口。
    • /etc/cups/cups.conf 文件中服务器 <Location /> 指令中的Allow from 参数允许从客户端的 IP 地址访问。
    • 服务器共享打印机。
    • 防火墙规则允许从客户端访问服务器上的 CUPS 端口。

流程

  1. 编辑 /etc/cups/cups-browsed.conf 文件,并进行以下更改:

    1. 为您要轮询的每个远程 CUPS 服务器添加 BrowsePoll 参数:

      BrowsePoll remote_cups_server.example.com
      BrowsePoll 192.0.2.100:1631

      如果远程 CUPS 服务器侦听与 631 不同的端口,请将 :_<port>_ 附加到主机名或 IP 地址。

    2. 可选:配置过滤器来限制哪些打印机在本地 CUPS 服务中显示。例如,要过滤名称包含 sales_ 的队列,请添加:

      BrowseFilter name sales_

      您可以根据不同的字段名称、对筛选取反,匹配确切的值来过滤。详情请查看您系统上 cups-browsed.conf (5) 手册页中的参数描述和示例。

    3. 可选:更改轮询间隔和超时来限制浏览周期的数量:

      BrowseInterval 1200
      BrowseTimeout 6000

      按相同比例增加 BrowseIntervalBrowseTimeout,以避免打印机从浏览列表中消失的情况。这意味着,将 BrowseInterval 的值乘以 5 或更大的整数,并将这个结果值用于 BrowseTimeout

      默认情况下,cups-browsed 每 60 秒轮询一次远程服务器,超时为 300 秒。但是,在有许多队列的打印服务器上,这些默认值可能会消耗很多资源。

  2. 启用并启动 cups-browsed 服务:

    # systemctl enable --now cups-browsed

验证

  • 列出可用的打印机:

    # lpstat -v
    device for Demo-printer: implicitclass://Demo-printer/
    ...

    如果打印机的输出包含 implicitclass,则 cups-browsed 服务管理 CUPS 中的打印机。

第 13 章 访问 systemd 日志中的 CUPS 日志

默认情况下,CUPS 将日志消息存储在 systemd 日志中。这包括:

  • 错误消息
  • 访问日志条目
  • 页面日志条目

先决条件

流程

  • 显示日志条目:

    • 要显示所有日志条目,请输入:

      # journalctl -u cups
    • 要显示特定打印作业的日志条目,请输入:

      # journalctl -u cups JID=<print_job_id>
    • 要显示特定时间段内的日志条目,请输入:

      # journalectl -u cups --since=<YYYY-MM-DD> --until=<YYYY-MM-DD>

      YYYY 替换为年,将 MM 替换为月,将 DD 替换为天。

默认情况下,CUPS 将日志消息存储在 systemd 日志中。或者,您可以将 CUPS 配置为将日志消息存储在文件中。

先决条件

流程

  1. 编辑 /etc/cups/cups-files.conf 文件,并将 AccessLogErrorLogPageLog 参数设置为您要存储这些日志文件的路径:

    AccessLog /var/log/cups/access_log
    ErrorLog /var/log/cups/error_log
    PageLog /var/log/cups/page_log
  2. 如果您将 CUPS 配置为将日志存储在 /var/log/cups/ 以外的目录中,请在该目录上设置 cupsd_log_t SELinux 上下文,例如:

    # semanage fcontext -a -t cupsd_log_t "/var/log/printing(/.*)?"
    # restorecon -Rv /var/log/printing/
  3. 重启 cups 服务:

    # systemctl restart cups

验证

  1. 显示日志文件:

    # cat /var/log/cups/access_log
    # cat /var/log/cups/error_log
    # cat /var/log/cups/page_log
  2. 如果您将 CUPS 配置为将日志存储在 /var/log/cups/ 以外的目录中,请验证日志目录上的 SELinux 上下文是否为 cupsd_log_t:

    # ls -ldZ /var/log/printing/
    drwxr-xr-x. 2 lp sys unconfined_u:object_r:cupsd_log_t:s0 6 Jun 20 15:55 /var/log/printing/

第 15 章 设置高可用性 CUPS 打印服务器环境

如果您的客户端需要在不中断的情况下访问打印机,您可以在多个主机上设置 CUPS,并使用打印队列浏览功能来提供高可用性。然后,打印客户端自动配置由不同打印服务器共享的打印队列。如果客户端将打印作业发送到其本地打印队列,则客户端上的 CUPS 会将作业路由到处理作业并将其发送到打印机的一个打印服务器。

流程

  1. 在两个或多个服务器上设置 CUPS:

    1. 安装和配置 CUPS
    2. 启用 TLS 加密
    3. 使用 lpadmin 工具Web 界面 将打印队列添加到所有 CUPS 实例中。如果使用 Web 界面,请确保在添加打印机时选择 Share this printer 选项。lpadmin 工具默认启用此设置。

      重要

      对于高可用性场景,一个打印服务器上的每个队列都需要一个在其他服务器上具有完全相同的队列名称的队列。您可以使用 lpstat -e 命令显示每个服务器上的队列名称。

      可选:您可以在每台服务器上配置队列,来引用不同的打印机。

  2. 在打印客户端上:

    1. 编辑 /etc/cups/cups-browsed.conf 文件,并为每个 CUPS 打印服务器添加 BrowsePoll 指令:

      BrowsePoll print_server_1.example.com:631
      BrowsePoll print_server_2.example.com:631
    2. 启用并启动 cupscups-browsed 服务:

      # systemctl enable --now cups cups-browsed

验证

  • 显示客户端上可用的打印机:

    # lpstat -t
    ...
    device for Demo-printer: implicitclass://Demo-printer/
    Demo-printer accepting requests since Fri 22 Nov 2024 11:54:59 AM CET
    printer Demo-printer is idle.  enabled since Fri 22 Nov 2024 11:54:59 AM CET
    ...

    示例输出显示 Demo-printer 队列使用 implicitclass 后端。因此,cups-browsed 将此队列的打印作业路由到此客户端上 BrowsePoll 指令中指定的主机。

第 16 章 访问 CUPS 文档

CUPS 提供对安装在 CUPS 服务器上的服务文档的基于浏览器的访问。本文档包括:

  • 管理文档,如用于命令行打印机管理和记帐
  • 手册页
  • 编程文档,如管理 API
  • 参考
  • Specifications

先决条件

流程

  1. 使用浏览器,并访问 http://<hostname_or_ip_address>:631/help/
  2. 展开 Online Help Documents 中的条目,然后选择您要阅读的文档。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部