1. 项目概述:让传统打印机实现无线共享
办公室里那台老式USB打印机已经服役五年了,每次同事要打印都得把文件发给我,或者插拔USB线轮流使用。直到上个月部门新来了两位实习生,打印排队问题突然变得棘手起来。这促使我研究出一个零成本的解决方案——用闲置的树莓派将普通打印机改造成网络打印机,现在全办公室12台设备都能随时无线打印了。
这个方案的核心价值在于:
- 完全保留原有打印功能
- 支持多设备同时连接
- 打印任务自动排队处理
- 无需购置新设备(利用现有树莓派)
- 跨平台兼容Windows/macOS/Linux
实测发现:改装后的打印速度与直连USB完全一致,网络延迟几乎可以忽略不计,连续打印50页文档未出现任何卡纸或错位现象。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与系统配置
2.1 所需材料清单
- 树莓派3B及以上型号(实测2B也能运行)
- 5V/2.5A电源适配器
- 16GB以上TF卡
- USB打印机(我使用的是HP LaserJet P1106)
- 网线或WiFi连接
2.2 系统镜像刷写
推荐使用Raspberry Pi OS Lite版本(无桌面环境更省资源):
bash复制# 使用balenaEtcher刷写镜像
dd if=raspios-lite.img of=/dev/sdX bs=4M status=progress
首次启动后需要:
- 执行
raspi-config扩展文件系统 - 设置时区(亚洲/上海)
- 启用SSH服务
- 配置WiFi(如使用无线连接):
bash复制sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
# 添加:
network={
ssid="你的WiFi名称"
psk="密码"
}
3. CUPS打印服务部署
3.1 安装必要组件
bash复制sudo apt update && sudo apt install -y cups avahi-daemon
sudo usermod -a -G lpadmin pi # 将当前用户加入打印管理组
3.2 关键配置修改
编辑CUPS配置文件:
bash复制sudo nano /etc/cups/cupsd.conf
需要修改的参数:
apache复制Listen *:631 # 允许所有网络接口
<Location />
Allow @LOCAL
</Location>
<Location /admin>
Allow @LOCAL
</Location>
3.3 服务重启与验证
bash复制sudo systemctl restart cups
sudo systemctl enable cups
浏览器访问http://树莓派IP:631应能看到管理界面。
4. 打印机驱动安装实战
4.1 自动检测打印机
连接USB打印机后执行:
bash复制lpinfo -v | grep usb
# 输出示例:direct usb://HP/LaserJet%20P1106?serial=XXXX
4.2 驱动选择策略
推荐方案:
- 首选官方PPD驱动(从打印机官网下载)
- 次选CUPS内置通用驱动
- 最后考虑foomatic-db方案
以HP打印机为例:
bash复制sudo apt install hplip
sudo hp-setup -i # 交互式安装向导
4.3 共享设置要点
在CUPS管理界面:
- 进入打印机属性
- 勾选"Share This Printer"
- 设置共享名称(建议不含空格)
- 应用更改
5. 客户端配置指南
5.1 Windows端配置
- 控制面板 → 设备和打印机 → 添加打印机
- 选择"我需要的打印机不在列表中"
- 输入URL:
http://树莓派IP:631/printers/共享名称 - 安装对应驱动
5.2 macOS端配置
- 系统偏好设置 → 打印机与扫描仪
- 点击"+" → IP打印机
- 协议选择"IPP"
- 地址填写树莓派IP
- 队列填写
/printers/共享名称
5.3 移动端打印方案
推荐安装"Printer Pro"等支持IPP协议的APP,配置方法与macOS类似。
6. 高级优化技巧
6.1 打印队列监控
实时查看打印任务:
bash复制lpstat -o -p
取消指定任务:
bash复制cancel 任务ID
6.2 自动唤醒设置
解决USB打印机休眠问题:
bash复制sudo nano /etc/udev/rules.d/10-printer-wakeup.rules
添加内容:
udev复制ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="3a17", RUN+="/usr/sbin/usb_printerid /dev/usb/lp0"
6.3 网络性能调优
修改CUPS工作线程数:
bash复制sudo nano /etc/cups/cupsd.conf
MaxJobs 100 # 默认是500,小内存设备建议调低
MaxClients 20 # 并发连接数限制
7. 常见问题排查手册
7.1 打印机状态异常
现象:打印机显示"stopped"
解决方法:
bash复制cupsenable 打印机名称
cupsaccept 打印机名称
7.2 Windows连接报错0x00000002
处理步骤:
- 确保客户端已开启IPP特性:
powershell复制Enable-WindowsOptionalFeature -Online -FeatureName "Printing-PrintToPDFServices-Features" -All - 重新添加打印机
7.3 打印乱码/错位
可能原因及对策:
- 驱动不匹配 → 重新安装官方PPD
- 纸张设置错误 → 检查CUPS中的页面设置
- 内存不足 → 增加swap空间:
bash复制sudo nano /etc/dphys-swapfile CONF_SWAPSIZE=1024 # 将默认值100改为1024 sudo systemctl restart dphys-swapfile
8. 安全加固建议
8.1 防火墙配置
仅开放必要端口:
bash复制sudo ufw allow 631/tcp
sudo ufw enable
8.2 访问控制
限制管理界面访问:
bash复制sudo nano /etc/cups/cupsd.conf
修改为:
apache复制<Location /admin>
Allow 192.168.1.0/24
Deny all
</Location>
8.3 日志监控
设置日志轮转:
bash复制sudo nano /etc/logrotate.d/cups
添加:
logrotate复制/var/log/cups/*log {
weekly
missingok
rotate 8
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/cupsctl --debug-logging
endscript
}
经过三个月的实际运行,这套系统日均处理约80份打印任务,最长的持续工作时间达到47天无需重启。唯一遇到的意外是某次停电导致打印队列堆积,后来通过添加UPS电源解决了这个问题。对于家庭用户,还可以考虑用手机充电宝给树莓派临时供电。
