CUPS共享EPSON L383打印机

CUPS共享EPSON L383打印机
狂犬主子由于最近有打印文件的需求,打印机和电脑的布局不合理,导致出现位置争抢的情况,索性折腾起共享打印机的方案。
本文使用的打印机为 EPSON L383 喷墨打印机,虽然带扫描功能,但是不好用,不如手机当高拍仪扫描打印。其实一开始采购打印机的时候就考虑过要不要带网络,但认为使用共享的方式能解决问题,后面发现还是太天真了,这个远程打印折腾起来巨麻烦,尤其是这种冷门型号的打印机。之前由于小时候技术不佳,Linux玩不明白,只会使用 Windows 共享,导致专门弄了台 D425 装 XP 负责远程打印,效果也不好。现在又开始重操旧业,总算是给它折腾明白了。
环境
本次部署由于打印机附近存在 7x24h 工作的PVE AIO服务器,因此基于 Linux VM实现。后期如果不使用服务器,会考虑 IPTV 盒子刷 Armbian——因为打印机驱动支持 ARM64 版 Linux 驱动。
- PVE 通过 USB 延长线连接到打印机。
- USB 接口直通到 Linux VM。
- 客户端通过 Wi-Fi / VPN 接入到内网。
系统安装
这里系统直接使用 Ubuntu Cloud Images,我懒得安装 Ubuntu Server ISO。
PVE 新建创建 Ubuntu 虚拟机
登录到 PVE 的控制台,打开Shell,复制粘贴内容:
下载Daily构建的虚拟硬盘文件:
1 | # wget https://cloud-images.ubuntu.com/minimal/daily/noble/current/noble-minimal-cloudimg-amd64.img wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/minimal/daily/noble/current/noble-minimal-cloudimg-amd64.img |
创建虚拟机(2H2G,实际使用分512M就够了):
1 | # 此处改为你的存储位置,可用 pvesm status 查看 STORAGE_ID=local IMG_PATH=$PWD/noble-minimal-cloudimg-amd64.img # 定义VMID虚拟机ID,不得重复 VM_ID=500 ROOT_PASS=Cups@123! IPCFG=ip=10.0.5.5/24,gw=10.0.0.1 # 一行命令创建虚拟机 qm create $VM_ID --name CUPS --cpu x86-64-v2-AES --cores 2 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single --serial0 socket --vga serial0 --ostype l26 --ide2 $STORAGE_ID:cloudinit --scsi0 $STORAGE_ID:0,discard=on,format=qcow2,import-from=$IMG_PATH,iothread=1,ssd=1 --boot order=scsi0 --ciupgrade 0 --ciuser root --cipassword $(openssl passwd -6 "$ROOT_PASS") --ipconfig0 ip=$IPCFG # 扩容得单独来一下 qm disk resize $VM_ID scsi0 16G |
系统就装好了。
直通USB
在网页中设置,手册建议先安装驱动,再配置直通。这里我选择绑定USB插口。

登录虚拟机
开启虚拟机,然后立马打开 xterm,通过刚才设置的密码登录虚拟机。

卸载自带软件
由于是通过 PVE 控制台直接操作 Linux 容器,因此不需要内置的 SSH,留着反倒会造成安全隐患,因此删除。另外这个 Ubuntu Minimal 居然带 snap!!!
1 | sudo apt auto-remove ssh openssh* snapd |
更换软件源
默认的 Ubuntu 软件源下载贼慢,这里更换为国内源。
1 | sudo sed -i 's/\(archive\|security\)\.ubuntu\.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo sed -i 's/\(archive\|security\)\.ubuntu\.com/mirrors.aliyun.com/g' /etc/apt/sources.list.d/* |
执行系统更新
1 | sudo apt update sudo apt dist-upgrade |
安装组件
安装 CUPS
1 | sudo apt install vim cups cups-bsd libcupsimage2t64 # sudo apt install cups cup* libcups* printer* |
- vim:由于
自带的 vi 和 nano(Minimal一个都不带)个人用不习惯,这里安装了 vim,后续会使用 vim 编辑配置。 - libcupsimage2t64:原本为 libcupsfilters1 依赖,但 Ubuntu 24.04 LTS+ 没这个包,不装这个会造成打印报错在 GhostScript 渲染的过滤阶段。Debian 倒是一直都有这个,所以尽可能用 Debian。
安装打印机驱动程序
如果是较老的打印机,应该有通用驱动, sudo apt install printer* 全部装完。
我这边是爱普生打印机,没有通用的,就到 https://download-center.epson.com/ 下载打印机驱动程序,选择Linux版本。选择“Epson Inkjet Printer Driver (ESC/P) for Linux”,然后复制下载链接,我这里已经复制出来了,不知道能存活多久。
1 | wget https://download-center.epson.com.cn/f/module/81976474-cb4d-4b75-a0d8-ebc9ebde70d0/epson-inkjet-printer-201601w_1.0.1-1_amd64.deb sudo dpkg -i epson-inkjet-printer-201601w_1.0.1-1_amd64.deb |
另外手册也下载阅读一下,那里面写着最佳环境是 Ubuntu 24.04 LTS 和 Fedora 42,所以我选择了前者。其实一开始是用 Linux Mint 测试了下的,没问题才选的,结果换成 Ubuntu 24.04 LTS 少装一个依赖。
配置服务
配置 CUPS
这里不编辑配置文件了,直接通过 cupsctl 配置外部访问,和那个桌面环境上的 system-config-printer 一样。现在 CUPS 这么好用得感谢这个 OpenPrinting 项目。
1 | ~# cupsctl --help Usage: cupsctl [options] [param=value ... paramN=valueN] Options: -E Encrypt the connection to the server -h server[:port] Connect to the named server and port -U username Specify username to use for authentication --[no-]debug-logging Turn debug logging on/off --[no-]remote-admin Turn remote administration on/off --[no-]remote-any Allow/prevent access from the Internet --[no-]share-printers Turn printer sharing on/off --[no-]user-cancel-any Allow/prevent users to cancel any job |
执行以下命令,如果:
1 | sudo cupsctl --remote-admin sudo systemctl restart cups # 此时访问会变成已禁止 sudo cupsctl --remote-any sudo systemctl restart cups |
使用浏览器访问 https://10.0.5.5:631/admin (这里改成实际的IP)直接进入管理页面,用户名密码同 Linux。
点击 Printers -> Add Printer,进入如下步骤:

-
选择 Local Printers 下面的你的型号打印机,点击 Continue。

-
设置一下打印机的名字(Name),建议不要包含特殊符号(包括空格),不然后面通过 LPD 连需要你手动输入的时候人就麻了,然后勾选:Share This Printer,点击 Continue。

-
选择对应打印机型号的型号(Model),点击 Add Printer。

-
点击 Set Printer Options。

-
一项一项点进去,调整默认配置,比如双面打印啥的(可惜没有)。

调整完后,我们将 A4 纸张放入打印机,点击页面导航栏的最后一个 Printers,点击进入刚才添加的打印机,找到第一个叫做 Maintenance 的下拉菜单,选择 Print Test Page。


测试页能够正常打印。
配置 SAMBA
由于SAMBA实测不好用,而且还一堆漏洞,实际上后面又给 SAMBA 删了。
需要服务端安装 SAMBA,参考官方教程配置:
https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Print_Server
1 | sudo apt install samba samba samba-common-bin sudo systemctl enable --now smbd sudo systemctl enable --now nmbd |
然后编辑:
1 | sudo vim /etc/samba/smb.conf |
找到 [global],在后面插入:
1 | rpcd_spoolss:idle_seconds=300 |
找到 [printers],将:
1 | browseable = no guest ok = no |
改成:
1 | browseable = yes guest ok = yes |
保存,然后:
1 | sudo systemctl restart smbd nmbd |
如果要让客户端(Windows)支持自动安装驱动,参考:鸟哥的 Linux 私房菜 – SAMBA 服务器 配置驱动共享,否则需要提前安装好驱动。
配置 LPD
LPD是一个古董协议,没招了只能用这个。
正常情况下,直接执行下面的命令就行:
1 | sudo systemctl enable --now cups-lpd.socket |
但实际上不好使,Ubuntu报错“Unit file cups-lpd.socket does not exist.”,估计是因为LPD不用鉴权就可以打印,存在安全风险就被Canonical 删了,只能手动创建。
-
创建 Socket 文件。
我们需要告诉 systemd 监听哪个端口(LPD 默认为 515)。
1
sudo vim /etc/systemd/system/cups-lpd.socket输入:
1
2
3
4
5
6
7
8
9[Unit] Description=CUPS LPD Server Socket [Socket] ListenStream=515 Accept=yes [Install] WantedBy=sockets.target
-
创建 Service 文件
1
sudo vim /etc/systemd/system/cups-lpd@.service输入:
1
2
3
4
5
6
7
8
9
10
11
12[Unit] Description=CUPS LPD Server Service After=network.target [Service] ExecStart=-/usr/lib/cups/daemon/cups-lpd -n -o job-sheets=none,none StandardInput=socket User=lp Group=lp [Install] WantedBy=multi-user.target
-n:表示不进行反向域名解析(加快速度)。lp:打印机的标准用户组。 -
激活服务
1
2sudo systemctl daemon-reload sudo systemctl enable --now cups-lpd.socket
检查端口是否已开启:
1 | ss -ant | grep :515 |
Windows 客户端配置
IPP 协议
Windows 正常应该可以在设置里面搜索到打印机。不用安装驱动!!!不用安装驱动!!!不用安装驱动!!!

如果搜不到的话,请勾选Share printers connected to this system,然后重启一下虚拟机。

但基本没啥功能,双面打印啥的基本都没。正常使用还得是带驱动。

SMB 协议
这里我懒得配置驱动共享了,就手动运行打印机驱动安装程序安装。
安装好驱动以后,在资源管理器的地址栏里面输入:\\10.0.5.5\打印机,对,中文的“打印机”,才可以看到共享的打印机,只输地址我这边只能看到共享文件夹。

但经过测试,这种方式存在不稳定的现象,打印反应非常慢,估计是驱动的缺陷。总之就是没法用。

而且 Windows 11 22H2 给 RPC 的默认设置改了,直接还连不上,得改注册表:
1 | reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\RPC" /f /v "RpcUseNamedPipeProtocol" /t REG_DWORD /d "1" reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print" /f /v "RpcAuthnLevelPrivacyEnabled" /t REG_DWORD /d "0" |
据说还不一定有用,最后回到古董协议LPD。
LPD 协议
-
这种情况也需要提前安装好驱动。
-
Windows 10 以上需要启用 LPR 支持,以管理员权限打开 CMD 输入:
1
DISM.exe /Online /Enable-Feature /FeatureName:Printing-Foundation-LPRPortMonitor或者 PowerShell:
1
Enable-WindowsOptionalFeature -Online -FeatureName "Printing-Foundation-LPRPortMonitor"或者打开
控制面板\所有控制面板项\程序和功能,勾选 打印和文件服务 下方的 LPR 端口监视器:
为什么先给命令?阿三Windows 11天天改,找半天都找不到这个控制面板的入口。“设备和打印机”都砍了,但又没砍全,自带的设置贼难用。
-
进入刚刚说的那个“设备和打印机”,点击菜单栏的“添加打印机”,会弹出一个添加设备的窗口,这个里面即使出来你的打印机型号也不要用,肯定不是 LPD,这里应该点击“我所需的打印机未列出”。

-
然后选择“通过手动设置添加本地打印机或网络打印机(O)”,不要选择 IP,那个里面没得 LPD,点击下一页。

-
这里选择创建新端口,端口类型为
LPR Port。什么,没有?请检查上面的 LPR 功能有没有启用成功。
-
点击下一页会弹出一个窗口(史山代码),填写服务器信息,注意打印队列名称填写CUPS里面设置的共享名,不是打印机描述名称,然后点击确定。

-
这里务必要选择正确的驱动,不然无法打印,然后下一页。

-
这里建议改下名,避免和本地打印机冲突/不好区分,然后点击下一页后,会自动注册打印机,需要一小会儿。

-
这里可以打印测试页,然后完成。

此时就基本可以了。如果你遇到了问题,建议关闭双向支持:


macOS客户端配置
首先打开「打印中心.app」。


IPP协议
IPP协议能自动搜索出来,也可以手动添加,不需要安装驱动。

LPD协议

安卓客户端配置
需要安卓版本大于Android 8.0 (Oreo) ,不然只能安装第三方打印客户端。
IPP 协议
安卓这边就简单得多,下面以 ColorOS 为例,实测支持 OriginOS、MagicOS,但不支持鸿蒙。因为鸿蒙的安卓版本较老,且系统APP打印服务为自行实现的华为打印,只支持华为打印机。

SMB 协议/LPD 协议
需要下载安卓移动打印客户端,一般为付费,如PrintHand、PrinterShare、MobilePrint、ePrint - Mobile Printer & Scan 、 PrintShare Pro 、NokoPrint 等。
由于目前 IPP 能用,暂时没有折腾其他协议的需求,下面的地址来自于第三方,个人没试过,请自行判断是否带毒。
下载安装以后,打开APP,点击添加打印机,可能需要联网下载打印机驱动包,不然会缺少PPD文件无法识别型号。
远程打印
直接用VPN搞定,免得给那些微信小程序交钱。
- EasyTier
- Tailscale/Headscale(自建)
- Zerotier
总结
本次部署遇到了很多个坑,其中大多都来自于 Ubuntu。反倒是当时在 Linux Mint 上测试,一点问题都没有。另外我是实在想不明白了,都 Minimal 镜像了,怎么还带一个 snap,真的服了 Canonical。。。
现在手机连上 Wi-Fi 自动搜索打印机,CUPS 真的太方便了。不得不说安卓更新了打印框架以后,越来越多厂商跟进,挺好的,这才是真的互联。




