包松旺 发表于 2026-9-30 21:45:57

飞牛 NAS 共享打印机完全指南

飞牛 NAS 共享打印机完全指南
把 USB 打印机变成「全屋 + 手机」都能用的网络打印机
Docker + CUPS 实战(真机验证版)
小白级 · 照抄即可 · 踩坑经验全收录
实测环境:飞牛 fnOS(Debian 底座)· Docker 28.5 · Brother MFC-7380 激光一体机
适用:任意品牌 USB 打印机 · fnOS / 其他支持 Docker 的 NAS
〇、写在前面:这篇教程怎么来的
这不是一篇"理论教程"。作者在自己的飞牛 NAS 上,用一台 Brother MFC-7380 激光一体机完整走通了从接线、部署、添加打印机、打测试页,到 Windows / iPhone / Android 各端连接的全流程,下面所有命令和输出都是真实跑通的记录(文中有终端实景为证)。
方案核心:在飞牛的 Docker 里跑一套 CUPS 打印引擎 + cups-web 网页界面,USB 打印机直插 NAS,从此:
· 家里所有电脑(Windows / macOS)不用装打印机驱动盘,局域网直接添加;
· iPhone / iPad 走 AirPrint 自动发现,无需装任何 App;
· 家人用手机浏览器打开网页就能上传文件打印;
· NAS 7×24 在线,手机不在家也能远程发打印任务(进阶篇)。
一、一张图看懂原理
整套系统本质是:一台 CUPS 打印引擎 + 两个网页壳。日常打印走网页(上传文件直接打);加打印机、装驱动、设共享去 CUPS 管理页。两者共用同一台物理打印机,不用各加一次。

图 1 · 整体架构:飞牛 NAS 就是一台打印服务器
二、开工前必读:最容易翻车的坑
先说这篇教程最重要的经验——80%的"共享打印失败"根本不是软件问题,是 USB 线或 USB 口坏了。
作者的打印机一开始就怎么都加不进 CUPS,一度以为是软件不行,折腾很久。最后在 NAS 内核日志里抓到了真相:
|内核日志实录(踩坑证据):
usb 3-2: device descriptor read/64, error -110
usb usb3-port2: Cannot enable. Maybe the USB cable is bad?
翻译成人话:打印机其实被认出来过,但线/口接触不良,设备反复掉线重连。换任何打印软件都救不了,必须先换线、换口。换一个口之后,一次就加进去了。 |
所以,动手之前先按下面这张图把物理连接做对:

图 2 · 物理接线:数据线 + 直插主机背后的口
· 用确认能传数据的数据线(很多打印机附赠线只能供电,或老化接触不良);
· 插 NAS 主机背后主板直出的 USB 口,别插前置面板、显示器 USB 口、拓展坞;
· 打印机通电开机,插好后等 10 秒再操作软件。
三、前置条件
· 飞牛 NAS 一台,已进 fnOS 后台,应用中心装好 Docker;
· USB 打印机一台,USB 线直插飞牛并通电(见上一节);
· 你的电脑 / 手机和飞牛在同一局域网(先保证局域网能用,再搞远程)。
四、第一步:部署 Docker 应用
4.1 docker-compose 配置(整段复制)
在飞牛 Docker →「项目 / Compose」里新建一个项目(比如叫 cups),粘贴以下内容:
` |services:
cups:
image: docker.1ms.run/hanxi/cups:latest # 国内镜像;Docker Hub 原版写 hanxi/cups:latest
user: root
environment:

[*]CUPSADMIN=admin


[*]CUPSPASSWORD=123456 # 改成你自己的强密码!


[*]TZ=Asia/Shanghai

ports:

[*]"631:631" # CUPS 管理页(局域网)

devices:

[*]/dev/bus/usb:/dev/bus/usb # USB 直通,关键!没它识别不到打印机

volumes:

[*]./.etc:/etc/cups # 配置持久化

restart: unless-stopped
web:
image: docker.1ms.run/hanxi/cups-web:latest
user: root
environment:

[*]CUPS_HOST=cups:631 # 网页壳指向上面的 CUPS

volumes:

[*]./.data:/data # 网页用户/登录数据


[*]./.uploads:/uploads # 上传的文件

ports:

[*]"1180:8080" # 网页打印界面(局域网)

depends_on:

[*]cups

restart: unless-stopped |
`
|注意:纯局域网用上面的 631:631 即可。以后要从外面远程打印,才需要把端口改成 127.0.0.1:631:631(只绑本机)再接 HTTPS 反代,见第十节。 |
4.2 启动
方式 A(图形界面):项目创建后点「启动」,等两个容器都变成运行中:cups(631)和 web(1180)。
方式 B(终端,推荐,能直接看到报错):
|cd /你的项目目录/cups
sudo docker compose up -d
sudo docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -i cups |
五、第二步:确认打印机被识别
容器起来后,先别急着加打印机,先确认 NAS 和 CUPS 都"看到"了打印机:
|# 1) 宿主机 USB 层:应看到打印机厂商(Brother / HP / Epson / Canon ...)
sudo lsusb | grep -iE "brother|hp|epson|canon|samsung"
2) CUPS 层(关键):应看到 usb:// 开头的设备地址
sudo docker exec <cups容器名> lpinfo -v | grep -i usb
正常输出类似:direct usb://Brother/MFC-7380?serial=XXXX |
下面是作者飞牛上真实跑通的终端输出(打印机识别、容器在线、测试页 completed):

图 3 · NAS 终端实景:打印机识别 + 容器在线 + 测试页完成
拿到那行 usb://... 设备地址,后面添加打印机要用。如果这里什么都看不到,回第二节检查线材和接口,别往下走。
六、第三步:添加打印机与选驱动
6.1 方法一:CUPS 网页(直观,推荐新手)

[*]浏览器打开 http://飞牛IP:631 → 顶部 Administration 标签 → 提示登录时输入 admin 和你在 compose 里设的 CUPSPASSWORD;


[*]点 Add Printer,在 Local Printers 里选你的 USB 打印机(就是那行 usb:// 设备)→ 下一步;


[*]Name 填一个好记的名字(比如 myprinter),勾选 Share This Printer → 下一步;


[*]选驱动:优先选带 Driverless / IPP Everywhere 的(新打印机直接可用);没有就按品牌型号选;实在找不到,选 Generic → Generic PCL 6 / PostScript(黑白激光/喷墨大多能打);


[*]点 Add Printer 完成。

6.2 方法二:命令行(更稳,老机型推荐)
作者的 Brother MFC-7380 比较老,镜像里没有专用驱动、也不支持 Driverless,最后用通用 PCL 5e 驱动一次成功:
|# 1) 查有没有你型号的专用驱动(换成你的型号)
sudo docker exec <cups容器名> lpinfo -m | grep -i "MFC-7380"
2) 添加打印机(设备地址用第五步拿到的 usb://...)
sudo docker exec <cups容器名> lpadmin -p myprinter -E \
-v "usb://Brother/MFC-7380?serial=XXXX" \
-m "foomatic-db-compressed-ppds:0/ppd/foomatic-ppd/Generic-PCL_5e_Printer-ljet4.ppd"
3) 设为默认 + 开共享
sudo docker exec <cups容器名> lpadmin -d myprinter
sudo docker exec <cups容器名> lpadmin -p myprinter -o printer-is-shared=true
4) 看状态(应为 idle / enabled)
sudo docker exec <cups容器名> lpstat -p myprinter |
6.3 打印质量不对?装对应品牌驱动(可选)
如果通用驱动打出来乱码或质量差,进 cups 容器装对应驱动,然后重新 lpadmin -m 指定新 PPD:
|sudo docker exec <cups容器名> apt-get update
sudo docker exec <cups容器名> apt-get install -y printer-driver-brlaser # Brother 激光
sudo docker exec <cups容器名> apt-get install -y printer-driver-gutenprint # Epson/Canon 喷墨
sudo docker exec <cups容器名> apt-get install -y printer-driver-hpcups # HP |
七、第四步:打印测试页验证
· CUPS 网页:http://飞牛IP:631 → Printers → 你的打印机 → Maintenance → Print Test Page,出纸 = 成功;
· 命令行:sudo docker exec <cups容器名> lp -d myprinter /usr/share/cups/data/testprint,然后用 lpstat -o 看队列,显示 completed 即成功;
· 网页打印:打开 http://飞牛IP:1180 上传一个 PDF / 图片打印,出纸 = 日常通路 OK。
八、认清两个管理页面(别再密码错误)
这套栈有两个网页、两套独立账号——它们不是两套系统,而是同一台 CUPS 引擎 + 两个网页壳,但登录账号是分开的,这是新人最容易懵的地方:

图 4 · 两个管理页:日常用网页(:1180),管理用引擎(:631)
|页面 |默认账号 / 密码 |怎么改密码 |
|cups-web 网页 :1180(日常打印) |admin / admin |登录后界面里改(密码存在 .data/cups-web.db) |
|CUPS 管理页 :631(加打印机/驱动) |admin / compose 里设的 CUPSPASSWORD |改 compose 后 docker compose up -d 重建生效 |
在 CUPS 里加好的打印机,会自动出现在网页里,不用两边各加一次。
九、第五步:全家设备连接

图 5 · 各端连接方式总览(地址里的 IP 换成你的飞牛 IP)
9.1 Windows 10 / 11
设置 → 蓝牙和其他设备 → 打印机和扫描仪 → 添加打印机 → 点「我需要的打印机不在列表中」→ 选「按名称选择共享打印机」→ 填 http://飞牛IP:631/printers/myprinter → 下一步,驱动选对应厂商型号,或 Generic PCL。
9.2 macOS
系统设置 → 打印机与扫描仪 → 「+」→ 顶部切到 IP 标签:协议选 IPP,地址填飞牛 IP,队列填 printers/myprinter → 添加。驱动选 Generic PostScript 或对应型号。
9.3 iPhone / iPad(AirPrint,零配置)
什么都不用装。同一 WiFi 下,任意 App 里点「共享 → 打印」,打印机列表会直接出现 myprinter(CUPS 已开 Bonjour 广播)。
9.4 Android
方式一:装 Mopria Print Service 或厂商打印插件,添加 IPP 打印机 ipp://飞牛IP:631/printers/myprinter。方式二(最简单):手机浏览器打开 http://飞牛IP:1180,登录后直接上传文件打印。
十、进阶:手机流量也能打(远程访问,可选)
局域网搞定了,想在外面、在公司用流量给家里打印机发任务,两种思路:
· 有公网 IP:路由器做端口转发,把 631 暴露出去;compose 里把端口改成 127.0.0.1:631:631,再接一层 HTTPS 反代(飞牛可用自带的 Let's Encrypt 证书反代),外面用 ipps://你的域名:端口/printers/myprinter 添加;
· 没公网 IP:用 Frp / Tailscale 等内网穿透,原理一样——穿透到 NAS 的 631 端口。
|安全红线:远程访问务必走 HTTPS + 强密码。CUPS 网页是明文 HTTP,裸奔暴露公网的话,打印内容和账号密码都会被截获。没搞反代之前,别把 631 直接转发到公网。 |
十一、安全:把两套弱密码都改掉
默认的 admin/admin 和 admin/123456 都是弱密码,局域网内人人可进。上线前请务必改掉(改法见第八节的表格)。作者血泪建议:第一次登录就改密码,尤其是 :1180 那个网页入口——全家人都会用,也最容易被人顺手点开。
十二、常见问题排查

图 6 · 三步排查决策树:先线材、再驱动、最后网络
|症状 |原因与解法 |
|lsusb 看不到打印机 / 反复掉线 |线材或接口问题(本文最大坑)。换数据线、换 NAS 背后主板直出口;dmesg | grep usb 看是否还报 device descriptor error -110 |
|lpinfo -v 没有 usb:// 设备 |容器没拿到 USB。确认 compose 的 devices: /dev/bus/usb 生效,docker compose restart 后重查 |
|能识别但打印乱码 / 不出纸 |驱动不对。换 Driverless / IPP Everywhere,或 Generic PCL 6 / PostScript,或装第六节的品牌驱动 |
|客户端连不上 631 |防火墙/路由器拦截;先 telnet 飞牛IP 631 测试连通;确认 CUPS 监听 0.0.0.0:631(默认已开) |
|:1180 登录提示密码错误 |账号串了::1180 用 admin/admin,:631 用 admin/你设的 CUPSPASSWORD。两套独立账号 |
十三、部署验证清单(打勾才算完)
· ☐ 飞牛 lsusb 能看到打印机(物理层)
· ☐ 容器内 lpinfo -v 出现 usb://...(容器拿到设备)
· ☐ CUPS :631 打印测试页出纸
· ☐ 网页 :1180 上传文件打印出纸
· ☐ 同局域网 Windows 添加后打印成功
· ☐ iPhone(AirPrint)/ Android 能发现并打印
· ☐ 两套默认密码都已改掉
· ☐(可选)远程 ipps:// 能打印
— 全文完 · 祝你一次点亮 —
页: [1]
查看完整版本: 飞牛 NAS 共享打印机完全指南