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
2
# 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
2
3
4
5
6
7
8
9
10
11
12
13
# 此处改为你的存储位置,可用 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
2
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
2
sudo apt update
sudo apt dist-upgrade

安装组件

安装 CUPS

1
2
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
2
3
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
2
3
4
5
6
7
8
9
10
11
~# 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
2
3
4
5
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,进入如下步骤:

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

    image-20260226161124023

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

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

  4. 点击 Set Printer Options。

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

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

测试页能够正常打印。

配置 SAMBA

由于SAMBA实测不好用,而且还一堆漏洞,实际上后面又给 SAMBA 删了。

需要服务端安装 SAMBA,参考官方教程配置:

https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Print_Server

1
2
3
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
2
browseable = no
guest ok = no

改成:

1
2
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 删了,只能手动创建。

  1. 创建 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
  2. 创建 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 :打印机的标准用户组。

  3. 激活服务

    1
    2
    sudo 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
2
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 协议

  1. 这种情况也需要提前安装好驱动。

  2. 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天天改,找半天都找不到这个控制面板的入口。“设备和打印机”都砍了,但又没砍全,自带的设置贼难用。

  3. 进入刚刚说的那个“设备和打印机”,点击菜单栏的“添加打印机”,会弹出一个添加设备的窗口,这个里面即使出来你的打印机型号也不要用,肯定不是 LPD,这里应该点击“我所需的打印机未列出”。

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

  5. 这里选择创建新端口,端口类型为 LPR Port。什么,没有?请检查上面的 LPR 功能有没有启用成功。

  6. 点击下一页会弹出一个窗口(史山代码),填写服务器信息,注意打印队列名称填写CUPS里面设置的共享名,不是打印机描述名称,然后点击确定。

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

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

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

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

macOS客户端配置

首先打开「打印中心.app」。

IPP协议

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

LPD协议

安卓客户端配置

需要安卓版本大于Android 8.0 (Oreo) ,不然只能安装第三方打印客户端。

IPP 协议

安卓这边就简单得多,下面以 ColorOS 为例,实测支持 OriginOS、MagicOS,但不支持鸿蒙。因为鸿蒙的安卓版本较老,且系统APP打印服务为自行实现的华为打印,只支持华为打印机。

image-20260226141412774

SMB 协议/LPD 协议

需要下载安卓移动打印客户端,一般为付费,如PrintHand、PrinterShare、MobilePrint、ePrint - Mobile Printer & Scan 、 PrintShare Pro 、NokoPrint 等。

由于目前 IPP 能用,暂时没有折腾其他协议的需求,下面的地址来自于第三方,个人没试过,请自行判断是否带毒。

下载地址:https://apphot.cc/3738.html

下载安装以后,打开APP,点击添加打印机,可能需要联网下载打印机驱动包,不然会缺少PPD文件无法识别型号。

远程打印

直接用VPN搞定,免得给那些微信小程序交钱。

  1. EasyTier
  2. Tailscale/Headscale(自建)
  3. Zerotier

总结

本次部署遇到了很多个坑,其中大多都来自于 Ubuntu。反倒是当时在 Linux Mint 上测试,一点问题都没有。另外我是实在想不明白了,都 Minimal 镜像了,怎么还带一个 snap,真的服了 Canonical。。。

现在手机连上 Wi-Fi 自动搜索打印机,CUPS 真的太方便了。不得不说安卓更新了打印框架以后,越来越多厂商跟进,挺好的,这才是真的互联。