在 CentOS 的 VirtualBox 虚拟机中配置打印机的可行方案
- 方案一(推荐):将打印机以 USB 直通 方式连接给虚拟机,让虚拟机直接驱动打印机。适合大多数 USB 打印机,驱动安装在虚拟机内,体验最接近物理机。
- 方案二:在宿主机启用 CUPS 打印服务 并共享,虚拟机通过 HTTP/IPP 访问宿主机上的共享打印机。适合宿主机为 Linux,且虚拟机为 Windows 或 Linux 的场景。
- 方案三:使用 网络打印机(打印机自带网口或连接到局域网打印服务器),虚拟机像访问普通网络设备一样添加打印队列。适合跨系统、跨网段稳定打印。
方案一 USB 直通连接打印机
- 宿主机准备
- 安装 VirtualBox Extension Pack(与 VirtualBox 版本一致),以启用 USB 2.0/3.0 控制器与 USB 打印机支持。
- 将当前登录用户加入 vboxusers 组(注销并重新登录生效):sudo usermod -aG vboxusers $USER。
- 虚拟机设置
- 关闭虚拟机 → 设置 → USB → 启用 USB 控制器(USB 2.0 或 3.0) → 点击右侧添加 USB 过滤器,选择你的 打印机设备(保持打印机上电并连接)。
- 虚拟机内安装驱动
- Windows 虚拟机:启动后自动发现新硬件,安装厂商驱动。
- Linux 虚拟机(如 CentOS):安装相应驱动(如 hplip 等厂商工具),然后添加打印机。
- 验证
- 在虚拟机中打印测试页,确认状态为“空闲/就绪”。
说明:USB 直通方式稳定、延迟低,是 VirtualBox 官方推荐的连接物理打印机的做法。
方案二 通过宿主机 CUPS 共享给虚拟机
- 宿主机(Linux,含 CentOS)配置
- 安装并启动 CUPS:sudo yum install -y cups;sudo systemctl enable --now cups。
- 允许远程管理与打印(编辑 /etc/cups/cupsd.conf):
- 将 Listen localhost:631 改为 Listen 0.0.0.0:631;
- 在 、<Location /admin>、<Location /printers> 段将 Order deny,allow 改为 Order allow,deny,并添加 Allow from all(或限定网段);
- 防火墙放行:sudo firewall-cmd --permanent --add-port=631/tcp && sudo firewall-cmd --reload。
- 浏览器访问 http://宿主机IP:631,在 “Administration” 中勾选 Share printers connected to this system,并添加/共享你的物理打印机。
- 虚拟机连接共享打印机
- Windows 虚拟机:添加打印机 → 选择“添加网络、无线或 Bluetooth 打印机”,直接搜索到宿主机共享的打印机,或手动输入 http://宿主机IP:631/printers/打印机名称。
- Linux 虚拟机:在浏览器打开 http://宿主机IP:631/printers,点击打印机名称获取 ipp:// 地址,在系统“打印机”中添加该 URI,选择匹配驱动后打印测试页。
说明:该方式通过 IPP 共享,跨系统通用,适合宿主机为 Linux 的长期使用场景。
方案三 使用网络打印机
- 确认网络打印机已接入同一 局域网,并获取其 IP 地址 或 主机名。
- 在虚拟机中直接添加网络打印机:
- Windows:添加打印机 → 选择“添加网络、无线或 Bluetooth 打印机”,输入 \打印机IP 或 http://打印机IP/ipp/port1。
- Linux(CentOS):在“打印机”中添加,选择 网络打印机 → AppSocket/HP JetDirect,填写 socket://打印机IP;或选择 IPP 并填写 ipp://打印机IP/ipp/port1,然后安装匹配驱动。
- 打印测试页验证。
说明:网络打印机方式不依赖宿主机中转,部署简单、维护成本低,适合多机共享与跨网段环境。
常见问题与排查
- 找不到共享打印机或无法连接
- 确认宿主机 CUPS 已运行、端口 631 已放行、共享已勾选;虚拟机与宿主机网络互通(桥接或同一局域网)。
- 在虚拟机中直接用 http://宿主机IP:631/printers 打开共享队列页面测试访问性。
- USB 打印机未被虚拟机捕获
- 确认已安装 Extension Pack、启用 USB 2.0/3.0 控制器、添加正确的 USB 过滤器,且当前用户属于 vboxusers 组。
- 驱动不匹配导致无法打印
- Linux 虚拟机优先安装厂商工具(如 hplip),或使用 Generic PostScript/PCL 驱动;Windows 虚拟机使用厂商官网驱动。
- 打印任务卡住或报错
- 清空打印队列(Linux 可重启 cups:sudo systemctl restart cups),检查打印机状态与纸张/墨粉;必要时在 CUPS 管理界面暂停/恢复队列。
说明:以上问题多与权限、网络连通性、驱动匹配相关,按序排查通常可快速恢复。