Spice Windows Client 利用 USBDk 实现USB重定向
2016.3.15 修改,紅色字體
1. 編譯環境
Fedora 19 64位,mingw32 和 mingw64
2. 相關源碼及工具
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/libusb/libusb
3. 編譯及測試
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
修改usbredir的相關源碼,去掉usbclerk的分支,直接走libusb
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 這個文件。
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"); #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重定向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C1见习工程师(一)
- 下一篇: 哈希函数的构造方法