9.3 打印机

CUPS(通用 Unix 打印系统,Common Unix Printing System)是一种模块化的打印系统架构,支持多种打印协议和打印机设备,并可将打印机通过 IPP(互联网打印协议,Internet Printing Protocol)或 SMB(服务器消息块,Server Message Block)协议共享到网络中。

打印机通过 USB(通用串行总线,Universal Serial Bus)总线接入打印服务器(即 FreeBSD 系统)。打印服务器将打印机共享到局域网中,供局域网内的设备使用。局域网中的其他计算机可通过发送多播数据包,利用零配置网络技术自动查询局域网中可用的打印机。

已在 Android、Apple、Debian 等平台上测试通过,上述系统均可正常发现并使用该打印服务器。

安装 CUPS(通用 Unix 打印系统)

  • 使用 pkg(二进制包管理器)安装:

# pkg install cups cups-filters
  • 或使用 Ports(源码包管理器)安装:

# cd /usr/ports/print/cups/ && make install clean
# cd /usr/ports/print/cups-filters/ && make install clean

技巧

若使用桌面环境,请在 Ports 选项界面中选中 x11 编译选项,可在系统中生成添加和配置打印机的图形化应用图标。

软件包说明:

软件包
作用说明

cups

用于提供 CUPS 核心打印服务

cups-filters

用于支持免驱动打印机(即 IPP Everywhere 协议)

dbus

Avahi 需要,作为 CUPS 依赖自动安装

avahi-app

Avahi 所需组件,作为 CUPS 的依赖自动安装,用于局域网中的打印机自动发现

技巧

本文介绍将 FreeBSD 配置为打印服务器。若 FreeBSD 仅作为打印客户端,通过 USB 本地连接打印机进行打印,而不需要共享打印服务,则 avahi-app 和 dbus 并非必需组件。

注意

若打印机不支持免驱动打印,则需要安装对应的厂商驱动程序。

添加服务

将 D-Bus(进程间通信总线,D-Bus)、avahi‑daemon(Avahi 守护进程)和 cupsd(CUPS 守护进程)服务设置为系统启动时自动启用,以确保打印服务及其自动发现功能在系统重启后仍可正常使用:

启动服务后,其他设备应能够自动发现内网中的共享打印机。尝试打印测试页,测试能否正常打印。

向局域网共享打印服务

若未设置“允许局域网访问”,则除本地回环地址 localhost 外的其他主机将无法使用该打印服务。

编辑 CUPS 主配置文件 /usr/local/etc/cups/cupsd.conf

  • 在现有的监听配置段

后面添加以下配置(其中 IP 替换为你的 FreeBSD 系统的局域网 IP 地址):

作用:指定 CUPS 打印服务监听的网络接口 IP 地址和端口号(631 是 IPP 协议的标准默认端口)。

  • 再将

改为

如此 CUPS 管理页面即可从局域网内远程访问。

添加打印机

在浏览器中输入 http://IP:631,该地址为打印服务器的管理页面。

CUPS 管理页面

点击 Administration-Add Printer,根据提示创建打印机。

过程中会提示输入账号和密码,使用 root 用户或 wheel 组内的用户登录(输入其在 FreeBSD 系统中的账户密码)即可。

添加打印机

点击 Add Printer,添加打印机。

选择打印机

本文中使用的打印机型号为 Brother HL L3228CDW。

打印机详情

在创建时,请务必勾选 Share This Printer

共享打印机

选择型号。

选择型号

如果打印机支持免驱动打印,Model 请选择 Generic IPP Everywhere Printer (en);否则需要安装相应驱动,并选择对应的打印机型号。

打印机配置

成功添加打印机!

添加成功

KDE 桌面添加打印机

无需额外操作,需要打印的设备通常可自动发现打印服务器,并自动将其加入打印机列表,在打印文件时即可选择。例如在 KDE 桌面上:

KDE 打印机列表
KDE 打印机详情

打印测试页

从内网的 Debian 机器打印测试页:

测试页打印

故障排除与未竟事项

打印机免驱动支持问题

要确认打印机是否免驱动,可以在 OpenPrinting. Find a Driverless Printer[EB/OL]. [2026-03-25]. https://openprinting.github.io/printers/arrow-up-right 查询。以本文使用打印机为例:

OpenPrinting 查询

惠普(HP)打印机可通过安装 Port print/hplip 获得支持。

FreeBSD 打印的测试页示例

尚待测试。

课后习题

  1. 配置 CUPS 打印服务器并打印 FreeBSD 测试页,分析测试页内容如何反映打印系统的配置状态,并复现从局域网不同设备打印的完整流程。

  2. 重构 CUPS 配置中最小化的网络访问控制机制,分析该机制如何在“打印便利性”与“网络安全性”之间做权衡,以及用户权限如何被 CUPS 所约束。

  3. 修改 CUPS 默认的监听地址和访问控制策略,使其仅允许特定 IP 访问,验证其行为变化。

最后更新于