Red Hat Training

A Red Hat training course is available for RHEL 8

3.15. 将 Samba 设置为打印服务器

如果您将 Samba 设置为打印服务器,那么网络中的客户端可以使用 Samba 进行打印。此外,如果进行了配置, Windows 客户端可以从 Samba 服务器下载驱动程序。

本节的部分内容摘自在 Samba Wiki 中发布的将Samba设置为打印服务器文档。许可证: CC BY 4.0。作者和贡献者:请参阅 Wiki 页面上的历史选项卡。

先决条件

Samba 采用以下模式之一设置:

3.15.1. 在 Samba 中启用打印服务器支持

默认情况下,在 Samba 中不启用打印服务器支持。要将 Samba 用作打印服务器,您必须相应地配置 Samba。

注意

打印作业和打印机操作需要远程过程调用(RPC)。默认情况下,Samba 根据需要启动 rpcd_spools 服务来管理 RPC。在第一个 RPC 调用过程中,或者当您更新 CUPS 中的打印机列表时,Samba 会从 CUPS 检索打印机信息。每个打印机可能需要 1 秒。因此,如果您有超过 50 个打印机,请调优 rpcd_spools 设置。

先决条件

  • 打印机是在 CUPS 服务器中配置的。

    有关在 CUPS 中配置打印机的详情,请查看打印服务器上 CUPS Web 控制台(https://printserver:631/help)中提供的文档。

流程

  1. 编辑 /etc/samba/smb.conf 文件:

    1. 添加 [printers] 部分,以在 Samba 中启用打印后端:

      [printers]
              comment = All Printers
              path = /var/tmp/
              printable = yes
              create mask = 0600
      重要

      [printers] 共享名称是写死的,不能更改。

    2. 如果 CUPS 服务器运行在不同的主机或端口,请在 [printers] 部分中指定设置:

      cups server = printserver.example.com:631
    3. 如果您有许多打印机,将空闲秒数设置为高于连接到 CUPS 的打印机数。例如,如果您有 100 台打印机,请在 [global] 部分中设置:

      rpcd_spoolss:idle_seconds = 200

      如果这个设置在您的环境中没有缩放,请在 [global] 部分中增加 rpcd_spools worker 的数量:

      rpcd_spoolss:num_workers = 10

      默认情况下,rpcd_spools 启动 5 个 worker。

  2. 验证/etc/samba/smb.conf文件:

    # testparm
  3. 打开所需的端口,并使用firewall-cmd工具重新加载防火墙配置:

    # firewall-cmd --permanent --add-service=samba
    # firewall-cmd --reload
  4. 重启 smb 服务:

    # systemctl restart smb

    重启服务后,Samba 会自动共享在 CUPS 后端中配置的所有打印机。如果想要仅手动共享特定打印机,请参阅 手动共享特定的打印机

验证

  • 提交打印作业。例如,要打印 PDF 文件,请输入:

    # smbclient -Uuser //sambaserver.example.com/printer_name -c "print example.pdf"

3.15.2. 手动共享特定的打印机

如果您将 Samba 配置为打印服务器,默认情况下,Samba 会共享在 CUPS 后端中配置的所有打印机。以下流程解释了如何只共享特定的打印机。

先决条件

  • Samba 被设置为打印服务器

流程

  1. 编辑 /etc/samba/smb.conf 文件:

    1. [global] 部分中,通过以下设置禁用自动打印机共享:

      load printers = no
    2. 为您要共享的每个打印机添加一段。例如,要在 Samba 中将 CUPS 后端中名为 example 的打印机共享为 Example-Printer,请添加以下部分:

      [Example-Printer]
              path = /var/tmp/
              printable = yes
              printer name = example

      您不需要为每个打印机单独设置 spool 目录。您可以在打印机的path 参数中设置与您在 [printers] 部分中设置的完全相同的 spool 目录。

  2. 验证/etc/samba/smb.conf文件:

    # testparm
  3. 重新载入 Samba 配置:

    # smbcontrol all reload-config