PVE系统下LXC容器驱动打印机

2026-07-28 10:47:05 0点赞 0收藏 0评论

在 Proxmox LXC(Debian 12)中部署 CUPS + HP 打印机完整指南

基于本次成功部署的 容器 103HP LaserJet P1108(识别为 P1102),所有命令均使用真实参数,可直接复制执行。


一、宿主机配置(Proxmox VE)

  1. 确认打印机 USB 信息(仅用于检查,配置不依赖)

lsusb | grep 03f0:002a # 示例输出:Bus 001 Device 005: ID 03f0:002a HP, Inc LaserJet P1102

  1. 编辑容器配置文件(此处以 CTID=103 为例)

nano /etc/pve/lxc/103.conf

在文件末尾添加:

lxc.cgroup2.devices.allow: c 189:* rwm lxc.mount.entry: /dev/bus/usb dev/bus/usb none bind,optional,create=dir

这两行分别赋予容器 USB 访问权限,并将宿主 /dev/bus/usb​ 目录整个挂载进容器,无需特权容器。

  1. 重启容器使配置生效

pct reboot 103


二、容器内基础环境

进入容器:

pct enter 103

  1. 安装必需软件

apt update apt install -y cups cups-client hplip hplip-data printer-driver-hpcups

  1. 屏蔽容器中会失败的 systemd 服务(否则 CUPS 无法启动),

    如果 CUPS 启动失败,检查失败的依赖systemctl list-dependencies cups.service --all​, dependency failed错误,​发现 systemd-modules-load.service​ 为 failed 状态,屏蔽它即可解决

systemctl mask systemd-modules-load.service

也有说法认为systemctl mask systemd-modules-load.service​ 属于优化步骤,而非必须步骤

  • LXC 容器无权加载内核模块,该服务确实会启动失败,但它属于 sysinit.target​ 的可选依赖(WantedBy​ 而非 RequiredBy​),Debian 12 默认配置下,CUPS 不会因为该服务失败而启动失败。

  • 屏蔽它的作用是消除系统日志中的报错、减少冗余依赖检查,并非 CUPS 启动的前置条件。只有极少数定制系统强绑定依赖时才会触发启动失败,通用场景不屏蔽也能正常运行。

  1. 启动 CUPS 并验证

systemctl enable --now cups systemctl status cups # 应显示 active (running)

  1. (可选)避免后续权限提示

usermod -aG lp,lpadmin root


三、安装 HP 专用插件(P1108 等机型必需)

在线安装(容器需能访问外网):

hp-plugin -i

交互过程:

  • 输入 d​ 选择下载并安装插件

  • 接受许可协议

  • 等待完成

验证插件状态:

hp-check -t | grep -i plugin # 输出需包含 “Plugin ... OK”

离线安装兜底(若容器网络受限):

  1. 在可上网的宿主机或其它机器上下载对应版本的插件(.run​ 文件),例如 hplip-3.21.2-plugin.run​。

  2. 将文件复制进容器:

    pct push 103 /path/to/hplip-3.21.2-plugin.run /root/

  3. 在容器内执行:

    hp-plugin -i -p /root/hplip-3.21.2-plugin.run


四、添加打印机(使用永久稳定的 URI)

关键原则:不要使用 /dev/bus/usb/... /dev/usb/lp1这类会变化的设备路径,必须使用基于打印机序列号的 URI。

  1. 获取永久设备 URI

hp-probe -b usb -o device_uri

输出示例(记下整行):

hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q8DDHC5PXXX

  1. 查找正确的 PPD 驱动名称

lpinfo -m | grep -i p1108

从输出中选择 PPD 完整名称,例如:

drv:///hpcups.drv/hp-laserjet_professional_p1108.ppd

  1. 创建打印队列

lpadmin -p HP_LaserJet_P1108 -E -v "hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q8DDHC5PXXX" -m drv:///hpcups.drv/hp-laserjet_professional_p1108.ppd

提示“驱动已被弃用”可忽略。

  1. 验证队列

lpstat -t

看到 打印机 HP_LaserJet_P1108 目前空闲​ 表示成功。


五、测试打印

echo "Hello from LXC" | lp -d HP_LaserJet_P1108

打印机开始工作即部署完成。

PVE系统下LXC容器驱动打印机

六、优化补充:开放局域网打印(可选)

若需让局域网内其他设备发现并使用这台打印机,修改 CUPS 配置:

  1. 编辑配置文件

nano /etc/cups/cupsd.conf

  1. 修改监听地址
    Listen localhost:631​ 改为:

    Listen 0.0.0.0:631

  2. 添加访问权限
    ​ 和 ​ 段中添加:

    Allow @LOCAL

  3. 重启 CUPS

systemctl restart cups

  1. 访问 Web 管理界面
    浏览器打开 http://容器IP:631​(如 http://192.168.0.8:631​),使用 root 账号登录。
    局域网内其他设备添加网络打印机时,URI 使用 ipp://容器IP/printers/HP_LaserJet_P1108​。



七、最终配置特点

  • 无需特权容器,仅需 cgroup 规则 + 目录挂载

  • URI 基于打印机序列号,不受 USB 口/设备号变化影响

  • 容器重启后自动恢复,无需手动干预

  • 可随时通过 Web 界面管理,或通过 IPP 共享给局域网

本指南已在 Proxmox VE 9.x + Debian 12 LXC 环境中实测通过,打印机型号 HP LaserJet P1108。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
挂件

天天5公里

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
0
扫一下,分享更方便,购买更轻松