CUPS 打印服务一键配置脚本

适用于 Armbian / Debian / Ubuntu 系统,支持 x86_64 和 ARM 架构。

功能特性

  • 一键安装 CUPS 打印服务
  • 自动配置远程访问和局域网共享
  • 中文 Web 管理界面(含常见驱动选项动态汉化)
  • AirPrint 支持(iOS/macOS 自动发现)
  • 虚拟 PDF 打印机(测试连接用)
  • 多种打印机驱动可选
  • 驱动管理器(默认仅允许内网访问)
  • 驱动管理器账号密码可通过脚本菜单修改
  • 网络和打印服务守护(断网自动切 DHCP,CUPS 卡死自动恢复)
  • 静态 IP 支持网关变更自愈:先切 DHCP,再按原静态 IP 尾号迁移到新网段
  • 独立程序更新(保留配置和密码,更新前备份,失败自动回滚)
  • 支持一键卸载

快速安装

# 方式一:curl
curl -fsSL https://git.workyai.cn/237899745/S905L3A/raw/branch/master/setup_cups.sh | bash

# 方式二:wget
wget -qO- https://git.workyai.cn/237899745/S905L3A/raw/branch/master/setup_cups.sh | bash

卸载

# 下载脚本
wget -O setup_cups.sh https://git.workyai.cn/237899745/S905L3A/raw/branch/master/setup_cups.sh
chmod +x setup_cups.sh

# 执行卸载
./setup_cups.sh --uninstall

修改驱动管理器账号密码

# 方式一:从主菜单选择“修改驱动管理器用户名和密码”
./setup_cups.sh

# 方式二:直接进入账号密码修改流程
./setup_cups.sh --driver-manager-auth

驱动管理器默认最大上传 512MB,单个安装命令默认超时 900 秒。需要调整时可在服务环境变量中设置 DRIVER_MANAGER_MAX_UPLOAD_MBDRIVER_MANAGER_COMMAND_TIMEOUT

驱动选项

安装时可选择以下驱动:

选项 说明
1 通用驱动(推荐,支持大多数打印机)
2 HP 打印机 (hplip)
3 爱普生 (gutenprint)
4 兄弟 (brlaser)
5 奔图 Pantum
6 全部安装(不含奔图)
7 虚拟 PDF 打印机(测试用)
0 仅安装 CUPS(不安装驱动)

默认选项:1 7(通用驱动 + PDF 打印机)

客户端连接

局域网环境

客户端 连接方式
macOS/iOS 自动发现(AirPrint),无需配置
Android 安装 Mopria Print Service,自动发现
Windows 设置 → 打印机 → 添加打印机
Linux 自动发现或 ipp://IP:631/printers/打印机名

管理界面

  • 地址:https://服务器IP:631
  • 用户名:root
  • 密码:SSH 登录密码

服务端口

服务 端口 用途
CUPS 631 打印服务/Web管理界面
Avahi 5353 mDNS/AirPrint 自动发现
驱动管理器 632 内网上传安装打印机驱动(可选)

自动守护

安装脚本会自动启用两个 systemd timer

守护 作用
cups-network-watchdog.timer 每分钟检测网络,连续失败后自动把网卡切回 DHCP
cups-print-watchdog.timer 每分钟检测 CUPS/Avahi/驱动管理器,卡死或异常后自动重启

配置文件:

# 网络守护配置,可在里面设置固定 IP、网关、DNS
nano /etc/cups-watchdog/network-watchdog.conf

# 手动切回配置里的固定 IP
/opt/cups-watchdog/network-watchdog.sh static

# 手动切 DHCP
/opt/cups-watchdog/network-watchdog.sh dhcp

# 打印服务守护配置
nano /etc/cups-watchdog/print-watchdog.conf

# 查看守护状态
systemctl status cups-network-watchdog.timer cups-print-watchdog.timer

常用命令

# 查看打印机列表
lpstat -p -d

# 重启 CUPS
systemctl restart cups

# 查看 CUPS 日志
tail -f /var/log/cups/error_log

# 查看守护脚本日志
tail -f /var/log/cups-watchdog/network.log
tail -f /var/log/cups-watchdog/print.log

# 检查 USB 打印机
lsusb | grep -i print
lpinfo -v | grep usb

支持架构

  • x86_64 / amd64
  • aarch64 / arm64
  • armv7l / armhf

文件说明

├── setup_cups.sh              # 安装/卸载/更新菜单
├── update_cups.py             # 独立更新器(Python 3.9+
├── watchdog/                  # 网络和打印服务守护脚本
├── cups-templates-zh_CN/      # 中文界面模板(65个文件)
├── cups-docroot-zh_CN/        # CUPS 中文首页和前端汉化脚本
├── README.md                  # 本文档
└── 刷机教程.md                # Armbian 刷机教程

常见问题

手机打印提示"不再接受加密的作业"

脚本现在配置为 DefaultEncryption IfRequested,允许 HTTP,也接受客户端主动发起的 HTTPS。如仍提示,通常是客户端缓存了旧队列,删除后重新发现打印机即可。

手机发送打印任务很慢

脚本已配置 HostNameLookups Off 解决此问题。如果仍然慢,检查网络连接。

更换路由器或网关后找不到打印服务器

网络守护会在连续检测失败后先切换到 DHCP 恢复连接。如果发现 DHCP 获取到的新网关和原静态网关不同,会保留原静态 IP 的最后一段,例如 192.168.11.219219,自动改成新网段下的 x.x.x.219

界面显示英文

确保安装时下载了中文模板、中文首页和前端汉化脚本。重新运行安装脚本可以修复。

找不到 USB 打印机

  1. 确认打印机已通过 USB 连接到服务器
  2. 运行 lsusb 检查是否识别
  3. 刷新 CUPS 添加打印机页面

仓库地址

回归测试

需要 Python 3.9+、Flask 和 Bash。在仓库根目录运行:

python3 -B -m unittest discover -s tests -v

测试会模拟系统命令和驱动安装,不会修改真实网络、安装驱动或重启服务。 覆盖守护锁释放与连续失败恢复、多网卡地址选择、APT 等待/超时、PDF 备用驱动、DEB 架构筛选和基础访问控制。 更新器测试使用临时安装目录和模拟的 systemctl,覆盖预览、取消、配置保留、重复更新、服务状态恢复、写入失败及中断回滚。 通过这些测试不等于通过实机验证;systemd 更新流程、USB 打印、AirPrint、NetworkManager/netplan 切换仍需在目标设备验证。

更新已部署设备

更新 Git 仓库不会自动更新设备上的程序。请在打印服务器的 root 终端 执行以下命令, 或下载最新版 setup_cups.sh 后选择菜单 8:更新已安装程序。旧版安装脚本没有更新入口,需要先获取新版。

# 下载最新版脚本并进入更新流程(显示文件清单后需要输入 y 确认)
curl -fsSL https://git.workyai.cn/237899745/S905L3A/raw/branch/master/setup_cups.sh | bash -s -- --update

# 仅检查和预览,不修改已安装文件、不停止服务
curl -fsSL https://git.workyai.cn/237899745/S905L3A/raw/branch/master/setup_cups.sh | bash -s -- --update --dry-run

# 已有最新版脚本时;非交互环境可追加 --yes,明确确认更新
bash setup_cups.sh --update --yes

需要 Linux、systemd、Bash 和 Python 3.9+;缺少依赖时会退出,不会自动安装软件包。 默认从 Gitea 的 master 下载,并检查压缩包路径和程序语法。下载失败会退出,不自动切到可能尚未同步的镜像。 可信的离线仓库副本也可使用 python3 update_cups.py --source-dir . --dry-run 检查,去掉 --dry-run 后确认更新。

  • 只替换已经安装且内容有变化的驱动管理器、两个守护脚本、中文模板和首页脚本;没有变化时不会重启服务。不会补装缺失的可选组件或新增文件,也不会执行安装脚本中的配置迁移。
  • 不改打印机队列、CUPS/网络/守护配置、账号密码、systemd 服务文件及开机启用状态;不升级系统软件包、不重启 CUPS。手工修改过的程序文件或中文页面会被仓库版本替换,请先看预览清单。
  • 更新前在 /var/backups/cups-project/ 保存旧程序文件、校验值及原服务状态。先暂停原本运行的守护定时器,等待正在运行的守护检查结束,再替换文件。驱动管理器代码有变化时,其 Web 页面会短暂不可用。
  • 请在没有驱动上传/安装或手动守护操作时更新。检测到仍在运行的守护或驱动安装子进程会取消;不会强杀它们。确认守护空闲后,更新器会清理默认 /run/cups-watchdog/ 中旧版遗留的空锁目录,无需为此重启设备。
  • 替换或服务启动检查失败时,会尝试自动恢复旧文件和原服务运行状态;备份始终保留。断电、磁盘损坏或强制杀进程不能保证自动回滚,应根据报错及备份内的 manifest.json 人工恢复。

更新日志

  • 2026-09-11: 新增菜单第 8 项及 --update,支持更新预览、配置保留、备份校验、失败回滚和隔离回归测试。
  • 2026-09-11: 修复守护锁、多网卡静态 IP、APT 等待、PDF 备用驱动和多架构 DEB 安装问题,添加隔离回归测试。
  • 2024-12-01: 添加卸载功能、优化打印速度
  • 2024-11-30: 修复 CSS 兼容 CUPS 2.4.7、添加 PDF 打印机选项
S
Description
No description provided
Readme
494 KiB
Languages
Shell 47.7%
Python 44.1%
JavaScript 7.2%
HTML 1%