加载中…
正文 字体大小:

Spice-gtk Windows Client USB重定向

(2016-01-27 15:06:28)
标签:

it

分类: 云计算

Spice-gtk Windows Client USB重定向 1

、 主要组件介绍 1

1Spice-gtk : 1

2virt-viewer 2

3USBDk 2

、 组件编译安装 2

1搭建编译环境 2

2相关源码及工具 3

3编译及安装(以64位为例) 3

4编译安装libusb 3

5编译安装 spice-gtk-0.28 3

6编译安装 virt-viewer-2.0 3

7打包 4

8设置虚拟机端 4

9测试 4

、 问题: 5

1Usb 设备名字相同,无法区分 5

2remote-viewer.exe 64位的环境下运行bug 5

、 spice-gtk-0.29需要usbclerk 6

1编译 libwdi 6

2编译usbclerk 7

3安装 8

、 体验和想法 9

1体验 9

 

Spice-gtk Windows Client USB重定向

一、 主要组件介绍 

1. Spice-gtk :

spice-gtk is GTK+2 and GTK+3 SPICE widget. It features glib-based objects for SPICE protocol parsing and gtk widget for embedding the SPICE display into other applications such as virt-manager. 

下载地址:http://www.spice-space.org/download/gtk/ 或者github

2. virt-viewer

While spice-gtk comes with demo client application called spicy, using virt-viewer (which embeds spice-gtk widget) is highly recommended.

下载地址:https://fedorahosted.org/released/virt-viewer/ 或者github

3. USBDk 

 

USB Development Kit is set of software modules meant to provide Windows user

mode applications with direct and exclusive access to USB devices. Basic principle of UsbDk

operation is detaching given USB device from Windows PNP manager and device drivers stack

and providing user mode applications with API for USB-specific operations on the device.

UsbDk supports all Windows versions starting from XP, i.e. XP, Vista, 7, 8, 8.1, 2003,

2008, 2008R2, 2012, 2012R2, both 32 and 64 bits architectures and as far as we concerned

should support future versions of Windows without architectural changes.

下载地址:http://www.spice-space.org/download/windows/usbdk

 

二、 组件编译安装

 

 

 

spice gtk 0.28

 

编译 libusb-usbdk-backend-v3

编译 spice gtk 0.28

编译 virt-viewer-2.0

安装 usbdk

 

1. 搭建编译环境 

Fedora 19 64位,mingw32 和 mingw64

    安装Fedora 19,安装之后执行 yum install *mingw*,此命令安装所有的mingw需要的库

 

2. 相关源码及工具 

2.1 spice-gtk-0.28virt-viewer-2.0UsbDk_1.0.6_x64.msiUsbDk_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. 编译及安装(以64位为例)

 

4. 编译安装libusb

因为现有的libusbrelease版本还不支持usbdk,安装官方的说法libusb 21 才会加入,所以我们现在用的是github上的一个测试版本 

编译参数 mingw32-configure enable-usbdk enable-debug-log,最好加上debug参数,如果出错了可以方便查看。 

mingw64-configure --enable-usbdk --enable-debug-log && mingw64-make && mingw64-make install

默认相应的文件安装到/usr/x86_64-w64-mingw32/sys-root/mingw 

 

5. 编译安装 spice-gtk-0.28

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

mingw64-make clean

mingw64-make

mingw64-make install

cd spice-common/spice-protocol 

mingw64-make install

6. 编译安装 virt-viewer-2.0 

mingw64-configure --with-gtk=3.0 --with-spice-gtk --enable-shared=yes

mingw64-make clean

mingw64-make

mingw64-make install

 

7. 打包

经过以上4-6步编译,所以的文件都被安装到/usr/x86_64-w64-mingw32/sys-root/mingw,可对此目录直接拷贝出来,执行remote-viver(这样会比较大,有很多无用的库也在)

virt-viewer 本身提供了一个nsis的打包脚本,文件virt-viewer-2.0/data/virt-viewer.nsis, 执行makensis virt-viewer.nsis可以直接打成一个Windows下的安装包,执行过程依赖可能不是很全,需要自己在编译环境下找到或者是直接下载包含库的mingw,又或者自己下源码编译出对应的库,并且修改virt-viewer.nsisfile路径。

8. 设置虚拟机端

Using libvirt

You need to add the needed USB controllers to the libvirt XML (make sure there is no pre-existing USB controller in your virtual machine XML before doing this), as well as one Spice USB redirection channel per device you want to redirect simultaneously.

 type='usb' index='0' model='ich9-ehci1'/> type='usb' index='0' model='ich9-uhci1'>

     startport='0'/> type='usb' index='0' model='ich9-uhci2'>

     startport='2'/> type='usb' index='0' model='ich9-uhci3'>

     startport='4'/> bus='usb' type='spicevmc'/> bus='usb' type='spicevmc'/> bus='usb' type='spicevmc'/> bus='usb' type='spicevmc'/>

9. 测试 

我的测试环境是win7 64位,直接拷贝出/usr/x86_64-w64-mingw32/sys-root/mingw

安装usbdk xUsbDk_1.0.6_x64.msi86的安装包,(然后把UsbDkHelper.dll拷贝到remote-viewer.exe所在的目录)

运行remote-viewer.exe,建议从cmd命令行下运行并且加入 spice-debug 参数,如果崩溃或者报错的话查看命令行下的输出日志,排查错误。 

 

 

三、 问题:

1. Usb 设备名字相同,无法区分 

选择usb重定向时,所有的usb设备都显示成一个名字,这个问题在新版中据说已经解决但实际测试0.29没有解决,从usbdk提供的api上来看,可以却分名字,应该是gtk显示的时候出现的问题,修改难度不大

Spice-gtk <wbr>Windows <wbr>Client <wbr>USB重定向

 

2. remote-viewer.exe 64位的环境下运行bug

需要注意的问题是如果你的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");

#else

wcscat (args, L",g_win32_run_session_bus@16");

#endif

 

res CreateProcessW (rundll_path, args,

                    0, 0, FALSE,

                    NORMAL_PRIORITY_CLASS CREATE_NO_WINDOW DETACHED_PROCESS,

                    0, NULL ,

                    &si, &pi);

 

 

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

 

四、 spice-gtk-0.29需要usbclerk

 

 

1. 编译 libwdi

1获得源码

 

http://sourceforge.net/projects/libwdi/

下载libwdi-1.2.2.tar.gz

 

2配置环境

 

安装WDK,我用的是7.0

 

下载编译时需要的libusb-win32 和 libusbK 的二进制文件,并解压

 

http://sourceforge.net/projects/libusbk/files/libusbK-beta/3.0.5.16/libusbK-3.0.5.16-bin.7z/download

http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/1.2.6.0/

 

然后,修改libwdi-1.2.2\msvc\config.h文件,配置wdk libusb-win32  libusbK路径

 

 

#ifndef DDK_DIR

#define DDK_DIR "C:/WinDDK/7600.16385.1" #配置wdk安装路径

#endif

 

 

#ifndef LIBUSB0_DIR

#define LIBUSB0_DIR "C:\\Users\\js\\Desktop\\rpm\\libusb-win32-bin-1.2.6.0" #配置路径,注意路径必须是转义,即双斜线

#endif

 

 

#ifndef LIBUSBK_DIR

#define LIBUSBK_DIR "C:\\Users\\js\\Desktop\\rpm\\libusbK-3.0.5.16-bin\\bin" #配置路径,注意路径必须是转义,即双斜线

#endif

 

 

#ifndef USER_DIR

// #define USER_DIR "C:/signed-driver"

#endif

 

 

#define WDF_VER 1009   #版本

 

分别修改为自己的路径,否则会无法生成embedded.h文件,然后报错  libwdi-1.2.2\libwdi\libwdi.c(39) error C1083: Cannot open include file: 'embedded.h': No such file or directory

 

3编译

开始--所有程序--windows Drivers kits--WDK 7600.16385.1--build environment--windows xp--x86 checked build environment 窗口CD 进入libwdi目录

执行 ddk_build.cmd,然后就得到libwdi.lib文件了,如果想要dll文件可以在执行ddk_build.cmd时传入参数 DDL,不区分大小写。

Usbclerk编译时就需要dll

 

 

 

 

2. 编译usbclerk

 

编译工具 VS2008或 VS2010

 

编译步骤如下:

 

1.        安装VS2008VS2010,这个不细说;

 

2.        下载usbclerk源码

 

从 http://cgit.freedesktop.org/~agilboa/usbclerk/commit/?id=12e2d63604d689918c26baeeff78bd51ff46b924

 

下载最新的源码压缩包usbclerk-12e2d63604d689918c26baeeff78bd51ff46b924.zip

 

并解压,比如到:D:\Workroom\practise\open-source\usbclerk

 

设置libwdi库路径

3. 设置编译环境变量

VS2010工程中右键--添加--现有项,如果编译时,添加项不识别,解决方法如下:

将现有项的路径配置到项目中,步骤如下:

项目、属性、C/C++、附加包含目录:填写附加头文件所在目录 分号间隔多项

项目、属性、链接器、附加库目录:填写附加依赖库所在目录 分号间隔多项

项目、属性、链接器(点前面的+展开)、输入、附加依赖项:填写附加依赖库的名字.lib 空格间隔多项

 

4. 源码有问题需要修改:

C:\Users\js\Desktop\rpm\win32-usbclerk-master\usbclerk.cpp

    snprintf(infname, sizeof(infname), "usb_device_x_x.inf", vid, pid);

提示snprintf,找不到Error 12 error C3861: 'snprintf': identifier not found c:\users\js\desktop\rpm\win32-usbclerk-master\usbclerk.cpp 467 1 usbclerk

    修改为_snprintf(infname, sizeof(infname), "usb_device_x_x.inf", vid, pid);

 

 

注意:如果编译有问题,就仔细检查是否libwdi还没有编译通过,即相应的libwdi.lib是否在usbclerk链接的目录下存在,或调整 VS Project Properties\ConfigurationProperties\Linker\General\Additional Library Directories\ 下的库文件路径。

 

5.编译

 

a)        启动VS,然后选择打开usbclerk的解决方案文件

 

注:如果是2010VS,会要求转换,因为原来的是VS2008的格式,按照提示转换就是;

 

b)        选择工程,右键“Build Solution

 

正常情况下编译应该没有问题,编译完后的可执行文件在 DebugRelease目录下找。

 

3. 安装

 

a)        把编译好的libwdi.dll放到操作系统的系统目录下,如:C:\Windows\System32 C:\Windows\SysWOW64 等目录下(根据操作系统和位数不同略有不同);

 

b)        在命令行下执行 usbclerk.exe install

 

如无库问题,安装成功,在系统服务里可以看到usbclerk 服务;

 

c)        在命令行下启动执行 sc start usbclerk

 

直接在命令行下手动启动也可以,设成自动启动更方便。

 

五、 体验和想法

1. 体验

1) Spice-gtk 图形化设计比较好

弹出的页面和主页面是一起的,最小化都最小化,最大化都最大化,并且不关掉弹出的窗口不能对主页面操作

 

2) 数据拷贝速度2m/s

 

0

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有