外设citrix xendesktop 手写笔

【现象描述】

问题1:TC登陆虚拟机后,使用USB蒙恬手写笔,在虚拟机上安装手写笔驱动后,发现手写笔无法被识别。

问题2:打开所有鼠标、键盘直接放通到虚拟机后,手写笔可以被识别到,但发现和USB鼠标存在冲突,导致鼠标移动到屏幕的左边缘后就“粘住”了,无法移动。

问题3:使用过程中,发现安装手写笔驱动后,虚拟机的“断开”按钮消失了。

问题4:找到了“断开”按钮消失的原因,但“断开”出现后,手写笔在全屏模式下无法使用。

【原因分析】

1、  由于手写笔采用USB接入,并且手写板的设备class和鼠标键盘的class一样的都为03,可

以在物理机的“控制面板”->“管理工具”->“计算机管理”->“USB人体学输入设备”,选择手写笔设备,进入“属性”->“详细信息”里查到。

2、  在tc中,我们是将鼠标键盘的class id屏蔽了,目的不让鼠标映射到虚拟机中,只在tc中

使用(在实际测试中发现usb鼠标不映射到虚拟机中使用效果更好,所以将class =03禁止了)

查看是否禁止,在tc上,在桌面云登陆界面,输入快捷键CTRL+ALT+X调出xterm界面,在bash-3.00#后输入打开ICAClient文件夹,查看usb.conf文件(xpe tc是在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\ICA Client\GenericUSB的DeviceRules键值,修改方法和liunx tc 一样),命令如下:

bash-3.00# cd /usr/lib/ICAClient/

bash-3.00# vi usb.conf

在lib/usr/usb.conf文件中可以看到有如下配置:

DENY:  class=03 subclass=01 prot=01 # HID Boot keyboards

DENY:  class=03 subclass=01 prot=02 # HID Boot mice

3、  将class取消DENY,手写板就可以在虚拟机中使用,修改方法在tc上执行mount -o remount

rw /,取消写保护,将usb.conf文件中的配置做部分修改如下:

bash-3.00# mount -o remount rw /

bash-3.00# cd /usr/lib/ICAClient/

bash-3.00# vi usb.conf

……

#DENY:  class=03 subclass=01 prot=01 # HID Boot keyboards

#DENY:  class=03 subclass=01 prot=02 # HID Boot mice

……

4、  保存修改后的配置,重启TC后,再次接入手写笔,手写笔可以使用了。这种方式鼠标也

使映射到虚拟机中,就导致出现USB鼠标在桌面移动时经常卡死,无法正常使用。现场接入,鼠标不能操作tc等问题,USB无线鼠标也会存在此问题,但接入PS2的鼠标,是不会有此问题。

5、  只有将usb鼠标不能映射到虚拟机中才能规避此问题,实现方法查看鼠标的PID和VID,

然后DENY鼠标的PID和VID同样可以屏蔽鼠标的映射。

修复方式如下现场查看到该鼠标的pid为0001,修改usb.conf文件配置为:

# Don't remote hubs, human-interface devices, or smartcards

DENY:  class=02 # Communications and CDC-Control

DENY:  class=09 # Hub devices

ALLOW: vid=0B57 pid=8021  # Hanwang

ALLOW: vid=5543 pid=0003  # PowerPen

DENY:  class=03 subclass=01 prot=01 # HID Boot keyboards

DENY:  class=03 subclass=01 prot=02 # HID Boot mice

DENY:  class=0a # CDC-Data

DENY:  class=0b # Smartcard

DENY:  class=e0 # Wireless controller

ALLOW: # Ultimate fallback: allow everything else

这样USB鼠标由TC来识别,而手写板由虚拟机识别,这样鼠标和手写板就都能正常使用了。

6、  使用中,还发现了自从安装了手写笔驱动,虚拟机下方的“断开”按钮就消失了:


保存注册表,然后修复方式重新安装VDA,发现“断开”按钮出现了。

通过对比注册表项,发现VDA增加了一个MFAPHOOK.DLL;而安装手写笔驱动后,手写笔驱动将原有的MFAPHOOK.DLL修改为自己的PPINKDLL.DLL了。


注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs中,手工修改C:\PPENSB\Win32\PPINKDLL.DLL,MFAPHOOK.DLL后,“断开”按钮也能出现

但此时如果使用全屏手写识别模式,会导致系统异常,桌面消失。通过分析发现, MFAPHOOK.DLL只是一个接口钩子,它最后使用的钩子是在HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\CtxHook下面。逐一排除测试,发现HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\CtxHook\AppInit_Dlls\UI Tweak\explorer.exe去掉后,“断开”按钮会消失,手写笔全屏识别模式也没有问题了。在Citrix这边已经清楚了和哪个底层冲突了。

如果能找到VDA和手写笔驱动之间的非主要进程冲突,先禁用一个非主要的,也许能解决问题。

反过来再看手写笔如何进入全屏识别模式的。虚拟机启动后,手写笔只是在“开始”-“启动”选项中增加了一个“蒙恬手写笔”的启动项,在进程中增加了ppshell.exe,这是一个菜单进程。通过这个进程,再去加载其它功能对应的进程模块。

测试中发现,使用了全屏识别模式后,增加了freeime.exe、MSNChk.exe进程。逐一排除这两个进程,发现当禁用MSNChk.exe后,出现“断开”按钮,全屏手写识别模式也正常了。

最后通过验证,暂时没有发现禁用MSNChk.exe可能导致问题。


【解决办法】

1、通过以上分析处理过程可以知晓,如果手写笔连接至虚拟机而不通过TC直接识别,鼠标通过TC识别映射到虚拟机,那么问题就得到解决了,因此最终的解决办法是找到手写笔与鼠标的不同参数,现场注意到手写笔的特征参数里,vid为5543 pid为0003,最终修改配置如下后问题得到解决。

ALLOW: vid=0B57 pid=8021  # Hanwang

ALLOW: vid=5543 pid=0003  # PowerPen

DENY:  class=03 subclass=01 prot=01 # HID Boot keyboards

DENY:  class=03 subclass=01 prot=02 # HID Boot mice

注意:ALLOW: vid=5543 pid=0003必须放在DENY:  命令的前面,TC查询时会按照脚本顺序的优先级来查询。

2、通过执行脚本,解决“断开”按钮消失和手写全屏识别问题


你可能感兴趣的:(计算机,鼠标键盘,管理工具,控制面板,详细信息)