惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园 - 司徒正美
Security Archives - TechRepublic
Security Archives - TechRepublic
P
Palo Alto Networks Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cyberwarzone
Cyberwarzone
小众软件
小众软件
T
Threatpost
Latest news
Latest news
J
Java Code Geeks
博客园 - Franky
博客园 - 三生石上(FineUI控件)
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
T
Tenable Blog
L
Lohrmann on Cybersecurity
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Privacy International News Feed
人人都是产品经理
人人都是产品经理
S
Schneier on Security
T
The Blog of Author Tim Ferriss
V
V2EX
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
罗磊的独立博客
IT之家
IT之家
雷峰网
雷峰网
H
Help Net Security
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
I
InfoQ
GbyAI
GbyAI
博客园 - 叶小钗
PCI Perspectives
PCI Perspectives
The GitHub Blog
The GitHub Blog
Martin Fowler
Martin Fowler
H
Heimdal Security Blog
Spread Privacy
Spread Privacy
博客园_首页
A
About on SuperTechFans
T
Tailwind CSS Blog
The Register - Security
The Register - Security

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
HP LaserJet M14-M17 在Debian下无法打印
145a · 2026-04-25 · via 博客园_首页

我需要在 Debian (KDE) 环境下通过 USB 连接 HP LaserJet M14-M17 打印机打印几张试卷。打印机插入后能够被系统识别并出现在设备列表中,但实际发送打印任务时,状态显示"打印完成",打印机却毫无反应,仅指示灯象征性地闪烁了两下。值得注意的是,打印选项中没有双面打印。

第一反应是检查 HPLIP 。系统的 HPLIP 版本是 3.22.10 。随后执行 sudo hp-setup -i ,系统正确检测到了打印机并匹配了对应的 PPD 文件(hp-laserjet_m14-m17.ppd)。但在打印测试页时,终端输出以下错误:

error: Channel write error
error: Device is busy or in an error state.

打印机依然没有反应。HPLIP 虽然识别了设备型号,但实际的数据通信失败了。这就很奇怪了。

查询发现, HP LaserJet M14-M17 是一款支持 IPP Everywhere 的打印机,通过 USB 连接时使用的是 IPP over USB 协议,而非传统的 USB 批量传输。在 Debian 中,负责处理该协议的是 ipp-usb 守护进程。

我尝试检查 ipp-usb 的状态。

systemctl status ipp-usb
○ ipp-usb.service - Daemon for IPP over USB printer support
     Loaded: loaded (/usr/lib/systemd/system/ipp-usb.service; static)
     Active: inactive (dead)
       Docs: man:ipp-usb(8)
Apr 25 18:40:15 localhost systemd[1]: Started ipp-usb.service - Daemon for IPP over USB printer support.
Apr 25 18:41:04 localhost systemd[1]: ipp-usb.service: Deactivated successfully.

服务处于 inactive (dead) 状态,且日志中显示它曾被多次启动但均在短时间内退出。也许是 ipp-usb 本身的问题?

systemctl status ipp-usb.socket
Unit ipp-usb.socket could not be found.

socket 单元不存在。ipp-usb 并非通过 socket 激活。

原来,服务反复退出的真正原因是打印机未开机——ipp-usb 在 udev 模式下运行时,如果没有检测到 IPP over USB 设备,就会自动退出。

打开打印机后,先用 lsusb 确认设备已被系统识别:

lsusb | grep -i hp
Bus 001 Device 006: ID 03f0:be2a HP, Inc HP LaserJet M14-M17
systemctl status ipp-usb
● ipp-usb.service - Daemon for IPP over USB printer support
     Loaded: loaded (/usr/lib/systemd/system/ipp-usb.service; static)
     Active: active (running) since Sat 2026-04-25 19:03:40 CST; 2min 2s ago
   Main PID: 3904 (ipp-usb)
      Tasks: 12 (limit: 4306)
     Memory: 14.2M (peak: 15M)
        CPU: 98ms
     CGroup: /system.slice/ipp-usb.service
             └─3904 /usr/sbin/ipp-usb udev
Apr 25 19:03:40 localhost systemd[1]: Started ipp-usb.service - Daemon for IPP over USB printer support.

ipp-usb 成功保持运行,且命令行参数为 udev,印证了它以 udev 模式工作。查看journal,其中却只记录了 systemd 的启停信息,看不到 ipp-usb 自身的日志。通过 ipp-usb -h 查看帮助信息,发现它支持 debug 模式。

Usage:
    ipp-usb mode [options]
Modes are:
    standalone  - run forever, automatically discover IPP-over-USB
                  devices and serve them all
    udev        - like standalone, but exit when last IPP-over-USB
                  device is disconnected
    debug       - logs duplicated on console, -bg option is
                  ignored
    check       - check configuration and exit
    status      - print ipp-usb status and exit
systemctl stop ipp-usb
ipp-usb debug
  ===============================
  ipp-usb started in "debug" mode, pid=4190
  ctrlsock: listening at "/var/ipp-usb/ctrl"
+ PNP Bus 001 Device 006: added
  ===============================
+ Found new device. VID:PID = 03f0:be2a
  HWID quirks: EMPTY
  Loading quirks for model: "HP LaserJet M14-M17"
  Device quirks:
    [*]
      ; (/usr/share/ipp-usb/quirks/default.conf:5)
      http-connection = ""
+ Bus 001 Device 006: opened HP LaserJet M14-M17
  Device info:
    USB Port:      2
    Ident:         03f0-be2a-VN50B02739-HP-LaserJet-M14-M17
    Manufacturer:  HP
    Product:       HP LaserJet M14-M17
    SerialNumber:  VN50B02739
    BasicCaps:     print,http
  USB stack parameters
    authorized_default:          1
    autosuspend:                 2
    blinkenlights:               N
    initial_descriptor_timeout:  5000
    nousb:                       N
    old_scheme_first:            N
    quirks:
    usbfs_memory_mb:             16
    usbfs_snoop:                 N
    usbfs_snoop_max:             65536
    use_both_schemes:            Y
  USB interfaces:
    Config Interface Alt Class SubClass Proto
       1       0      0   7      1       2
       1       1      0   255    4       1
*      1       1      1   7      1       4
       1       2      0   255    4       1
*      1       2      1   7      1       4
       1       3      0   255    4       1
*      1       3      1   7      1       4
  USB[0]: open: Bus 001 Device 006 Interface 1 Alt 1
  USB[1]: open: Bus 001 Device 006 Interface 2 Alt 1
  USB[2]: open: Bus 001 Device 006 Interface 3 Alt 1
> HTTP[000]: POST ipp://localhost:60000/ipp/print
> HTTP[000]: request body: got 461 bytes; closed
> HTTP[000]: body is small (461 bytes), prefetched before sending
  USB[0]: connection allocated, 1 in use: a-- --- ---
  HTTP[000]: connection 0 allocated
  USB[0]: zero-size read
  ...(此处省略大量 zero-size read)
< HTTP[000]: POST ipp://localhost:60000/ipp/print - 200 OK
  USB[0]: zero-size read
  ...(此处省略大量 zero-size read)
< HTTP[000]: response body: got 1566 bytes; EOF
  USB[0]: connection released, 0 in use: --- --- ---
< HTTP[000]: done with response body
  IPP FaxOut service not in capabilities
> HTTP[001]: GET http://localhost:60000/eSCL/ScannerCapabilities
> HTTP[001]: body is empty, sending as is
  USB[1]: connection allocated, 1 in use: --- a-- ---
  HTTP[001]: connection 1 allocated
  USB[1]: zero-size read
  ...(此处省略大量 zero-size read)
< HTTP[001]: GET http://localhost:60000/eSCL/ScannerCapabilities - 404 Not Found
< HTTP[001]: client has gone; draining response from USB
! ESCL: eSCL: HTTP status: 404 Not Found
> HP LaserJet M16a (435CA7): _printer._tcp TXT record:
    usb_SER=VN50B02739
    usb_HWID=03f0&be2a
> HP LaserJet M16a (435CA7): _ipp._tcp TXT record:
    air=none
    mopria-certified=1.3
    rp=ipp/print
    priority=50
    kind=document,envelope,photo
    PaperMax=legal-A4
    UUID=564e3530-4230-3237-3339-c46516435ca7
    Color=F
    Duplex=F
    note=
    qtotal=1
    usb_MDL=HP LaserJet M14-M17
    usb_MFG=HP
    usb_CMD=PJL,PML,PWG_RASTER,URP
    ty=HP LaserJet M14-M17
    product=(HP LaserJet M14-M17)
    pdl=application/PCLm,application/octet-stream,image/pwg-raster
    txtvers=1
    adminurl=http://localhost:60000
    Fax=F
    Scan=F
    usb_SER=VN50B02739
    usb_HWID=03f0&be2a
> HP LaserJet M16a (435CA7): _http._tcp TXT record:
> HP LaserJet M16a (435CA7): _ipp-usb._tcp TXT record:
  DNS-SD: HP LaserJet M16a (435CA7) (USB): trying
  USB[1]: connection released, 0 in use: --- --- ---
< HTTP[001]: done with response body
  DNS-SD: FQDN: "linux.local"
  DNS-SD: FQDN: "linux.local"->"localhost"
  DNS-SD: +subtype: "_universal._sub._ipp._tcp"
+ DNS-SD: HP LaserJet M16a (435CA7) (USB): publishing requested
  DNS-SD: HP LaserJet M16a (435CA7) (USB): AVAHI_ENTRY_GROUP_REGISTERING
  DNS-SD: HP LaserJet M16a (435CA7) (USB): AVAHI_ENTRY_GROUP_ESTABLISHED
  DNS-SD: HP LaserJet M16a (435CA7) (USB): published
  auth: operation requested: print (HTTP POST /ipp/print)
  auth: address check:
    client-addr ::1 local=true
    server-addr ::1 local=true
  auth: client UID=-1 (auth rules don't use UID)
  auth: UID -1 resolved:
    user names:  *
    group names: *
  auth: allowed operations: config,fax,print,scan
  auth: access granted
> HTTP[002]: POST http://localhost:60000/ipp/print
> HTTP[002]: request body: got 173 bytes; EOF
> HTTP[002]: body is small (173 bytes), prefetched before sending
  USB[2]: connection allocated, 1 in use: --- --- a--
  HTTP[002]: connection 2 allocated
  USB[2]: zero-size read
  ...(此处省略大量 zero-size read)
< HTTP[002]: POST http://localhost:60000/ipp/print - 200 OK
  USB[2]: zero-size read
  ...(此处省略大量 zero-size read)
< HTTP[002]: response body: got 45675 bytes; EOF
  USB[2]: connection released, 0 in use: --- --- ---
< HTTP[002]: done with response body
  auth: operation requested: config (HTTP GET /ipp/strings/en-us)
  auth: address check:
    client-addr ::1 local=true
    server-addr ::1 local=true
  auth: client UID=-1 (auth rules don't use UID)
  auth: UID -1 resolved:
    user names:  *
    group names: *
  auth: allowed operations: config,fax,print,scan
  auth: access granted
> HTTP[003]: GET http://localhost:60000/ipp/strings/en-us
> HTTP[003]: body is empty, sending as is
  USB[0]: connection allocated, 1 in use: a-- --- ---
  HTTP[003]: connection 0 allocated
> HTTP[003]: request body: got 0 bytes; EOF
  USB[0]: zero-size read
  ...(此处省略大量 zero-size read)
< HTTP[003]: GET http://localhost:60000/ipp/strings/en-us - 200 OK
< HTTP[003]: response body: got 197 bytes; EOF
  USB[0]: connection released, 0 in use: --- --- ---
< HTTP[003]: done with response body

这段输出信息量很大。在LLM的帮助下,发现其关键内容如下:

  1. 设备识别+ Found new device. VID:PID = 03f0:be2a,打印机被正确识别,序列号为 VN50B02739,基本能力为 print,http
  2. USB 接口协议:三个被标记为 * 的接口全部是 Class 7, SubClass 1, Protocol 4——这正是 IPP over USB 的标志。如果打印机使用传统 USB 批量传输,Protocol 应该是 1 或 2。
  3. IPP 服务地址ipp-usblocalhost:60000 上监听,提供 /ipp/print 端点。
  4. 通信验证:可以看到三次 HTTP 请求均返回 200 OK——POST 到 /ipp/print 发送了打印数据,GET 到 /ipp/strings/en-us 获取了打印机描述信息,数据通道完全畅通。
  5. 扫描功能:GET 到 /eSCL/ScannerCapabilities 返回了 404 Not Found,说明 M14-M17 不支持 eSCL 扫描(与 TXT 记录中的 Scan=F 一致)。
  6. DNS-SD 广播ipp-usb 通过 Avahi 发布了 DNS-SD 服务,其中 TXT 记录包含了打印机的完整能力信息。特别注意 Duplex=F,确认该型号硬件不支持双面打印。另外可以看到打印机的内部型号标识为 HP LaserJet M16a(M14-M17 系列的子型号)。
  7. 认证机制ipp-usb 对来自 localhost::1)的请求自动放行,允许 config,fax,print,scan 操作。

问题的根本原因已经明确:KDE 桌面在首次添加打印机时,CUPS 自动选择了 HPLIP 的 USB 后端(设备 URI 为 hp:/usb/HP_LaserJet_M14-M17?serial=...),而该打印机需要通过 ipp-usb 提供的 IPP 通道进行通信。

根据LLM分析,我按以下步骤操作:

  1. 让 systemd 重新接管 ipp-usb
systemctl start ipp-usb
  1. 删除之前通过 HPLIP 创建的错误打印队列:
sudo lpadmin -x HP_LaserJet_M14-M17
  1. 使用 ipp-usb 提供的 IPP 地址重新添加打印机,并指定 everywhere 驱动:
sudo lpadmin -p HP_LaserJet_M14-M17 \
  -v "ipp://localhost:60000/ipp/print" \
  -E \
  -m everywhere
  • -E 参数表示立即启用打印机并接受打印任务。
  • -m everywhere 指定使用 CUPS 内置的 IPP Everywhere 驱动,它会通过 IPP 协议自动向打印机查询支持的能力(纸张尺寸、分辨率、PDL 等),无需手动安装 PPD 文件。这与 HPLIP 需要预置 PPD 的方式形成了鲜明对比。
  1. 发送测试页验证:
echo "Hello from ipp-usb!" | lp -d HP_LaserJet_M14-M17

打印机成功出纸,问题解决了……一半。还有双面打印呢?

事实上,打印选项中缺失双面打印并非配置问题。通过 ipp-usb debug 输出的 DNS-SD TXT 记录可以确认 Duplex=F,即 HP LaserJet M14-M17 不具备自动双面打印单元。在 Windows 上,其是通过软件层面分两次打印奇数页和偶数页,结合手动翻面完成的。

细细一想,还有一个最大的问题。为什么 HPLIP 的 USB 后端不适配自家的打印机?

原来,在 USB 规范中,打印机接口属于 Class 7(打印设备),但协议编号区分了两种完全不同的通信方式:

协议编号 名称 通信方式 代表打印机
Protocol 1 / 2 传统 USB 批量传输 CUPS → usblp 或 HPLIP → USB bulk 端点 → 打印机 早期 HP LaserJet(如 P1102、M1132)
Protocol 4 IPP over USB CUPS → IPP 协议 → ipp-usb 守护进程 → USB → 打印机 HP LaserJet M14-M17 等 IPP Everywhere 打印机

ipp-usb debug 的输出中可以明确看到 M14-M17 的 USB 接口全部使用 Protocol 4:

  USB interfaces:
    Config Interface Alt Class SubClass Proto
       1       0      0   7      1       2
       1       1      0   255    4       1
*      1       1      1   7      1       4    ← IPP over USB
       1       2      0   255    4       1
*      1       2      1   7      1       4    ← IPP over USB
       1       3      0   255    4       1
*      1       3      1   7      1       4    ← IPP over USB

HPLIP 的 USB 后端基于 IEEE-1284.4 协议(对应 USB 接口的 Protocol 1/2/3),通过 libusb 直接向 USB bulk 端点发送原始打印数据(PCL/PWG 光栅),绕过了 IPP 协议层。这对传统打印机没有问题,但 M14-M17 使用的是 Protocol 4(IPP over USB),期望收到的是标准 IPP 请求。当它收到一堆裸数据时,只能闪烁两下指示灯表示"收到了,但看不懂",然后丢弃。

HP 选择新打印机采用 IPP over USB 协议的原因在于,这是整个打印行业的趋势。传统模式下每家厂商都有自己的 USB 通信协议和专有驱动,导致 Linux 用户经常遇到新打印机无法使用的问题。为解决这一痛点,业界推出了 IPP Everywhere 标准——打印机像一台网络服务器一样,通过标准 HTTP/IPP 协议对外提供服务,任何支持 IPP 的客户端都可以直接使用,无需专有驱动。HP 作为该标准的推动者之一,从 2020 年前后开始在新打印机上逐步采用这一方案。

那么 HPLIP 为什么没有跟进适配呢?事实上 HPLIP 团队早在 2020 年发布的 3.20.11 版本中就已经注意到了 IPP 打印机的存在,但将其标注为 Known issues("hp-toolbox will not work for ippusbxd printers"),而非着手适配。此后直到 2025 年 11 月发布的最新版本 3.25.8,HPLIP 的更新内容始终只包含新增打印机型号的 PPD 文件和发行版兼容性,从未对 USB 后端进行架构性升级以支持 IPP over USB 协议。OpenPrinting 维护的 hplip-printer-app 项目在文档中也明确确认了这一点:HPLIP 的 USB 后端至今仍使用 IEEE-1284.4 协议。

HPLIP 自带了一个 HPLIP.conf 配置文件,会将所有 HP 设备加入黑名单,从而阻止 ipp-usb 访问这些设备。这意味着 HPLIP 不仅没有适配 IPP over USB,还在主动排斥 ipp-usb 的工作。所幸,多数 Linux 发行版在打包时会移除该配置文件。从发行版仓库安装的 HPLIP 通常不受此影响。

这个过渡期对 Linux 用户来说体验并不平滑:CUPS 和 KDE 的自动发现机制仍然会优先匹配 HPLIP 驱动,导致用户在不知情的情况下走了弯路。如果你的打印机也是较新的 HP 型号且遇到了类似的"打印完成但无反应"问题,建议优先检查 ipp-usb 的运行状态以及 CUPS 打印队列所使用的设备 URI 是否指向了正确的 IPP 端点。