FreeBSD 上的打印服务器(CUPS)

摘要

本文介绍了如何在 FreeBSD 上配置 CUPS。

1. 了解通用 UNIX 打印系统(CUPS)

CUPS(Common UNIX Printing System)为基于 UNIX® 的操作系统提供了一层可移植的打印支持。它由 Easy Software Products 开发,旨在为所有 UNIX® 系统的供应商和用户推广标准的打印解决方案。

CUPS 使用互联网打印协议(IPP)作为管理打印任务和队列的基础。它还支持 Line Printer Daemon(LPD)、Server Message Block(SMB)和 AppSocket(又名 JetDirect)协议,但功能有所简化。CUPS 增加了网络打印机浏览和基于 PostScript 打印机描述(PPD)的打印选项,支持在 UNIX® 环境中进行实际的打印操作。因此,CUPS 非常适合在 FreeBSD、Linux®、Mac OS® X 或 Windows® 的混合环境中共享和访问打印机。

CUPS 的官方网站是 http://www.cups.org/

2. 安装 CUPS 打印服务器

要使用预编译的二进制文件安装 CUPS,可以在 root 终端中执行以下命令:

# pkg install cups

另外,一些可选的但推荐安装的包有 print/gutenprintprint/hplip,它们为多种打印机提供了驱动程序和实用工具。安装完成后,CUPS 的配置文件可以在目录 /usr/local/etc/cups 中找到。

3. 配置 CUPS 打印服务器

安装完成后,需要编辑一些文件来配置 CUPS 服务器。首先,创建或修改文件 /etc/devfs.rules,并添加以下内容,以设置所有潜在打印机设备的正确权限,并将打印机与 cups 用户组关联:

[system=10]
add path 'unlpt*' mode 0660 group cups
add path 'ulpt*' mode 0660 group cups
add path 'lpt*' mode 0660 group cups
add path 'usb/X.Y.Z' mode 0660 group cups

注意

注意:XYZ 应替换为 /dev/usb 目录中与打印机对应的目标 USB 设备。要查找正确的设备,可以查看 dmesg(8) 的输出,ugenX.Y 列出的是打印机设备,它是 /dev/usb 中 USB 设备的符号链接。

接下来,在 /etc/rc.conf 中添加以下两行:

cupsd_enable="YES"
devfs_system_ruleset="system"

这两项设置将在启动时启动 CUPS 打印服务器,并调用上述创建的本地 devfs 规则。

为了在某些 Microsoft® Windows® 客户端下启用 CUPS 打印,应该取消注释 /usr/local/etc/cups/mime.types/usr/local/etc/cups/mime.convs 文件中的以下行:

application/octet-stream

完成这些更改后,必须重新启动 devfs 和 CUPS 系统,可以通过重启计算机或在 root 终端中执行以下两个命令:

# service devfs restart
# service cupsd restart

4. 配置 CUPS 打印服务器上的打印机

在安装并配置 CUPS 系统后,管理员可以开始配置附加到 CUPS 打印服务器的本地打印机。这一过程与在其他基于 UNIX® 的操作系统(如 Linux® 发行版)上配置 CUPS 打印机非常相似,甚至完全相同。

管理和管理 CUPS 服务器的主要方式是通过基于 Web 的界面,可以通过启动浏览器并在浏览器的 URL 栏中输入 http://localhost:631 来访问。如果 CUPS 服务器位于网络上的另一台机器上,只需将服务器的本地 IP 地址替换 localhost。CUPS 的 Web 界面非常直观,其中有打印机和打印任务管理、用户授权等部分。此外,在管理界面的右侧有几个复选框,方便访问常用设置,如是否共享连接到系统的打印机、是否允许远程管理 CUPS 服务器,以及是否允许用户对打印机和打印任务授予额外的访问权限。

添加打印机通常很简单,只需在 CUPS Web 界面的管理屏幕上点击 Add Printer,或者点击 New Printers Found 按钮。当出现 Device 下拉框时,只需选择所需的本地连接打印机,然后继续操作。如果之前安装了 Port 或包 print/gutenprint-cupsprint/hplip,那么后续界面中会提供其他打印驱动程序,可能提供更多的稳定性或功能。

5. 配置 CUPS 客户端

CUPS 服务器已配置并将打印机添加并发布到网络之后,下一步是配置客户端,即将访问 CUPS 服务器的机器。如果有一台桌面计算机既充当服务器又充当客户端,那么很多信息可能不需要配置。

5.1. UNIX® 客户端

CUPS 也需要在 UNIX® 客户端上安装。在客户端上安装了 CUPS 后,通常桌面环境(如 GNOME 或 KDE)的打印管理器会自动发现网络上共享的 CUPS 打印机。或者,可以在客户端机器上访问本地 CUPS 界面,输入 http://localhost:631 并在管理部分点击 Add Printer。当出现 Device 下拉框时,只需选择自动发现的网络 CUPS 打印机,或者选择 ipphttp,然后输入网络 CUPS 打印机的 IPP 或 HTTP URI,通常有以下两种格式之一:

ipp://server-name-or-ip/printers/printername
http://server-name-or-ip:631/printers/printername

如果 CUPS 客户端难以发现网络上共享的其他 CUPS 打印机,有时可以创建或编辑文件 /usr/local/etc/cups/client.conf,并在其中添加以下条目:

ServerName server-ip

在这种情况下,server-ip 应替换为网络上 CUPS 服务器的本地 IP 地址。

5.2. Windows® 客户端

在 XP 之前的 Windows® 版本中,原生不支持与基于 IPP 的打印机进行网络连接。然而,Windows® XP 及更高版本支持这一功能。因此,在这些版本的 Windows® 中添加 CUPS 打印机非常简单。一般来说,Windows® 管理员会运行 Windows® Add Printer 向导,选择 Network Printer,然后输入以下语法的 URI:

http://server-name-or-ip:631/printers/printername

如果使用的是较旧版本的 Windows®,没有原生的 IPP 打印支持,那么连接到 CUPS 打印机的常见方式是将 net/samba416 与 CUPS 一起使用,然而这超出了本章的讨论范围。

6. CUPS 故障排除

CUPS 的常见问题通常与权限有关。首先,检查如上所述的 devfs(8) 权限。接着,检查文件系统中创建的设备的实际权限。确保用户是 cups 组的成员也很有帮助。如果 CUPS Web 界面中的权限复选框似乎无法正常工作,可以尝试手动备份位于 /usr/local/etc/cups/cupsd.conf 的主配置文件,并编辑其中的各种配置选项,尝试不同的配置组合。以下是一个可以测试的示例 /usr/local/etc/cups/cupsd.conf 配置文件。请注意,此示例 cupsd.conf 为了更容易配置牺牲了一些安全性;若管理员成功连接到 CUPS 服务器并配置好客户端,建议重新审视该配置文件并开始限制访问。

# 在 error_log 中记录一般信息 - 若进行故障排除,请将 "info" 改为 "debug"...
LogLevel info

# 管理员用户组...
SystemGroup wheel

# 在端口 631 上监听连接。
Port 631
#Listen localhost:631
Listen /var/run/cups.sock

# 显示局域网共享的打印机。
Browsing On
BrowseOrder allow,deny
#BrowseAllow @LOCAL
BrowseAllow 192.168.1.* # 更改为本地 LAN 设置
BrowseAddress 192.168.1.* # 更改为本地 LAN 设置

# 需要身份验证时的默认身份验证类型...
DefaultAuthType Basic
DefaultEncryption Never # 注释掉此行以允许加密

# 允许 LAN 上任何计算机访问服务器
<Location />
  Order allow,deny
  #Allow localhost
  Allow 192.168.1.* # 更改为本地 LAN 设置
</Location>

# 允许 LAN 上任何计算机访问管理员页面
<Location /admin>
  #要求加密
  Order allow,deny
  #Allow localhost
  Allow 192.168.1.* # 更改为本地 LAN 设置
</Location>

# 允许 LAN 上任何计算机访问配置文件
<Location /admin/conf>
  AuthType Basic
  Require user @SYSTEM
  Order allow,deny
  #Allow localhost
  Allow 192.168.1.* # 更改为本地 LAN 设置
</Location>

# 设置默认打印机/作业策略...
<Policy default>
  # 与作业相关的操作必须由所有者或管理员执行...
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \
Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \
Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \
CUPS-Move-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  # 所有管理操作都需要管理员身份验证...
  <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \
Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \
Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \
Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \
CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
    AuthType Basic
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # 只有所有者或管理员可以取消或认证作业...
  <Limit Cancel-Job CUPS-Authenticate-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  <Limit All>
    Order deny,allow
  </Limit>
</Policy>

最后更新于