我是跟野兽差不了多少 2025-11-03 15:20 采纳率: 98.7%
浏览 4
已采纳

1020plus hplip-3.21 打印机无法识别设备

在使用HP LaserJet 1020 Plus打印机并搭配HPLIP 3.21驱动时,用户常遇到“打印机无法识别设备”的问题。该故障通常表现为系统无法检测到已连接的USB打印机,即使物理连接正常。常见原因包括HPLIP未正确安装或服务未启动、udev规则配置缺失、内核模块冲突或固件加载失败。尤其在Linux发行版中,缺少hotplug支持或权限配置不当会阻止设备识别。此外,HPLIP 3.21对老旧型号支持有限,可能导致兼容性问题。需检查`hp-check -t`输出、确认`hpijs`和`foomatic`组件状态,并手动触发固件上传。
  • 写回答

1条回答 默认 最新

  • 程昱森 2025-11-03 15:26
    关注

    一、问题背景与现象描述

    在Linux系统中使用HP LaserJet 1020 Plus打印机时,尽管物理USB连接正常,但系统常无法识别设备。该问题在HPLIP 3.21版本驱动下尤为常见,表现为执行hp-check -t后提示“Device not found”或“Printer not detected”,即使lsusb可显示设备ID(如ID 03f0:4b17)。此故障直接影响打印队列的建立与作业提交。

    二、常见原因分类分析

    1. HPLIP未正确安装或服务未启动:部分发行版默认不包含完整HPLIP组件,导致hp-daemon未运行。
    2. udev规则缺失:缺少对HP设备的权限配置,非root用户无法访问/dev/usb/lp*设备节点。
    3. 内核模块冲突:如usblp模块抢占了USB接口,阻止HPLIP通过libusb直接通信。
    4. 固件加载失败:LaserJet 1020 Plus需动态上传PCL固件(sihp1020.dl),若路径错误或权限不足则失败。
    5. hotplug支持缺失:旧版系统未启用热插拔事件触发机制,导致插拔打印机无响应。
    6. 兼容性问题:HPLIP 3.21对老旧型号支持退化,建议使用社区维护补丁或降级至3.10.x。

    三、诊断流程与关键命令输出

    
    $ hp-check -t
    Saving output in log file: /home/user/hp-check.log
    
    HP Linux Imaging and Printing System (ver. 3.21)
    Dependency Check Tool ver. 15.1
    
    [INFO] Kernel version: 5.15.0-86-generic
    [WARNING] 'foomatic' is MISSING. This may affect printing.
    [ERROR] 'hpijs' is NOT installed. Required for LaserJet 1020 Plus.
    [ERROR] Printer status: Device not found. Is printer plugged in?
        

    上述输出揭示核心组件缺失,需进一步验证设备枚举状态:

    $ lsusb | grep -i hp
    Bus 001 Device 005: ID 03f0:4b17 HP LaserJet 1020

    四、解决方案层级递进

    层级操作项命令/说明
    1卸载冲突模块sudo rmmod usblp
    2加载HPLIP模块sudo modprobe hplip
    3添加udev规则/etc/udev/rules.d/51-hp-laserjet-1020.rules 写入 SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="4b17", MODE="0664", GROUP="lp"
    4重启udev服务sudo systemctl restart udev
    5手动触发固件上传sudo hp-setup -i -x 03f0:4b17
    6启用hotplug脚本确保/etc/hotplug/usb/hplip存在并可执行

    五、自动化修复脚本示例

    #!/bin/bash
    # fix-hp1020.sh - 自动修复HPLIP设备识别问题
    set -e
    
    echo "【步骤1】移除usblp冲突模块"
    sudo rmmod usblp || true
    
    echo "【步骤2】加载hplip内核模块"
    sudo modprobe hplip
    
    echo "【步骤3】部署udev规则"
    cat <<EOF | sudo tee /etc/udev/rules.d/51-hp-laserjet-1020.rules
    SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="4b17", MODE="0664", GROUP="lp"
    EOF
    
    echo "【步骤4】重载udev规则"
    sudo udevadm control --reload-rules && sudo udevadm trigger
    
    echo "【步骤5】尝试手动添加打印机"
    hp-setup -i -x 03f0:4b17
        

    六、深度排查:固件加载机制解析

    HP LaserJet 1020 Plus采用“WinChipHead”芯片方案,开机时内存为空,必须由主机上传固件才能激活。HPLIP通过sendfax工具链调用hpijs驱动完成上传。若/usr/share/hplip/data/firmware/sihp1020.dl缺失,需从开源项目foo2zjs获取替代固件,并配置符号链接:

    sudo mkdir -p /usr/share/hplip/data/firmware
    sudo wget https://foo2zjs.rkkda.com/sihp1020.dl -O /usr/share/hplip/data/firmware/sihp1020.dl

    七、系统兼容性适配建议

    • Ubuntu 22.04+:建议使用hplip-gui包并通过GUI向导配置。
    • Fedora/RHEL:需启用EPEL源并安装hplip-devel以支持编译自定义模块。
    • Arch Linux:优先使用AUR中的hplip-plugin确保闭源固件可用。
    • 容器环境(如Docker):需挂载/dev/bus/usb并共享udev设备树。

    八、可视化诊断流程图

    graph TD A[打印机插入USB] --> B{lsusb能否识别?} B -- 否 --> C[检查物理连接/换线/换口] B -- 是 --> D[是否加载usblp模块?] D -- 是 --> E[rmmod usblp] D -- 否 --> F[继续] E --> F F --> G[udev规则是否存在?] G -- 否 --> H[创建51-hp-laserjet-1020.rules] G -- 是 --> I[触发udevadm trigger] H --> I I --> J[运行hp-setup -i] J --> K{固件上传成功?} K -- 否 --> L[手动下载sihp1020.dl] K -- 是 --> M[完成配置] L --> J

    九、长期维护策略

    为避免系统更新后模块重新加载,建议创建内核黑名单位置文件:

    echo "blacklist usblp" | sudo tee /etc/modprobe.d/blacklist-usblp.conf

    同时将HPLIP服务设为开机启动:

    sudo systemctl enable hp-daemon
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月4日
  • 创建了问题 11月3日