Spice Windows Client 利用 USBDk 实现USB重定向

编译环境 Fedora 19 64位,mingw32 和 mingw64相关源码及工具 2.1 spice-gtk-0.29,virt-viewer-2.0,UsbDk_1.0.6_x64.msi,UsbDk_1.0.6_x86.msi 下载地址 2.2 libusb 下载地址 https://github.com/dmitryfleytman/libusb/tree/usbdk-backend-v3

编译及测试 3.1 32位 3.1.1 编译 libusb,因为现有的libusb的release版本还不支持usbdk,,安装官方的说法libusb 21 才会加入,所以我们现在用的是github上的一个测试版本 编译参数 mingw32-configure –enable-usbdk –enable-debug-log,最好加上debug参数,如果出错了可以方便查看。 make make install 3.1.2 编译 spice-gtk-0.29 mingw32-configure –with-gtk=2.0 –enable-usbredir=yes –with-sasl=no –enable-vala make make install cd spice-common/spice-protocol make install 3.1.3 编译 virt-viewer-2.0 mingw32-configure –with-gtk=2.0 –with-spice-gtk make make install 3.1.4 测试 virt-viewer 本身提供了一个nsis的打包脚本,可以直接打成一个Windows下的安装包,依赖可能不是很全,自己去编译环境下找就行了。 我的测试环境是win7 32位,安装完客户端后,安装usbdk x86的安装包,然后把UsbDkHelper.dll拷贝到remote-viewer.exe所在的目录 运行remote-viewer.exe,建议从cmd命令行下运行并且加入 –spice-debug 参数,如果崩溃或者报错的话查看命令行下的输出日志,排查错误。 我遇到的问题有两个,1. 加载UsbDkHelper.dll出错,检查下该dll是否正确 2. remote-viewer 直接崩溃,查看Windows提供的详细信息发现是ntdll.dll(我记得是叫这个名字)崩溃了,如果是这个问题的话检查一下有没有安装 mingw32-nss 这个包,有的话把它卸载掉重新编译一下spice就行了。如果还有其他的问题参考log和Windows提供的错误信息解决就行了。 至此,remote-viewer.exe已经成功运行了,插入U盘测试是否可以透传。我的测试结果还是不错的,相比之前用winUSB的驱动usbdk要给力多了,驱动转换非常快,而且稳定性也有了很大的提高。 顺便提一下,现在的spice已经加入了Windows下USB设备名称的识别功能,有兴趣的可以看一下 usbutil.c 这个文件。

3.2 64 位 编译方法跟32位的一样,需要注意的问题是如果你的glib版本是 2.36 的话,在64位的环境下运行会有个bug,运行remote-viewer.exe时会弹出一个窗口报错,Error in LIBGIO~1.DLL Missing entry: g_win32_run_session_bus@16

修改方法: 1. 升级glib, 应该是比这个版本新的就可以 2. 修改源码重新编译,文件 gio/gdbusaddress.c ,函数 get_session_address_dbus_launch 修改内容如下wcscpy (args, L”\””);wcscat (args, rundll_path);wcscat (args, L”\” “);wcscat (args, gio_path_short);#if defined(_WIN64) || defined(_M_X64) || defined(_M_AMD64)wcscat (args, L”,g_win32_run_session_bus”);#elif defined (_MSC_VER)wcscat (args, L”,_g_win32_run_session_bus@16″);#elsewcscat (args, L”,g_win32_run_session_bus@16″);#endifres = CreateProcessW (rundll_path, args,0, 0, FALSE,NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW | DETACHED_PROCESS,0, NULL /* TODO: Should be root */,&si, &pi);

注: spice-gtk-0.29现在默认还是需要usbclerk的,也可以自己把它去掉。

每一发奋努力的背后,必有加倍的赏赐。

Spice Windows Client 利用 USBDk 实现USB重定向

相关文章:

你感兴趣的文章:

标签云: