CUPS Web 教程:用浏览器远程管理打印

2026-05-28 10:56:41 0点赞 1收藏 0评论

还在为共享打印机装驱动发愁?还在把文件拷到 U 盘跑去打印机旁边操作?CUPS Web 让你通过浏览器上传文件、远程提交打印任务,告别"打印靠走"的时代。


一、CUPS Web 是什么?

CUPS Web 是一个基于 CUPS(通用 Unix 打印系统)的网页版打印管理工具。简单说,它在你家的打印机和你之间加了一层网页界面——你不需要装驱动、不需要坐在打印机旁边,只要打开浏览器就能打印。

适合谁用?

  • 🏠 家里有一台 USB 打印机,想让全家人都能无线打印

  • 🏢 小型办公室,几台电脑共享一台打印机,不想折腾驱动

  • 🖥️ 有 NAS 或家庭服务器的玩家,想把打印管理也容器化

  • 📱 想从手机/平板远程打印的人(配合 AirPrint 也能用)

核心能力一览:

能力 说明 多格式支持 PDF、图片(JPG/PNG/GIF/HEIC)、Office 文档、OFD、纯文本 自动转换 Office→PDF(LibreOffice)、OFD→PDF(ofdrw)、图片/文本→PDF 多图合并 一次选多张图片,自动合并成一份 PDF 打印 丰富的打印选项 份数、单双面、彩色/黑白、纸张大小、页码范围、缩放、镜像 实时预览 打印前预览 PDF,确认页数和排版 多用户管理 admin/user 两种角色,打印记录完整追踪 内置打印机驱动 预装 Epson、Canon、HP、Brother 等常见品牌驱动


二、整体架构:两个容器,各司其职

CUPS Web 采用双容器架构,非常清晰:

CUPS Web 教程:用浏览器远程管理打印
  • cups 容器:负责实际的打印服务,管理打印机驱动,连接物理打印机

  • cups-web 容器:提供网页界面,处理文件上传、格式转换、用户管理,通过 IPP 协议与 cups 通信

这两个容器通过 Docker 网络内部通信,对外只暴露两个端口。


三、部署方式选择

场景 推荐方式 从零开始,没有 CUPS 服务 ✅ Docker 部署(一键拉起两个容器) 已有 CUPS 服务在运行 ✅ 二进制部署(只装 Web 部分)

绝大多数用户建议用 Docker 部署,省心省力。


四、Docker 部署:手把手操作

4.1 前置准备

确保你的机器上已经安装了:

  • Docker + Docker Compose

  • 一台 USB 打印机(通过网络连接的打印机也可以,但 USB 打印机需要把设备映射进容器)

4.2 创建项目目录

mkdir cups-web && cd cups-web

4.3 创建 docker-compose.yml

services: cups: image: hanxi/cups:latest user: root environment: - CUPSADMIN=${CUPSADMIN} - CUPSPASSWORD=${CUPSPASSWORD} ports: - "631:631" devices: - /dev/bus/usb:/dev/bus/usb volumes: - ./.etc:/etc/cups restart: unless-stopped web: image: hanxi/cups-web:latest user: root environment: - CUPS_HOST=cups:631 volumes: - ./.data:/data - ./.uploads:/uploads ports: - "1180:8080" depends_on: - cups restart: unless-stopped

💡 也可以直接下载官方的配置文件:

wget https://raw.githubusercontent.com/hanxi/cups-web/master/docker-compose.yml

关键配置解释:

配置项 说明 devices: /dev/bus/usb 把宿主机的 USB 设备映射进容器,USB 打印机必须配这一行 volumes: ./.etc:/etc/cups CUPS 配置持久化,重启不丢失打印机设置 volumes: ./.data:/data Web 数据库持久化,存储用户和打印记录 volumes: ./.uploads:/uploads 上传文件持久化 CUPS_HOST=cups:631 Web 容器通过 Docker 内部网络访问 cups 容器

4.4 配置环境变量

在同一目录下创建 .env 文件:

CUPSADMIN=admin CUPSPASSWORD=your_secure_password

⚠️ CUPSPASSWORD 请设置一个强密码,这是 CUPS 管理界面的登录密码。

4.5 启动服务

docker-compose up -d

等镜像拉取完成后,两个容器就都跑起来了。可以验证一下:

docker-compose ps

看到两个容器状态都是 Up 就说明启动成功。

4.6 配置打印机

这是最关键的一步!

  1. 打开 CUPS 管理界面:浏览器访问 http://你的服务器IP:631

  2. 登录:使用 .env 中设置的 CUPSADMIN / CUPSPASSWORD

  3. 添加打印机

    • 点击顶部 Administration 标签

    • 点击 Add Printer

    • 选择你的打印机设备(Local Printers 下应该能看到 USB 打印机)

    • 按向导选择驱动、设置名称和描述

  4. ⚠️ 设为共享:添加完成后,在打印机页面勾选 Shared 选项

🔴 必须设为 Shared! 这是新手最常踩的坑——如果打印机不是 Shared 状态,Web 端无法发现它。

4.7 访问 Web 界面

浏览器打开 http://你的服务器IP:1180,用默认账号登录:

  • 用户名:admin

  • 密码:admin

⚠️ 首次登录后请立即修改默认密码! 在管理后台的用户管理中修改。


五、二进制部署:适合已有 CUPS 的场景

如果你已经在服务器上跑着 CUPS 服务,只需要加一个 Web 前端,用二进制部署更轻量。

5.1 下载二进制

从 GitHub Releases 下载对应平台的文件:

平台 架构 文件名 Linux amd64 cups-web-linux-amd64 Linux arm64 cups-web-linux-arm64 Linux armv7 cups-web-linux-armv7 Linux loong64 cups-web-linux-loong64 macOS amd64 cups-web-darwin-amd64 macOS arm64 cups-web-darwin-arm64 Windows amd64 cups-web-windows-amd64.exe

wget https://github.com/hanxi/cups-web/releases/latest/download/cups-web-linux-amd64 chmod +x cups-web-linux-amd64

5.2 配置环境变量并运行

export CUPS_HOST=localhost:631 # 指向你已有的 CUPS 服务 export DB_PATH=./data/cups-web.db export UPLOAD_DIR=./uploads export LISTEN_ADDR=:8080 ./cups-web-linux-amd64

也可以用命令行参数(优先级高于环境变量):

./cups-web-linux-amd64 -addr :8080

5.3 访问

打开 http://localhost:8080,默认账号 admin/admin。

⚠️ OFD 格式仅在 Docker 镜像中开箱即用。二进制部署需要自行安装 Java 17 并放置 ofd-converter.jar。


六、使用指南

6.1 打印文件

登录后进入主页面,打印流程只需四步:

选择打印机 → 上传文件 → 调整参数 → 确认打印

支持的文件格式:

类型 扩展名 转换方式 PDF .pdf 直接打印,无需转换 图片 .jpg .png .gif .heic 服务端转为 PDF,支持多张合并 Office .doc .docx .xls .xlsx .ppt .pptx LibreOffice 转 PDF OFD .ofd ofdrw 转 PDF(仅 Docker) 文本 .txt .md .html 服务端渲染为 PDF

打印参数说明:

  • 份数:打印几份

  • 单双面:节省纸张的好帮手

  • 彩色/黑白:黑白文档选黑白省墨

  • 纸张大小:A4、Letter 等

  • 纸张类型:普通纸、照片纸等

  • 页面方向:纵向/横向

  • 页码范围:如 1-3,5,7-9,只打印需要的页

  • 缩放:适配纸张或按原始大小

  • 镜像打印:特殊场景使用(如热转印)

6.2 多图合并打印

一次选择多张图片,系统会自动合并成一份 PDF。适合打印照片集、扫描件等场景。

6.3 实时预览

上传文件后,在确认打印前可以预览转换后的 PDF,确认页数和排版效果。这是避免浪费纸张的关键步骤——打印前先预览!

6.4 管理员操作

管理员(admin 角色)可以:

  • 用户管理:创建、编辑、删除普通用户;修改角色与联系信息

  • 打印记录查询:按用户名、时间范围过滤,查看每次打印的详细信息

  • 系统设置:配置数据保留天数(0 = 永久保留),自动清理过期记录和文件

注意:默认的 admin 账号受保护,无法被删除或重命名。


七、内置打印机驱动:开箱即用

CUPS Web 的 Docker 镜像预装了大量打印机驱动,免去了手动安装的麻烦。以下是主要覆盖的品牌和机型:

通用驱动(覆盖大量机型)

驱动包 覆盖范围 printer-driver-all Debian 维护的数十种小众驱动 printer-driver-cups-pdf 虚拟 PDF 打印机(无实体打印机也能调试) printer-driver-escpr Epson 老款喷墨机 hplip + hp-ppd HP 全系(LaserJet、OfficeJet、DeskJet、Envy) printer-driver-gutenprint Epson/Canon/HP/Lexmark 老机型 foomatic-db + openprinting-ppds 海量 PPD 库 ipp-usb USB 直连的 AirPrint/Mopria 打印机自动识别

厂商专有驱动

品牌 适用机型 架构 Epson ESC/P-R 2 新款喷墨(ET-18100、L8050、L8160 等) amd64/arm64/armv7 Canon UFR II i-SENSYS、imageCLASS、imageRUNNER 激光机 amd64/arm64 柯尼卡美能达 bizhub 3000MF amd64/arm64 HP LaserJet 1020 1020 系列 host-based 打印机 全架构

💡 如果你的打印机不在列表中,仍可通过 CUPS 管理界面(http://localhost:631)上传自定义 PPD 添加。


八、进阶配置

8.1 配置 HTTPS(推荐)

通过 Nginx 反向代理提供 HTTPS 访问:

server { listen 443 ssl; server_name print.example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:1180; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

配置好 SSL 证书后,就可以通过 https://print.example.com 安全访问了。

8.2 修改端口

编辑 docker-compose.yml 中 web 服务的 ports 映射:

services: web: ports: - "8080:8080" # 改成你想要的端口

8.3 数据备份

定期备份数据库和上传文件:

# 备份数据库 cp ./.data/cups-web.db /backup/location/ # 备份上传文件 tar -czf uploads-backup-$(date +%Y%m%d).tar.gz ./.uploads/ # 备份 CUPS 配置 tar -czf cups-config-backup-$(date +%Y%m%d).tar.gz ./.etc/

建议加入 crontab 自动执行:

# 每天凌晨 3 点自动备份 0 3 * * * cp /path/to/cups-web/.data/cups-web.db /backup/cups-web-$(date +%Y%m%d).db

8.4 数据自动清理

在管理后台的「系统设置」中设置「数据保留天数」,系统每小时巡检一次,自动清理过期的打印记录和对应文件。设为 0 则永久保留。


九、常见问题排查

Q1:Web 端看不到打印机?

这是最常见的问题,按顺序检查:

  1. 访问 http://localhost:631,确认打印机在 CUPS 中正常列出

  2. 确认打印机设为 Shared(最常见的遗漏)

  3. 检查 CUPS_HOST 环境变量是否正确指向 cups 容器

  4. 重启 cups 容器:docker-compose restart cups

Q2:Office 文档转换失败?

  • 转换有 60 秒超时,复杂文档可能超时

  • 确认文档本身未损坏,可尝试先另存为 PDF 再上传

  • 查看日志定位原因:docker-compose logs -f web

Q3:忘记管理员密码?

删除数据库重启即可重置为 admin/admin(会丢失全部数据):

docker-compose down rm ./.data/cups-web.db docker-compose up -d

Q4:上传文件占空间越来越多?

在管理后台设置数据保留天数,系统会自动清理。

Q5:AirPrint 选不到 A4 纸?

这是已知问题(foo2zjs 驱动默认纸张为 Letter),容器启动时会自动将 HP 1020 打印机的默认纸张切换为 A4。添加新打印机时,选 CUPS 列表中的 HP LaserJet 1020 Foomatic/foo2zjs-z1 A4 (cups-web) 变体即可。

Q6:如何查看日志?

# Web 服务日志 docker-compose logs -f web # CUPS 服务日志 docker-compose logs -f cups


十、安全注意事项

CUPS Web 内置了多层安全机制:

机制 说明 Session 认证 基于 Gorilla securecookie(加密+签名),密钥自动生成并持久化 CSRF 防护 所有非 GET/HEAD/OPTIONS 请求校验 X-CSRF-Token 密码安全 bcrypt 加密存储

你的责任:

  1. ✅ 首次登录后立即修改默认密码

  2. ✅ 为 CUPS 管理员设置强密码

  3. ✅ 生产环境务必配置 HTTPS

  4. ✅ 不要把服务直接暴露在公网,使用 VPN 或内网穿透


十一、环境变量速查表

变量名 说明 默认值 必填 CUPS_HOST CUPS 服务地址 localhost ✅ LISTEN_ADDR Web 监听地址 :8080 ❌ DB_PATH 数据库路径 data/cups-web.db ❌ UPLOAD_DIR 上传目录 uploads ❌ CUPSADMIN CUPS 管理员用户名 — ✅(cups 容器) CUPSPASSWORD CUPS 管理员密码 — ✅(cups 容器)


十二、总结

CUPS Web 解决了一个很实际的问题:让打印变得像上传文件一样简单

它的核心价值:

  • 🐳 Docker 一键部署,10 分钟搭建完成

  • 🖨️ 预装大量驱动,主流打印机开箱即用

  • 📱 浏览器操作,不需要安装任何客户端

  • 👥 多用户管理,适合家庭和小团队

  • 📊 打印记录追踪,谁打了什么一目了然

项目地址:github.com/hanxi/cups-web
Docker Hub:hub.docker.com/r/hanxi/cups-web

如果觉得好用,别忘了给项目点个 ⭐ Star!

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
1
扫一下,分享更方便,购买更轻松