购买了一台CP1025【1】放家里用作远程办公,CP1025好处是作为入门激光机器支持彩色打印,虽然速度慢,还是挺适合低印量低维护的家用场景的。
不过我在家里也有PC和笔记本电脑,有时候用PC打印,有时候用笔记本电脑打印,这里简单分享下多设备切换的方案和对应的坑。
下面分为两个部分,第一个部分是我用过的方案,作为记录和启发后续用。第二个部分是我现在用的方案,也就是VitualHere【2】。
Windows打印机共享
这个是最稳的方案,不过缺点是必须有一个Windows机器开着当服务器,家里没有适合做这个的设备,PASS。
KVM切换
这个方案是最稳的,通过KVM把打印机在两台设备之间做切换,本质上和手动接线是一样的。不过我自己的KVM切换【3】在显示器换成300hz的高刷后就吃灰了,还是得换基于网络的方案。
接下来的方案思路是把打印服务放在NAS【4】上,打印机连接到NAS上,NAS再把打印服务通过网络share出去。这样的好处是都不一定要走有线,WIFI也可以。
CUPS
提到“共享”是不得不提到CUPS【5】的,CUPS的优势是对果子支持很好,配置好后果子手机什么的也能一键打印。但缺点也很清楚:尤其是CP1025这种单面机,驱动原生的手动双面打印功能CUPS是实现不了的。
既然CUPS这种在应用层【6】封装的不可行,那么直接从传输层【7】入手行不行呢?于是接下来两个方案我也试过了。
P910nd
这个方案的核心思想是:让 NAS 只做“无脑”的数据转发,把渲染和高级设置全部交还给 Windows 电脑上的 HP 官方驱动。
简单地说就是把9100端口【8】直接映射到打印机的usb端口上,不过这个方案在我这里不稳定,所以仅作记录。
完成USB连接后,我们可以执行lsusb【9】指令检查是否正确识别到打印机。
nature@NatureNas:/$ sudo lsusb
Bus 002 Device 003: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
Bus 002 Device 002: ID 152d:0901 JMicron Technology Corp. / JMicron USA Technology Corp. TOPMORE
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 03f0:112a HP, Inc HP LaserJet CP 1025
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
好,接下来ls 以下/dev/usb,如果发现没设备,就需要加载usblp【10】这个模块。
sudo modprobe usblp
echo "usblp" | sudo tee -a /etc/modules
Docker【11】库:https://hub.docker.com/r/justinhimself/p910nd
docker run -d \
--name=p910nd \
--privileged \
-p 9100:9100 \
-v /dev/usb/lp0:/dev/usb/lp0 \
-v /var/lock/p910nd:/var/lock/p910nd \
justinhimself/p910nd:latest '-b' '-d' '-f' '/dev/usb/lp0'
接下来到Windows环境下操作。
打开 Windows 的 设置 > 蓝牙和其他设备 > 打印机和扫描仪,点击 添加设备。
等待几秒钟,点击 手动添加(或“我需要的打印机不在列表中”)。
选择 “使用 IP 地址或主机名添加打印机”,点击下一页。
- 设备类型:选择 TCP/IP【12】 设备。
- 主机名或 IP 地址:填写你 飞牛 NAS【13】 的 IP 地址(例如
192.168.1.100)。 - 端口名称:随意,它会自动生成。
- 取消勾选 “查询打印机并自动选择要使用的驱动程序”。
点击下一页后,Windows 会尝试检测网络端口,可能会提示需要更多端口信息。
- 在“设备类型”中选择 自定义,点击 设置。
- 确认协议是 Raw,端口是 9100,点击确定并继续。
安装原厂驱动: 在弹出的驱动选择窗口中:
- 如果你的电脑以前装过这台打印机,直接在左侧选 HP,右侧选 HP LaserJet Pro CP1025。
- 如果没有,点击 “从磁盘安装”,选择你提前下载解压好的 HP 官方驱动包路径,找到
.inf文件进行安装。
一直点击下一步,直到完成安装。
现在在用的方案 - VitualHere
VitualHere好处是不用管乱七八糟的,NAS端部署一个docker容器,客户端下载一个绿色小软件就实现了打印机使用。
这里给出这个工具的官网:https://www.virtualhere.com/usb_client_software
这里给出一个Docker-compose【14】用于部署
version: '3.8'
services:
virtualhere:
image: meeresgott/virtualhere-server:latest
container_name: vh_server
network_mode: "host"
privileged: true # 必须开启特权模式,否则无法直接读取底层 USB 总线
volumes:
- /dev/bus/usb:/dev/bus/usb # 将整个 USB 总线映射进容器
restart: unless-stopped
完成后启动容器即可,随后在Windows系统下下载客户端,Link:https://www.virtualhere.com/sites/default/files/usbclient/vhui64.exe
下载好打开即可,它会自动的搜索到NAS上的服务端,并展示能连接上的USB设备,这里需要特别注意不要连到你的USB网口、外置硬盘。当然这个可以在docker-compose文件中约束,完事了就和你电脑上连USB一样(这也是Vitualhere这个软件本身的用途)。
Comments NOTHING