上周帮朋友把一台 Epson 墨仓式一体机接到装了 Ubuntu 24.04 的老笔记本上,本以为插上 USB 十分钟就能搞定,结果来回折腾了近两个小时:系统识别到了设备,但打印队列一直显示“正在处理”,纸上一个字没出来。排查到最后发现是驱动包版本选错了——新机型用老一代的 ESC/P-R 驱动,页面描述语言对不上,任务就被无限挂起。这类事在 Linux 桌面环境里太常见了,所以我打算把 Ubuntu(以及大部分 Linux 发行版)安装 Epson 打印机的完整流程、协议选型、参数含义和踩坑记录一次性讲清楚。无论你手里是 USB 直连的家用墨仓机,还是走网线、WiFi 的办公一体机,只要按协议和驱动两条线去判断,基本都能在没有厂商客服的情况下自己搞定。适合刚接触 Linux 的新手,也适合已经会用 CUPS 但总在“选哪个驱动”这一步犯迷糊的老用户。
1. 先搞清楚 Linux 打印这套体系是怎么运作的
很多人第一次在 Linux 下装打印机,会下意识去找一个“Epson 驱动安装包双击运行”的东西,这思路是 Windows 带过来的,在 Linux 上会走很多弯路。所以动手之前,先花几分钟把底层的运作方式理清楚,后面选驱动、排查故障都会快得多。
1.1 CUPS 是整个打印体系的中枢
Linux 桌面下的打印几乎全部由CUPS(Common Unix Printing System)接管。它做三件事:管理打印队列、把文档转换成打印机认识的页面描述语言、通过 USB 或网络把数据送出去。你在系统设置里点“添加打印机”,其实就是在跟 CUPS 的后台服务(cupsd)打交道;浏览器打开http://localhost:631看到的那套网页界面,也是 CUPS 自带的。
理解这一点之后,“装驱动”这个概念就清晰了:所谓驱动,本质上是一个PPD 文件(PostScript Printer Description)加上配套的过滤器程序。PPD 告诉 CUPS 这台机器支持什么纸张、什么分辨率、双面怎么设置;过滤器负责把 PDF 或者文本转成打印机听得懂的指令流。Epson 的喷墨机大多使用ESC/P-R这套页面描述语言,跟 PostScript、PCL 都不是一回事,所以通用 PCL 驱动套上去基本没用,必须用 Epson 自己的过滤器。
提示:如果你在
http://localhost:631能打开界面但点不动按钮,先确认当前用户是否在lpadmin组里,否则 CUPS 会拒绝你的管理操作。
1.2 驱动路线其实只有三条
在 Linux 下接 Epson 打印机,可选的路线就那么三条,判断清楚走哪条,能省掉大量试错时间。
| 路线 | 适用机型 | 优势 | 局限 |
|---|---|---|---|
| 官方 APT 驱动包(ESC/P-R / ESC/P-R2) | 绝大多数 2012 年后的喷墨、墨仓机 | 支持完整,彩色、墨量、无边距都能用 | 包版本更新慢,新机型要等 |
| 无驱动打印(IPP Everywhere / AirPrint) | 近十年的网络机型 | 零安装,系统自带 | 高级功能少,USB 场景不适用 |
| 通用 PostScript / PCL 驱动 | 激光机和少数高端机 | 通用性好 | 喷墨墨仓机基本不可用 |
第一条路是绝大多数人需要走的。第二条路是这两年的省事之选,只要打印机支持 AirPrint,Ubuntu 桌面甚至能自动发现并配好,一行命令都不用敲。第三条路在家用喷墨机上大概率会打出乱码或者干脆不响应,遇到这种情况别怀疑人生,换路线就行。
1.3 型号决定一切,先查再动手
Epson 的墨仓系列命名有规律:L 系列基本是家用墨仓一体机,L3xxx、L4xxx 这些属于比较新的型号,用的是ESC/P-R2驱动;再早一些的 L2xx、L3xx 老款用的是一代ESC/P-R。这两个驱动包在软件源里是两个独立的包名,装错了不会报错,但打印会出问题——要么任务卡死,要么打出一堆 JSON 似的乱字符。
判断方法很土但很有效:去看打印机机身背面或底部的型号标签,或者打印一张网络配置页看具体型号后缀。别只记“Epson L 系列”这种模糊信息,后缀差一位,驱动包可能就差一代。我见过有人把 L4158 的驱动装在 L4263 上,结果能识别、能添加、就是打不出东西。
2. 动手之前该做的准备工作
准备工作这块很多人会跳过,直接上来就apt install,然后在报错里打转。下面这几步花不了五分钟,但能让后面的流程顺得多。
2.1 确认连接方式和设备路径
先明确打印机是怎么接入的。USB 直连最简单,插上之后用lsusb看能不能列出 Epson 的厂商 ID,Epson 的 USB 厂商 ID 是04b8:
lsusb | grep -i epson正常会输出类似Bus 001 Device 005: ID 04b8:xxxx Seiko Epson Corp.的内容。如果什么都没有,先换根线、换个 USB 口试试,尤其是那些只供电不传数据的充电线,是排查里最容易忽略的一环。
走网络的机型,用avahi-browse或者lpinfo -v看看能不能发现设备:
lpinfo -v | grep -i epson输出里带ipp://或者dnssd://前缀的那一行,就是稍后要填进 CUPS 的设备地址。
2.2 补上必需的服务和工具
Ubuntu 桌面版默认装了 CUPS,但有些精简安装或者服务器版会缺东西。一次性把常用的补齐:
sudo apt update sudo apt install cups cups-client cups-filters printer-driver-gutenprint avahi-daemon这里几个包各自有分工。cups-client提供lp、lpadmin、lpstat这些命令行工具,是排查问题的核心武器;cups-filters负责格式转换,缺了它连 PDF 都送不进打印机;avahi-daemon管的是 mDNS 服务发现,网络打印机能被自动找到全靠它;gutenprint是个通用驱动大合集,作为兜底选项留着。
装完把当前用户加进管理组,并启动服务:
sudo usermod -aG lpadmin $USER sudo systemctl enable --now cups加组之后要重新登录一次才生效,这一步经常被忘掉,然后就会出现“明明加了组还是提示无权限”的怪事。
2.3 关掉可能冲突的防火墙规则
Ubuntu 默认的ufw一般不拦本机的631端口,但如果你之前手动配过规则,建议确认一下:
sudo ufw status只要没把631/tcp明确 deny 掉,就不用额外开放。真要用网络共享给局域网其他机器,才需要sudo ufw allow 631/tcp。
2.4 记下几个关键端口号,排查时很有用
网络打印走哪条路,看端口就能判断。IPP 是631,老的 LPD 是515,很多打印机还开着原始 RAW 端口9100。端口不同,走的后端也不一样:
ipp://走 CUPS 原生协议,支持状态回传,推荐优先用。socket://打 RAW,速度快但不带状态回传,队列里的“已发送”不代表真打出来了。lpd://兼容老设备,现在基本不用。
实际排查中,把三种都试一遍来判断问题出在网络还是驱动层,是个很高效的思路。
3. USB 直连机型的完整落地流程
USB 场景是最典型也最容易踩坑的,下面按顺序走一遍。
3.1 先让系统确认能看到设备
前面lsusb已经确认过设备在。再补一步,看内核有没有把打印机识别成 USB 打印类设备:
ls /dev/usb/ dmesg | tail -20在dmesg输出里应该能看到usblp或者usb ... printer字样。如果设备被识别成了存储设备(部分一体机在插卡状态下会这样),先把存储卡拔掉再插 USB 线。
3.2 获取并安装官方驱动包
Epson 官方在 Linux 上提供的是.deb格式的驱动包,需要从官方下载页面按型号下载。这里不贴具体下载链接,因为厂商页面结构会变,直接搜“Epson 型号 + Linux driver”到官方站点找更靠谱。下载下来通常是一串这样的文件:
epson-inkjet-printer-escpr_1.x.x-1lsb3.2_amd64.deb(一代 ESC/P-R)epson-inkjet-printer-escpr2_1.1.x-1_amd64.deb(二代 ESC/P-R2)epson-printer-utility_x.x.x-1lsb3.2_amd64.deb(墨量监控和喷头清洗工具)
安装用dpkg直接装,缺依赖再补:
cd ~/Downloads sudo dpkg -i epson-inkjet-printer-escpr2_*.deb sudo apt install -f第二行apt install -f是关键,它会自动把你机器上缺失的依赖补上。这一步的报错信息要认真看,最常见的缺失依赖是lsb相关包,虽然新系统上已经不太需要,但一些老驱动包的依赖声明里还挂着。
注意:如果下载的是 32 位包(
i386)装到 64 位系统上,dpkg会直接拒绝。看一眼文件名里的amd64还是i386,别下错。
3.3 用 CUPS 网页界面添加打印机
驱动装好之后,浏览器打开http://localhost:631,进 “Administration” → “Add Printer”。会看到系统自动列出的本地设备,USB 打印机一般显示成 “Epson XXX (Epson XXX USB #1)” 这种形式。选中它点继续,下一页会让你确认连接方式,保持默认的usb://地址即可。
真正关键的是下一页的Make/Model选择。Epson 会出现在厂商列表里,点进去之后,型号列表会非常长。这里的原则是:
- 优先选带 “ESC/P-R” 或 “ESC/P-R2” 字样的条目,名称里型号对得越准越好。
- 名字里有 “(recommended)” 标记的就是 CUPS 认为最匹配的那个,一般可以直接用。
- 实在找不到完全一致的型号,选同系列里最近的型号,通常也能工作,但纸张选项可能有偏差。
选完保存,CUPS 会生成一份 PPD 文件放进/etc/cups/ppd/,这时候打印机会出现在打印机列表里。
3.4 命令行方式添加,效率更高
网页界面步骤多,熟练之后我更倾向于用命令行,一条搞定:
lpadmin -p Epson_L4263 -E -v usb://EPSON/L4263%20Series -m "EPSON/EPSON_L4263_Series-epson-escpr2-en.ppd"逐个参数说清楚,因为这几个参数是后面所有排查的基础:
-p后面跟的是你在 CUPS 里给这台机器起的名字,随便起,但不要带空格和中文,后面lp -d打印时要用。-E表示启用这台打印机并接受任务,少了这个参数打印机是禁用状态,任务会一直排队。-v是设备 URI,USB 设备的地址可以用lpinfo -v查,注意 URL 里的空格要转义成%20。-m是 PPD 文件名。用lpinfo -m | grep -i epson可以列出系统里所有可用的 Epson PPD,把返回结果里的完整名字填进去就行。
lpinfo -m这条命令值得单独记一下,它是判断“驱动到底装没装上”的最直接证据。如果输出里一条 Epson 相关的都没有,那说明驱动包没装成功,问题不在 CUPS 层。
3.5 测试打印与状态确认
添加完先设成默认打印机,然后打一张测试页:
lpoptions -d Epson_L4263 lpstat -t lp -d Epson_L4263 /usr/share/cups/data/testprintlpstat -t会输出一堆状态信息,重点看三行:打印机是否enabled、是否accepting requests、队列里有没有卡住的任务。如果测试页能出来,说明驱动链路完全通了。打不出来但队列显示完成了,通常是 PPD 选错;队列一直卡在 “processing”,那多半是过滤器转换失败,回去把-m的 PPD 换成另一个版本的 ESC/P-R 再试。
4. 网络机型与无驱动打印怎么选
网络打印在 Linux 下反而比 USB 更省心,尤其是近几年的机型,很多时候根本不需要装驱动。
4.1 三种网络协议的取舍逻辑
打印机同时开着好几个端口是很常见的,选哪个取决于你要什么:
| 协议 | 地址形式 | 状态回传 | 适用场景 |
|---|---|---|---|
| IPP | ipp://IP/ipp/print | 有 | 首选,支持驱动无关模式 |
| RAW/socket | socket://IP:9100 | 无 | 驱动齐全但 IPP 不通时备用 |
| LPD | lpd://IP/QUEUE | 弱 | 老设备兼容 |
IPP 的优势在于它是双向的,CUPS 能拿到缺纸、卡纸、墨量低这些状态,桌面上会弹通知。RAW 是单向的,发出去就完事,出没出来只能靠人去看。所以能用 IPP 就用 IPP。
4.2 一行命令搞定无驱动打印
近十年的 Epson 网络机型基本都支持 IPP Everywhere,Ubuntu 里自带driverless工具,可以自动生成临时 PPD:
driverless它会输出当前网络里可用的一串ipp://地址。拿到地址后直接:
lpadmin -p Epson_Net -E -v ipp://192.168.1.50/ipp/print -m everywhere-m everywhere是个关键字,告诉 CUPS 去跟打印机实时协商能力,而不是读本地 PPD。这么配出来的打印机基本功能都能用,彩色、双面(如果机器支持)都有。
这种方式最大的好处是系统升级不会失效。用本地 PPD 的打印机,每次大版本升级 CUPS 或者过滤器有变动,多少都可能出点小问题;everywhere模式把能力协商交给打印机本身,稳定性明显更好。
注意:无驱动模式对彩色墨仓机来说,高级选项会少一些,比如无边距打印、特定纸张类型的精细调节可能没有。如果你需要这些,还是老老实实装官方驱动包。
4.3 给网络打印机固定 IP,这是长期稳定的前提
动态 IP 的打印机用着用着突然连不上,是很多人遇到过的怪事。根因就是 DHCP 租约到期后 IP 变了,CUPS 里配的地址自然就失效了。两种解法:
- 在路由器里给打印机的 MAC 地址绑定静态 IP,一劳永逸。
- 打印机自带网络设置页面,直接配静态 IP,但要注意别跟路由器 DHCP 池冲突。
我个人推荐在路由器上绑,改起来方便,打印机本身不用动。配好之后顺手把 CUPS 里的设备 URI 更新一下:
lpadmin -p Epson_Net -v ipp://192.168.1.50/ipp/print只改地址不用重建打印机,队列名和设置都保留。
4.4 扫描功能的处理思路
一体机的扫描功能在 Linux 上走的是SANE这套体系,跟 CUPS 是两码事,需要单独配。先装基础组件:
sudo apt install sane-utils libsane-common然后列出设备:
scanimage -L输出里有epson2:libusb:xxx或者escl:http://IP这类地址就成了,说明 SANE 认到了设备。Epson 官方还有一个epsonscan2包,功能比通用后端全,支持无线扫描和更多参数,新机型建议装这个。老机型用epson2后端就够了,这个后端在sane-utils里自带。
扫描这块最常见的坑是权限:普通用户访问 USB 扫描仪时报 “Access denied”。解决办法是把用户加进scanner组:
sudo usermod -aG scanner $USER同样是重新登录后生效。
4.5 WiFi 直连机型的额外注意点
有些 L 系列机型支持 WiFi,但只支持 2.4GHz 频段,不认 5GHz。如果你在路由器上把两个频段合成了一个 SSID,配网时会失败。这种时候临时拆出一个 2.4GHz 的独立 SSID 配好再合回去,或者直接用 USB 线跑一次初始化配置。
另外,配好 WiFi 之后用avahi-browse -art | grep -i epson能扫到设备,比lpinfo -v更灵敏,适合排查“局域网里明明有但就是发现不了”的情况。
5. 常见故障的排查顺序和实录
故障排查这件事,最怕的是东试一下西试一下。下面按“从下往上”的顺序整理,也就是先确认物理层和网络层,再往驱动层走,效率最高。
5.1 任务卡在“正在处理”不动
这是出现频率最高的症状,原因至少有四种:
- PPD 版本不对。新机型配了老驱动,或者反过来。验证方法:
lpinfo -m | grep -i epson看装的是哪个包,然后在 CUPS 网页界面里换一个 PPD 试。 - 过滤器缺失。CUPS 找不到转换程序,
/var/log/cups/error_log里会有Filter failed字样。装cups-filters补齐。 - USB 权限问题。日志里会出现
Permission denied。检查/dev/bus/usb/下设备的所属组,必要时加 udev 规则。 - 打印机自身处于错误状态。缺纸、盖子没关、墨盒报错,这些状态 CUPS 有时拿不到,需要去看打印机面板。
排查时最有用的一条命令是实时看日志:
sudo tail -f /var/log/cups/error_log然后另开一个终端发打印任务,日志里会一行行显示处理过程,卡在哪一步一目了然。这比猜要快十倍。
5.2 打出乱码或者只打半页
乱码基本可以断定是页面描述语言对不上。喷墨机收到的不是 ESC/P-R 指令流,就会把数据当成普通字符直接输出,于是纸上出现一堆乱七八糟的东西。换 PPD 是唯一的解法。
只打半页或者打到一半停住的情况,通常是缓冲区或者纸张尺寸设置不一致。检查两处:CUPS 里的纸张尺寸是不是 A4(默认有时是 Letter),打印机面板里设置的纸张尺寸是否一致。两边不一致时,某些机型会在渲染阶段就截断数据。
5.3 打印机状态一直是“已暂停”
lpstat -t输出里如果看到printer Epson_L4263 disabled,说明打印机被暂停了。原因多半是之前有个任务失败,CUPS 自动把它禁用保护队列。恢复:
cupsenable Epson_L4263 cupsaccept Epson_L4263第一条是启用打印机,第二条是让它重新接受新任务。这两个命令要一起用,只做第一条的话,打印机会启用但拒绝新任务,看起来还是没反应。
5.4 中文文档打印成方块或乱码
这个跟驱动没关系,是字体问题。CUPS 把文档转成 PDF 再渲染时,如果系统缺对应字体,中文会变成一个个方块。装一下常用字体:
sudo apt install fonts-noto-cjk fonts-wqy-zenhei装完重启 CUPS 服务:
sudo systemctl restart cups另外注意一点:从文本编辑器直接lp一个纯文本文件时,编码必须是 UTF-8。GBK 编码的文件在转换环节就会乱掉,可以用iconv先转:
iconv -f GBK -t UTF-8 old.txt > new.txt5.5 常见问题速查表
| 症状 | 最可能的原因 | 处理动作 |
|---|---|---|
lpinfo -v看不到设备 | 连接或服务发现异常 | 检查线缆、重启 avahi-daemon |
| 添加时报 “client-error-not-possible” | 用户不在 lpadmin 组 | 加组后重新登录 |
| 任务瞬间消失,没有任何输出 | URI 写错或端口不通 | 用nc -zv IP 631测端口 |
| 打印速度和预览不符 | 分辨率设置过高 | 把 PPD 里的质量档位调到普通 |
| 扫描仪列表为空 | SANE 后端缺失 | 装libsane-common,检查 scanner 组 |
| 重启后打印机消失 | 动态 IP 变化 | 给打印机绑静态 IP |
这张表里每一条都是实际遇到过的组合,照着查能覆盖大部分场景。
5.6 日志才是最终裁判
所有排查最后都要落到日志上。CUPS 有两处日志值得看,一处是/var/log/cups/error_log,看服务端处理;一处是/var/log/syslog,看内核层的 USB 和网络事件。把日志级别临时调高,能看到更细的内容:
sudo cupsctl --debug-logging调完之后记得改回来,日志级别太高会迅速吃掉磁盘空间:
sudo cupsctl --no-debug-logging另外日志文件本身会被轮转,如果追查的是一个老问题,记得用zcat /var/log/cups/error_log.1.gz去看历史记录。
6. 几个实实在在的经验教训
前面讲的是流程,这里讲的是流程之外那些只有踩过才知道的事。
6.1 驱动包的选择比安装过程更关键
我做过一个统计,帮别人处理 Epson 打印机问题里,真正因为“装不上”而失败的不到三成,七成以上是装错了包。ESC/P-R 和 ESC/P-R2 这两代驱动,从外面看几乎一样,装哪个都能让打印机出现在列表里,但只有对的那个能真打出东西。我的习惯是:拿到型号先去官方下载页,看那个型号对应的驱动包文件名里是escpr还是escpr2,确认之后再去装。多花两分钟,省两个小时。
还有一个细节:官方驱动包分 32 位和 64 位,也分不同发行版适配的版本。Ubuntu 系的机器选amd64那个,别选成i386,也别选成给其他发行版打包的rpm。
6.2 系统大版本升级前先备份 PPD
Ubuntu 每半年一个版本,两年一个 LTS,升级这件事躲不开。升级过程中 CUPS 有可能重建配置,虽然大多数时候不会出问题,但我遇到过升级之后打印机配置还在、驱动包被卸载的情况,因为新版本的依赖关系变了,旧的第三方包被标记为可移除。
备份很简单,把整个目录打包:
sudo tar czf cups-backup.tar.gz /etc/cups万一出问题,解包恢复再重启服务,几秒钟的事。这个小习惯帮我省过至少两次重配的时间。驱动包的.deb文件也建议留一份在本地,别到时候找不到下载页。
6.3 多台机器共用一台打印机的正确姿势
家里或者小办公室几台电脑共用一台打印机,有两种做法。一种是每台机器各自连打印机,前提是打印机能同时接受多路连接,现在的网络机型基本都行。另一种是拿一台常年开机的 Linux 机器做打印服务器,其他机器连它。
后一种更稳,做法也简单,在那台机器上开启共享:
sudo cupsctl --share-printers sudo ufw allow 631/tcp其他机器添加打印机时,把设备地址填成ipp://服务器IP:631/printers/队列名就行。这种架构下驱动只需要装在服务器上,客户端什么都不用装,连 Windows 机器也能直接用,省事得多。
唯一要注意的是队列名别起得太随意,Epson_L4263这种就挺好,纯中文队列名在某些客户端上会出编码问题。