打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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 
下载地址 http://www.spice-space.org/download.html 
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的,也可以自己把它去掉。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
windows和linux下的spice客户端使用方法
全球主流云桌面传输协议
干货|近20年Windows权限提升集合
windows下 Gitee(码云)使用
遠端遙控軟體介紹與安全強化 VNC
VNC源码研究(一)VNC简介
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服