威联通使用 HP 1020 Plus 打印机

news/2024/11/24 0:35:50/

前言

HP 1020 Plus 属于 GDI 驱动(基于主机的驱动),此类打印机需要连接上主机后,由主机主动向打印机写入一段驱动才可以正常运行。

而威联通是不支持此类打印机的。不支持体现在打印机可以正常连接上 NAS,但是点击打印后,显示打印完成,但是没有产生任何实际打印行为。

在网上搜到一篇此类问题的求助:QNAP USB打印机问题

问题

上述链接中,有人回答使用虚拟机,但是用虚拟机又带来了几个问题:

  1. Windows 可以很好的支持 GDI 驱动打印机,但是 Linux 系列比较麻烦,需要手动安装驱动。我虚拟机中运行的是 Ubuntu Server 18;
  2. 每次 USB 打印机连接上 NAS 之后,必须手动的在 Virtualization Station 中将该 USB 设备分配给虚拟机,非常麻烦,毕竟打印机不会常开,我家人并不会操作威联通的管理页面;

解决问题

1. 给 Ubuntu Server 安装驱动

首先解决第一个问题,Ubuntu Server 如何安装 HP 1020 Plus 的驱动?请参考我的这篇博客:https://blog.csdn.net/hanziyuan08/article/details/108396537。

我在文中详细的描述了以下几件事情:

  1. 安装 cups 用于管理打印机;
  2. 利用 foo2zjs 安装打印机驱动,并将驱动设置到 cups 中;

2. 自动分配 USB 打印机给虚拟机

  1. 检测虚拟机是否有 USB 打印机;
  2. 如果虚拟机没有 USB 打印机则将 USB 打印机分配给虚拟机;

这一步可以通过脚本完成,先解释一下脚本涉及到的几个知识点:

2.1. virsh 相关知识

  1. virsh 是管理 KVM 虚拟机的工具,也是 VirtualizationStation 的虚拟机管理工具。利用 virsh 工具我们可以检测虚拟机分配了哪些 USB 设备,也可以将 USB 设备分配给虚拟机;
  2. virsh 命令没有被加到环境变量,所以需用绝对路径:/QVS/usr/bin/virsh

2.2. 通过 virsh 获取虚拟机名称

虚拟机名称可以通过 virsh list 命令获得,如:

[/QVS/usr/bin] $ /QVS/usr/bin/virsh listId    Name                           State
----------------------------------------------------1     39d664db-d642-4922-9ddd-ccca6b372b9d running

2.3. 创建 USB 设备的 XML 描述文件

先看下我的 XML 文件:

<hostdev mode='subsystem' type='usb'><source><vendor id='0x03f0'/><product id='0x2b17'/></source>
</hostdev>

这里有 2 个点需要注意,vendor id 和 product id,每个设备都具有唯一的两个 ID,如何获取呢?通过 lsusb 命令,如:

[/QVS/usr/bin] $ lsusb
Bus 001 Device 003: ID 1005:b155 Apacer Technology, Inc. 
Bus 001 Device 008: ID 03f0:2b17 Hewlett-Packard LaserJet 1020 # 这一行是我的 HP 1020 Plus 打印机
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

注意到 03f0:2b17 了吗?03f0 就是 vendor id,2b17 就是 product id。

2.4. 创建 shell 脚本检测并分配设备给虚拟机

脚本文件如下:

#!/bin/bash
# set -x
set -euo pipefail# 宿主机是否连接设备
HOST_ATTACHED=0
# 虚拟机是否已连接设备
VM_ATTACHED=0
# 虚拟机名称
NAME="39d664db-d642-4922-9ddd-ccca6b372b9d"
# USB 打印机的 XML 描述文件
XML_PATH="/share/my_cron/printer_1020_plus.xml"
# 本脚本工作的日志路径
LOG_PATH="/share/my_cron/printer_1020_plus_attach.log"
# USB 设备名称
DEVICE_NAME_FRAGMENT="LaserJet\ 1020"if /QVS/usr/bin/virsh qemu-monitor-command --domain $NAME --hmp --cmd "info usb" | grep -q "$DEVICE_NAME_FRAGMENT"; thenVM_ATTACHED=1
fi
if lsusb | grep -q "$DEVICE_NAME_FRAGMENT"; thenHOST_ATTACHED=1
fi# 如果虚拟机没有连接设备,且宿主机连接了设备,则将设备分配给虚拟机
if [ $VM_ATTACHED -eq 0 ] && [ $HOST_ATTACHED -eq 1 ]; then/QVS/usr/bin/virsh attach-device $NAME $XML_PATH > /dev/nullMSG="`date` attached_printer"echo $MSG >> $LOG_PATH
fi# 虚拟机连接了设备,但是宿主机没有该设备,则意味着设备是通过断电离线的,需要排除
# 此场景只出现了一次,暂不能确定具体原因
if [ $VM_ATTACHED -eq 1 ] && [ $HOST_ATTACHED -eq 0 ]; then/QVS/usr/bin/virsh detach-device $NAME $XML_PATH > /dev/nullMSG="`date` detached_printer"echo $MSG >> $LOG_PATH
fi

注意将脚本中的变量修改为你自己的,变量我都放置在脚本前面了,有注释的那 4 个。

2.5. 创建定时任务

另有一种方案:利用 udev 监听 usb 设备变化,无需定时任务,参考:https://github.com/Bpazy/usb-libvirt-hotplug

首先修改 cron 配置:

# 每分钟运行一次脚本,检测到 USB 设备没有分配给虚拟机则会进行分配
echo "*/1 * * * * /bin/bash /share/my_cron/printer_1020_plus_attacher.sh" >> /etc/config/crontab
# 重启 crontab
crontab /etc/config/crontab && /etc/init.d/crond.sh restart

完结撒花

好了,这下可以放心的给打印机断电了,需要的时候打开打印机,会自动分配给虚拟机,而后就可以正常打印了。

还有个问题,就是通过 virsh 分配 USB 设备给虚拟机之后,在 VirtualizationStation 里面体现不出来,会显示 USB 仍未分配给虚拟机,不过这个显然是个小问题,忽略即可。

最后看个日志吧

Thu Sep 10 17:15:00 HKT 2020 attached_printer
Thu Sep 10 19:03:00 HKT 2020 detached_printer
Thu Sep 10 19:07:00 HKT 2020 attached_printer
Thu Sep 10 19:41:00 HKT 2020 detached_printer
Thu Sep 10 22:06:05 HKT 2020 attached_printer
Fri Sep 11 00:08:00 HKT 2020 detached_printer

http://www.ppmy.cn/news/165415.html

相关文章

win10无法添加HP打印机驱动

如题&#xff0c;打印机型号是HP LaserJet 1010&#xff0c;老版打印机&#xff0c;驱动需要手动安装。 正常安装驱动步骤&#xff1a; 官方网站下载驱动 解压安装包。 根目录有个 .inf文件&#xff0c;右击选项有个安装。跟安装鼠标图标方法有点类似。 但是这个…

HP P1108打印机安装

1.先把打印机上面的东西都收拾好。 2.先不要连接usb和电脑&#xff0c;把光驱盘或者网上下载驱动。 3.然后进行安装&#xff0c;等到安装提示需要连接usb的时候&#xff0c;将打印机usb连接电脑 4.安装完成即可。

hp打印机一直显示正在打印中_HP打印机提示文档正在打印但就是打印不了

解决方法及步骤&#xff1a; 一、首先是检查打印机面板指示灯是否异常。 首先检查打印机内是否有卡纸&#xff0c;如有卡住纸张或纸片&#xff0c;请取出再试。 2. 然后再检查打印机硒鼓是否安好&#xff0c;或者硒鼓是不是好的&#xff0c;如有条件可以更换硒鼓试试。 二、再检…

hp打印机装不上服务器系统,winxp系统无法安装HP打印机驱动程序如何解决

最近有winxp系统用户想要在电脑中安装HP打印机驱动程序,可是却发现无法安装,碰到这样的问题该怎么办呢,为此小编这就给大家带来winxp系统无法安装HP打印机驱动程序的具体解决步骤。 故障现象: 安装驱动程序时搜索不到 USB 设备,安装失败。 连接打印机 USB 连接线后,提示“欢…

hp打印机没连上计算机,有关如何将HP打印机连接到计算机,如何添加打印机的详细步骤-...

现在&#xff0c;计算机已得到普遍改进. 使用计算机可以帮助我们完成生活和工作中的某些事情&#xff0c;效率很高. 每个人都听说过打印机. 以前的打印机都是手动完成的. 效率非常地下&#xff0c;错误率很高&#xff0c;并且随着Internet的出现&#xff0c;人们将计算机和打印…

装打印机驱动时出现请重新启动计算机,确保其它程序关闭是什么意思,,确保打印机设备已打开电源。常见问题hp1007驱动怎么卸载...

2、确保打印机设备已打开。 3、将打印机连接到计算机 4、打开驱动程序&#xff0c;然后按照提示进行安装 如何使用hp1007打印机驱动程序 1、将打印机连接到主机&#xff0c;打开打印机&#xff0c;通过主机的“控制面板”选项进入“打印机和传真”文件夹&#xff0c;右键单击空…

基于html+css的图展示104

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

hp打印机无法与计算机,HP打印机无法连接到计算机

一位网友问: HP打印机HP Deskjet 1050通过USB连接到win7后&#xff0c;win7提示无法连接该设备. 我的系统是Windows7 Ultimate 64位&#xff0c;如果出现上述情况该怎么办&#xff1f; 编辑器的答案: 打印机无法连接到计算机的问题通常是由计算机或打印机本身引起的&#xff0c…