TigerVNC 在 Debian 的远程打印实现与最佳实践
一、工作原理与前提
- 在 VNC 会话中,应用把打印作业提交到会话里的虚拟打印机(常见为 TigerVNC 打印机),该虚拟打印机会把作业通过 RFB 通道回传到 VNC 服务器,再由服务器端的 CUPS 打印系统送到真实打印机。因此,服务器端需要运行 CUPS,客户端需要能显示并选择该虚拟打印机。若未安装桌面环境,虚拟打印功能通常不可用。
二、服务器端配置步骤(Debian)
- 安装组件
- 安装 TigerVNC 与桌面环境(示例:Xfce;如使用 GNOME 亦可):sudo apt update && sudo apt install tigervnc-standalone-server tigervnc-common xfce4 xfce4-goodies cups
- 启动并初始化 VNC 密码:vncserver 后执行 vncpasswd
- 配置 CUPS
- 允许来自 VNC 会话的打印(在服务器本机访问):编辑 /etc/cups/cupsd.conf,确保存在或调整为:
- Listen 127.0.0.1:631
- Order allow,deny Allow all
- <Location /admin> Order allow,deny Allow all
- 建议仅在本机开放 631,远程管理通过 SSH 隧道进行;重启服务:sudo systemctl restart cups
- 启动 VNC 会话
- 建议仅本机监听,外网通过 SSH 隧道访问:vncserver :1 -localhost yes -geometry 1920x1080
- 若需直接开放外网访问(不推荐):vncserver :1 -localhost no -geometry 1920x1080
- 防火墙
- 仅放行 SSH:sudo ufw allow 22/tcp
- 不建议放行 5901/tcp 等 VNC 明文端口到公网。
三、客户端连接与打印
- 建立安全隧道(推荐)
- 本地端口转发:ssh -L 5901:127.0.0.1:5901 user@server
- 客户端连接:vncviewer 127.0.0.1:1
- 打印操作
- 在 VNC 会话中打开待打印文档,选择名为 “TigerVNC Printer” 或类似的虚拟打印机,打印后作业会经 VNC 传回服务器并由 CUPS 排队输出到已配置的实体打印机。
四、常见问题与排查
- 看不到虚拟打印机
- 确认会话为图形会话(已安装并启动了桌面环境),且 vncconfig 已在会话中运行;必要时重启 VNC 会话。
- 打印作业卡在队列
- 检查服务器 CUPS 是否运行:sudo systemctl status cups;查看队列:lpstat -o;必要时清空:cancel 。
- 客户端无法连接
- 确认 SSH 隧道已建立且本地端口 5901 未被占用;如使用 -localhost yes,请勿直接连服务器的公网 IP:5901。
- 安全性
- 避免将 5901/tcp 暴露到公网;使用强 VNC 密码、最小权限用户、及时更新系统。
五、更稳妥的替代方案
- 若不需要在远端“看见”打印对话框,推荐直接把打印作业从客户端通过 IPP 提交到服务器的 CUPS(例如使用 lpr 或系统“打印到文件”后 scp 上传再 lpr),可避免开启 VNC 打印通道,减少攻击面。