【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

2025-12-23 16:29:20 40点赞 47收藏 2评论

大概是一年前吧,由于工作室内有一些合同需要打印,于是琢磨着想买一台打印机。本来我是想说直接一步到位,买一台一千出头的市面上主流的打印机,像什么兄弟、奔图、华为之类的,结果当时工作室的小伙伴说:我们打印的需求量不是很大,没必要买个那么好的打印机,海鲜市场上那种老旧的二手打印机淘一个,自己换个墨盒又不是不能用。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

于是在巨大价差的诱惑下,我从海鲜市场入手了这台惠普的2132打印机,这是台诞生于2015年的老旧机器,虽然已有十年历史,但是说实话,除了有时候会卡壳其它问题倒还是没有。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

但用着用着吧,属实是感觉有点不太方便。这台打印机平时都是插在我的电脑上,工作室的小伙伴想要打印还得将文件发给我,再由我这台电脑发送给打印机。而可能有的小伙伴说:怎么不用局域网连接打印机呢?

嘿,你说这十几年前的打印机想要联网功能,这不是为难他么?

诶?我们日常使用的NAS就有USB接口,并且它永远存在于我们工作室中,如果不出意外的话还要在我们工作室中服役很多很多很多年,并且都是7*24小时运行的,那我能不能将打印机连接到NAS上,使打印机变成局域网打印机呢?

NAS部署CUPS连接打印机

那还真有这样一个Docker容器,只需要在nas上部署,就能将普通的老旧打印机变成局域网打印机——CUPS。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

咱们这使用的NAS是来自绿联的DXP4800 Plus,这台白色的DXP4800 Plus在上一篇的白色桌搭介绍中已经出现过了,现在它就是我们桌面上的主力NAS,跟打印机基本上是摆放在一个位置。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

选择DXP4800 Plus的原因很简单,4+2盘位设计,总共可以塞下136T的存储空间,搭配上Intel 奔腾 8505处理器,性能强劲可以支持我同时运行多个Docker以及虚拟机,能够满足我们平时折腾的需要。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

特别是还有个万兆接口,现在瑞昱的8127 PCIe万兆网卡价格已经来到了两百元左右,给PC插上再通过桥接模式,就能实现与PC之间的万兆连接,插上SSD,传输速度就是质的提升!

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

(为做演示,插在前置USB口) 另外给到的接口也比较多,后置有两个USB2.0,前置还有一个USB 3.2接口,像咱们这种外接打印机其实插在后面的USB口就够用了,看起来还美观一些。

咱们需要在NAS上部署CUPS这个Docker容器,将下面这段Compose代码复制进绿联的Docker中,等待一会儿就能完成部署了。

services:

cups:

image: ydkn/cups

container_name: cups

restart: unless-stopped

ports:

- "631:631"

volumes:

- /var/run/dbus:/var/run/dbus

- ./airprint_data/config:/config

- ./airprint_data/services:/services

devices:

- /dev/bus/usb:/dev/bus/usb

environment:

- CUPSADMIN=admin #设置用户名

- CUPSPASSWORD=password #设置密码

- TZ="Asia/Shanghai"

注意这里的密码改掉,如果不改掉默认就是admin(其实不改也没关系)

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

如果遇到镜像拉取失败,可以进入Docker-镜像-右上角设置按钮-加速器配置。绿联的Docker这里贴心的提示了一个比较好用的加速器,只需要将URL复制进文本框就行,点击确定后,Docker会重启。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

完成部署后,在浏览器输入NAS IP+:631(端口号),就能直接访问到CUPS的webui界面

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

进入之后,点击上方的administration,就会出现管理界面

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

点击Add Printer之后,会提示让你升级。这个不需要管,只需要在地址前面加上https://,就能正常访问了。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

这时会要求输入账号和密码,账号是admin,如果没改密码,那也是admin。之后就能看到添加打印机的页面了。我这里老款是惠普的DeskJet 2130,直接在这个页面就能看到已经识别到了。勾选型号之后点击continue。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

这里有个Share This Printer,记得勾选,后再点击continue。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

下一步就是选驱动。我这里的驱动已经识别出来了,直接选2130 series的就行。注意这里有两种,一种是hpijs,一种是hpcups。简单点来说,hpijs是较老的hp通用驱动,通常依赖Ghostscript先将文件转换成中间格式,再处理,步骤比较多。咱们这直接选择hpcups,这是hp为CUPS系统优化的现代驱动,效率更高。

如果你使用的打印机CUPS中并没有驱动,就需要自己找驱动上传了。或者看别的驱动能否驱动你的打印机。像联想的一些打印机是可以用Brother的驱动的。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

最后设置下策略就能使用啦

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

下拉,这里有个Print Test Page,可以测试是否连接成功

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

Windows下,进入设置里面手动添加打印机,复制地址栏的这一串URL,到手动添加打印机的页面,注意,记得把https改成http,不然无法连接。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

这里选择厂商,我是hp,直接选HP,也能识别到具体型号,点击确定后,就能正常使用了。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

最后在选择打印机处,选择咱们的网络打印机就行了!这样在局域网下的PC就都能将文件发送到这台打印机打印了。

进一步优化 实现外网打印

可是仅仅只是局域网打印这个使用范围是不是有点太局限了呢?对于一些家里有孩子的用户,如果不在家,家里老人又不会使用打印机,这时候不就不能用了么?还是得购入一台网络打印机。

咱们还能再对整个流程进行优化下,既然我们已经部署了CUPS连接到了打印机,能不能再创建个web页面,实现上传文件然后通过CUPS推送给打印机呢?

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

理想是美好的,但实现是艰难的,尝试了一个晚上还是无法打通。但换个角度,创建web界面上传文件,那最终文件保存还是保存在NAS的文件夹中,再通过CUPS推送给打印机打印。那精简下流程,不就是上传文件到指定文件夹,再推送给打印机打印么?

那这就好办了。

我的思路:创建个脚本,监控指定文件夹,如果文件夹中出现新增文件,调用系统的lp或lpr命令来提交打印任务。这样整体上的流程就比较简单了。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

OK,那先要在NAS的文件管理中创建一个print_pool文件夹,这个文件夹的作用就是存放需要打印的文件。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

再在Docker目录下创建scripts文件夹,这个文件夹就是咱们存放监控指定文件夹脚本所在的文件夹。

重新部署CUPS,需要注意的是,这次部署的CUPS需要挂载监控文件夹。咱们这里使用compose的方式部署,具体代码如下:

version: '3.8'

services:

cups:

image: ydkn/cups:latest

container_name: cups_server_ydkn # 建议使用新名称,避免与旧容器冲突

restart: unless-stopped

network_mode: "host"

privileged: true

environment:

- CUPS_USER_ADMIN=admin # 管理员用户名

- CUPS_USER_PASSWORD=your_strong_password # 【必须修改】管理员密码

- TZ=Asia/Shanghai # 【可选】设置时区为中国上海

volumes:

- /volume1/docker/cups-config-ydkn:/etc/cups # 建议使用独立的配置目录

- /volume1/print_pool:/print_pool # 监控文件夹映射(必须与脚本一致)

- /dev/bus/usb:/dev/bus/usb

那需要注意,这里的监控文件夹映射,需要更改为你实际的地址;需要先创建cups-config-ydkn文件夹,映射/etc/cups文件夹。

创建完成后开始拉取,拉取完后NAS IP:631,进入cups配置界面,跟上面的方法一样配置连接自己的打印机。

下面就是创建监控脚本,那需要注意在nas文件管理中无法直接创建.sh文件,咱们需要先在PC本地创建好.sh脚本。

新建文本文档,将下面这段代码复制进去之后再保存,并且文件名改为print_monitor.sh放入NAS的scripts文件夹。

#!/bin/bash

============ 用户配置区 ============

WATCH_DIR="/volume1/print_pool"

CONTAINER_NAME="cups_server_ydkn" # 务必与 docker-compose.yml 中的 container_name 一致

PRINTER_NAME="My_Printer" # 务必与CUPS网页中设置的打印机名一致

CONTAINER_MOUNT_PATH="/print_pool" # 务必与 docker-compose.yml 中的容器内挂载路径一致

====================================

LOG_FILE="/volume1/docker/logs/print_monitor.log"

mkdir -p $(dirname "$LOG_FILE")

log() { echo "$(date '+%Y-%m-%d %H:%M:%S') : $1" >> "$LOG_FILE"; }

log "=== 监控启动 ==="

log "目录: $WATCH_DIR, 打印机: $PRINTER_NAME"

[ ! -d "$WATCH_DIR" ] && log "错误:监控目录不存在!" && exit 1

if ! docker ps | grep -q "$CONTAINER_NAME"; then log "错误:容器 $CONTAINER_NAME 未运行!" && exit 1; fi

cd "$WATCH_DIR" || exit

log "开始监控..."

inotifywait -m -e close_write --format '%f' . | while read -r FILENAME

do

FILE_IN_CONTAINER="${CONTAINER_MOUNT_PATH}/${FILENAME}"

log "发现: $FILENAME -> 提交打印" if docker exec "$CONTAINER_NAME" lp -d "$PRINTER_NAME" "$FILE_IN_CONTAINER"; then

log "成功: $FILENAME 已发送" else log "失败: $FILENAME"

fi

done

那这里需要注意有些地方的参数需要修改下,如果你是跟着我的操作一样,你需要修改的仅仅只有打印机的名字。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

打印机名字就是我框起来这个,注意得一摸一样,如果是.txt中直接编辑,可能会少了_符号,建议使用VS Code编辑。

下面咱们需要给监控脚本赋予执行权限。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

使用ssh登录到我们的NAS,这里我推荐使用FinalShell,这个随便上哪都能搜到。

sudo usermod -aG docker $USER

使用这条命令,将后面的$USER改为当前登录的用户。这条指令是将当前用户添加到docker用户组,避免后续出现权限问题。

chmod +x /volume1/docker/scripts/print_monitor.sh

赋予脚本执行权限

cd /volume1/docker/scripts

./print_monitor.sh

进入脚本文件夹,运行脚本文件。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

如果脚本正常,则会输出,代表正常运行。

如果出现报错,大概率是复制脚本代码时出现格式转化问题。因为是在win下复制的,再linux下可能不识别,咱们需要转换一下代码格式

sed -i 's/r$//' /volume1/docker/scripts/print_monitor.sh

在SSH页面中,执行以下这条指令基本上就能恢复。

./print_monitor.sh运行脚本测试,这时脚本就已经部署完成了。

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

接下来我们验证下,往监控文件夹中放入文件,打印机就能开始工作了。但需要注意cups不具备转换格式的功能,像.docx、.doc这种格式文件可能无法打印,咱们将打印的文件转换为PDF文件即可,这样在外地,只需要将文件上传到指定文件夹就能实现远程打印。(在Docker目录下,有个logs文件夹,在这里能查看到是否打印成功)

【首发】基于绿联NAS老旧打印机变成联网打印机,外网下自动打印

咱们这里来演示下,向监控文件夹放入一份PDF文件,可以看到脚本立马监控到并提交打印任务,打印机已经打印出来了。

那么OK,以上就是本篇文章的全部内容。该流程是基于绿联的DXP4800 Plus设备演示,其它品牌的NAS可能操作有所不同,也有可能缺少组件无法保证都能完美运行(NAS系统多为定制魔改linux底层,每个品牌都不太一样)。

如果你也想get同款,建议可以跟我一样,选择DXP4800 Plus,8505处理器,长时间运行脚本也不会有太大负担,当然也能选择DXP4800 Pro这样性能更强的设备,运行起来更加没有负担。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
2评论

  • 精彩
  • 最新
  • 全网首发,外网下也能让家里的老旧打印机实现打印!

    校验提示文案

    提交
  • 牛逼死了

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

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