PVE系统下LXC容器驱动打印机
在 Proxmox LXC(Debian 12)中部署 CUPS + HP 打印机完整指南
基于本次成功部署的 容器 103 与 HP LaserJet P1108(识别为 P1102),所有命令均使用真实参数,可直接复制执行。
一、宿主机配置(Proxmox VE)
确认打印机 USB 信息(仅用于检查,配置不依赖)
lsusb | grep 03f0:002a
# 示例输出:Bus 001 Device 005: ID 03f0:002a HP, Inc LaserJet P1102
编辑容器配置文件(此处以 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 目录整个挂载进容器,无需特权容器。
重启容器使配置生效
pct reboot 103
二、容器内基础环境
进入容器:
pct enter 103
安装必需软件
apt update
apt install -y cups cups-client hplip hplip-data printer-driver-hpcups
屏蔽容器中会失败的 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 启动的前置条件。只有极少数定制系统强绑定依赖时才会触发启动失败,通用场景不屏蔽也能正常运行。
启动 CUPS 并验证
systemctl enable --now cups
systemctl status cups # 应显示 active (running)
(可选)避免后续权限提示
usermod -aG lp,lpadmin root
三、安装 HP 专用插件(P1108 等机型必需)
在线安装(容器需能访问外网):
hp-plugin -i
交互过程:
输入 d 选择下载并安装插件
接受许可协议
等待完成
验证插件状态:
hp-check -t | grep -i plugin
# 输出需包含 “Plugin ... OK”
离线安装兜底(若容器网络受限):
在可上网的宿主机或其它机器上下载对应版本的插件(.run 文件),例如 hplip-3.21.2-plugin.run。
将文件复制进容器:
pct push 103 /path/to/hplip-3.21.2-plugin.run /root/在容器内执行:
hp-plugin -i -p /root/hplip-3.21.2-plugin.run
四、添加打印机(使用永久稳定的 URI)
关键原则:不要使用 /dev/bus/usb/... 或 /dev/usb/lp1 这类会变化的设备路径,必须使用基于打印机序列号的 URI。
获取永久设备 URI
hp-probe -b usb -o device_uri
输出示例(记下整行):
hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q8DDHC5PXXX
查找正确的 PPD 驱动名称
lpinfo -m | grep -i p1108
从输出中选择 PPD 完整名称,例如:
drv:///hpcups.drv/hp-laserjet_professional_p1108.ppd
创建打印队列
lpadmin -p HP_LaserJet_P1108 -E -v "hp:/usb/HP_LaserJet_Professional_P1108?serial=000000000Q8DDHC5PXXX" -m drv:///hpcups.drv/hp-laserjet_professional_p1108.ppd
提示“驱动已被弃用”可忽略。
验证队列
lpstat -t
看到 打印机 HP_LaserJet_P1108 目前空闲 表示成功。
五、测试打印
echo "Hello from LXC" | lp -d HP_LaserJet_P1108
打印机开始工作即部署完成。

六、优化补充:开放局域网打印(可选)
若需让局域网内其他设备发现并使用这台打印机,修改 CUPS 配置:
编辑配置文件
nano /etc/cups/cupsd.conf
修改监听地址
将 Listen localhost:631 改为:Listen 0.0.0.0:631添加访问权限
在 和 段中添加:Allow @LOCAL重启 CUPS
systemctl restart cups
访问 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。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
