引言
在中小企业办公环境中,打印机往往通过USB接口直接连接至某台PC。随着业务扩展,多台电脑需要共享同一台打印机,若采用传统的“主机开启打印共享”方式,不仅受限于操作系统兼容性,还要求主机长期在线且容易成为单点故障。相比之下,在Linux服务器上部署CUPS(Common Unix Printing System)服务,可以将USB打印机转化为网络打印机,实现跨平台、高可用的共享打印解决方案。本文将详细讲解如何通过CUPS服务配置Linux打印机共享。
一、 环境准备与前置条件
在进行配置前,请确保满足以下条件:
- 硬件连接:USB打印机已正确连接到Linux服务器的USB端口,且电源已开启。
- 操作系统:建议使用Ubuntu Server 22.04 LTS或CentOS/Rocky Linux 9及以上版本(这些版本内核较新,对新型打印机驱动支持更好)。
- 网络连通性:Linux服务器需固定IP地址,且同局域网内的客户端电脑能Ping通该IP。
- 权限要求:操作需要使用root权限或通过sudo执行命令。
二、 安装CUPS服务
CUPS是Linux系统中标准的打印系统。不同发行版的安装命令略有不同。
1. Ubuntu/Debian系系统
打开终端,依次执行以下命令:
sudo apt update
sudo apt install cups -y
2. CentOS/RHEL系系统
sudo yum install cups -y
# 或在新版中使用dnf
sudo dnf install cups -y
安装完成后,启动CUPS服务并设置为开机自启:
sudo systemctl enable --now cups
三、 配置CUPS允许远程管理
默认情况下,CUPS仅监听本地回环接口(localhost),外部客户端无法访问其管理页面或连接打印机。我们需要修改配置文件以允许网络访问。
1. 编辑CUPS主配置文件
使用文本编辑器打开/etc/cups/cupsd.conf:
sudo nano /etc/cups/cupsd.conf
2. 修改监听端口与访问控制
找到Listen指令,将其改为监听所有IPv4和IPv6地址。如果原文件中有Port 631,请将其注释掉或确保存在以下两行:
Listen 0.0.0.0:631
Listen [::]:631
接着,找到<Location />部分,修改访问权限以允许局域网用户管理打印机:
<Location />
Order allow,deny
Allow @LOCAL
</Location>
<Location /admin>
Order allow,deny
Allow @LOCAL
</Location>
注意:此处使用@LOCAL表示允许局域网内所有IP访问。若需限制特定网段,可改为Allow 192.168.1.0/24。
3. 重启CUPS服务使配置生效
sudo systemctl restart cups
四、 配置防火墙规则
Linux服务器通常启用防火墙(如UFW或Firewalld),需开放CUPS使用的631端口。
1. 使用UFW(Ubuntu默认)
sudo ufw allow from 192.168.1.0/24 to any port 631 proto tcp
sudo ufw reload
2. 使用Firewalld(CentOS/RHEL默认)
sudo firewall-cmd --permanent --add-service=ipp
sudo firewall-cmd --permanent --add-port=631/tcp
sudo firewall-cmd --reload
五、 通过Web界面添加USB打印机
CUPS提供了便捷的Web管理界面,无需记忆复杂命令即可添加打印机。
1. 访问管理页面
在浏览器地址栏输入:http://[Linux服务器IP]:631。例如:http://192.168.1.100:631。
2. 添加打印机步骤
- 登录管理员账户:点击“Administration”标签,选择“Add Printer”。系统会提示输入root或具有sudo权限的用户名和密码。
- 选择设备和协议:在“Local Printers”区域,勾选“Discover local printers connected to this system”。此时应能看到已连接的USB打印机名称(如HP_LaserJet_Pro_M404)。选择该打印机并点击“Continue”。
- 命名与描述:为打印机设置一个易识别的名称(Name,只能包含字母数字和下划线)、显示名称(Description)和位置(Location)。勾选“Share This Printer”以启用网络共享,点击“Continue”。
- 选择驱动程序:系统通常会尝试自动匹配PPD文件。如果找不到,可选择“Provide PPD File”上传厂商提供的PPD文件,或选择“Generic”下的相应型号驱动。点击“Add Printer”。
3. 验证打印机状态
添加成功后,在“Printers”列表中查看该打印机状态是否为“Accepting Jobs”。若显示“Disabled”,请点击“Enable”按钮。
六、 客户端连接网络打印机
1. Windows客户端配置
- 打开“设置” > “蓝牙和其他设备” > “打印机和扫描仪” > “添加设备”。
- 点击“我需要的打印机不在列表中”。
- 选择“按名称选择共享打印机”,输入路径:
http://[Linux服务器IP]:631/printers/[打印机名称]。例如:http://192.168.1.100:631/printers/hp_printer。 - 系统会自动下载并安装驱动程序。若自动搜索失败,可在后续步骤手动选择驱动。
2. macOS客户端配置
- 打开“系统设置” > “打印机与扫描仪”。
- 点击“添加打印机、扫描仪或传真机”。
- 在列表中选择“IP”标签页。
- 协议选择“IPP”,输入服务器IP,URL填写:
http://[Linux服务器IP]:631/printers/[打印机名称]。 - 在“使用”下拉菜单中选择合适的驱动程序(通常为AirPrint或厂商专用驱动),点击“添加”。
3. Linux客户端配置
- 大多数现代Linux发行版(如Ubuntu Desktop)支持Avahi/mDNS发现,可直接在网络打印机列表中找到。
- 若未自动发现,可在“打印机”设置中手动添加,使用IPP协议指向服务器地址。
七、 常见问题与故障排查
1. 客户端无法连接或超时
检查防火墙:确认服务器端631端口已对客户端IP开放。可使用telnet [IP] 631测试连通性。
检查SELinux:在CentOS/RHEL系统中,SELinux可能阻止CUPS访问打印设备。执行semanage port -a -t cupsd_port_t -p tcp 631并确保服务上下文正确,或临时设为Permissive模式测试:setenforce 0。
2. 打印任务排队但无法输出
检查队列状态:在服务器Web界面或终端使用lpstat -o查看队列。若任务被暂停,执行cupsenable [打印机名称]和cupsaccept [打印机名称]。
检查纸张尺寸与类型:确保服务器端设置的纸张尺寸与客户端发送的文档一致,否则可能导致静默失败。
3. 权限问题
普通用户可能无法提交打印任务。确保将需要打印的用户加入lp组:sudo usermod -aG lp [用户名],然后重新登录生效。
结语
通过CUPS服务将USB打印机转化为网络打印机,不仅解决了多用户共享难题,还提升了打印服务的稳定性和安全性。对于中小企业IT管理员而言,掌握这一技能有助于简化办公环境管理,降低硬件采购成本。建议定期备份CUPS配置文件(/etc/cups/cupsd.conf和PPD文件),以便在系统重置后快速恢复服务。