现在的位置: 首页 > 综合 > 正文

mingw编译virt viewer(spice windows client,支持usb重定向)

2014年09月05日 ⁄ 综合 ⁄ 共 2798字 ⁄ 字号 评论关闭
转   mingw编译virt
viewer(spice windows client,支持usb重定向)
分类: 虚拟化 2087人阅读 评论(28) 收藏 举报

原创作品,转载请标明出处 http://blog.csdn.net/zhangzxing/article/details/8994655 

 

更新(2013.07.09):实现windows下usb重定向的方法不止有一种,我说的只是其中一个方法,不要因此影响了大家的思路,还有一种方法,参考这位同学的博文

http://blog.csdn.net/terence427/article/details/9144567 

最近也在捣鼓usbclerk,建议使用最新的spice-gtk和virt-viewer有问题大家一起探讨,有更好的方法欢迎分享! 

 

1.环境

    fedora 17;

    mingw64;

    spice-gtk0.14,virt viewer 0.5.3,usbredir 0.5.2

2.编译

    安装mingw64,

    最简单的方法 yum install mingw64-*  --skip-broken 跳过冲突

    2.1编译 usbredir-0.5.2

        这个源码是我从mingw-usbredir-0.5.2-2.fc19.src.rpm这个rpm包里解出来的,因为直接下usbredir的源码包编译的时候有问题,本人太菜搞不定就拿现成的来用了。

        mingw64-configure

        mingw64-make

        mingw64-make install

    2.2编译 spice-gtk-0.14

        mingw64-configure --without-sasl --with-gtk=2.0 --with-audio=gstreamer --without-python --enable-usbredir=yes --enable-smartcard=no

        可能会在检查usbredirect模块式报错,解决方法用spice-gtk-0.19版本的configure文件来替换0.14版本的configure文件,然后再执行一遍上边的指令,应该能成功生成Makefile文件,(那为啥不直接用0.19版本的呢,我用0.19的编出来花屏,可能最新的不太稳定) 然后

        mingw64-make

        mingw64-make install

        还有几个需要注意的问题:1.spice-gtk-0.14/spice-common/spice_codegen.py 添加可执行权限。2.在spice-gtk-0.14/spice-common/spice-protocol下需单独执行mingw64-make install,因为有可能这个文件夹下的编译结果没安装导致在编译virt viewer是找不到包 spice-protocol。

     2.3.编译 virt viewer

        mingw64-configure  --with-gtk=2.0 --with-spice-gtk

        mingw64-make

        mingw64-make install

3. 运行virt viewer

    我的操作系统是 windows 7 64 位

    3.1 链接

       

    3.2 链接成功

 

    3.3 插入U盘,应该会报错

    3.4 借助一个工具转换驱动程序 zadig

 

    选中你的U盘把他的驱动转成 WinUSB类型的,然后再到虚拟机的选择这个设备

    这个地方有点蛋疼,名字都一样,我这第一个是我的U盘,下变那俩是鼠标键盘,选中第一个然后close稍等一会,这个虚拟机就会发现一个存储设备了,原因是这样,没有对windows下usb设备处理的相应代码,现在是这样的:

 

  1. #if __linux__  
  2.     *manufacturer = spice_usbutil_get_sysfs_attribute(bus, address, "manufacturer");  
  3.     *product = spice_usbutil_get_sysfs_attribute(bus, address, "product");  
  4. #endif  
  5.   
  6.   
  7.     if ((!*manufacturer || !*product) &&  
  8.         spice_usbutil_load_usbids()) {  
  9.   
  10.         for (i = 0; i < usbids_vendor_count; i++) {  
  11.             if ((int)usbids_vendor_info[i].vendor_id != vendor_id)  
  12.                 continue;  
  13.   
  14.             if (!*manufacturer && usbids_vendor_info[i].name[0])  
  15.                 *manufacturer = g_strdup(usbids_vendor_info[i].name);  
  16.   
  17.             product_info = usbids_vendor_info[i].product_info;  
  18.             for (j = 0; j < usbids_vendor_info[i].product_count; j++) {  
  19.                 if ((int)product_info[j].product_id != product_id)  
  20.                     continue;  
  21.   
  22.                 if (!*product && product_info[j].name[0])  
  23.                     *product = g_strdup(product_info[j].name);  
  24.   
  25.                 break;  
  26.             }  
  27.             break;  
  28.         }  
  29.     }  
  30.   
  31.     if (!*manufacturer)  
  32.         *manufacturer = g_strdup(_("USB"));  
  33.     if (!*product)  
  34.         *product = g_strdup(_("Device"));  

所以,要改代码喽

 

 

 

抱歉!评论已关闭.