proxmox(VMWare)のWindowsでのUSBリダイレクトは、最新版のvert-viewerでは動かないので注意(2024/10/19時点)

# 概要

proxmox(VMWare)では、2024/10/19現在、SPICEを使うことでWindowsVMでのUSBリダイレクトも可能となっています。しかし、実際に手順通りに最新版をダウンロードして動かすと上手く行きません。解決方法が分かったので、まとめます。

# 最初に結論まとめ

## 解決方法1

virt-viewer(SPICE)について、最新版のv11を使わず、1つ前のv10を使いましょう。それだけで解決します。

[virt-manager download page](http://virt-manager.org/download)のVer.10.0-1.0 [https://releases.pagure.org/virt-viewer/virt-viewer-x64-10.0-1.0.msi](https://releases.pagure.org/virt-viewer/virt-viewer-x64-10.0-1.0.msi)を使うことで、上手く行きました。

## 解決方法2

もし最新版のv11を使いたい場合は、libusbだけを最新版に差し替えても解決します。

vert-viewerインストール先のlibusbを、[Ver.1.0.27](https://github.com/libusb/libusb/releases/tag/v1.0.27)へ差し替える事で、上手く行きました。

# 説明

proxmox上にWindowsのVMを作成して、Windowsからリモート接続して使う場合に、リモート接続元のPCに接続したUSBデバイスをVM上で使用できると便利です。（proxmox自体については他の情報を参照ください。知っている前提で書きます）

```plantuml

component "proxmox" as mox {
    component "Windows VM" as vm{
        component "USBポート" as usbremote
    }
}

component "物理PC" as pc {
    component "USBメモリ" as usb
    }

    pc -u-> vm : リモート接続
    usb --> usbremote : 接続して使いたい

```

こうした機能をUSBリダイレクト、あるいはUSBパススルーなどと呼びます。SPICEという方式で接続する事でこれを実現できます。Web上にはWindows非サポートといった情報もありますが、現時点ではWindowsでも使えるようになっていました。

しかし、ドキュメントの通りに構築しても、virt-viewer(SPICE)が異常終了してしまい、接続できません。最新版のvirt-viewerで報告のある問題で、未修正。旧バージョンを使えば解決する。という話のようです。正常動作が確認できたバージョンの組み合わせとセットアップ手順をまとめます。proxmox Ver.8.2.7で動作確認しました。

## リモート接続先（VM）側

VM側では、次の手順が必要です。順序はおそらく自由です。

1. 管理画面のVM設定から、ハードウェア-&gt;ディスプレイのVGAをSPICEに変更
2. [spice-guest-tools](https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe)をインストール
3. [https://www.spice-space.org/download.html](https://www.spice-space.org/download.html)から[usbredirect-x64-0.14.0.msi](https://www.spice-space.org/download/windows/usbredirect/usbredirect-x64-0.14.0.msi)をDLしてインストール
4. ハードウェア-&gt;追加で、USBデバイスの「spice」を追加

## リモート接続元（物理PC）側

USBメモリを接続する物理PC側では、下記の手順が必要です。順序はおそらく自由です。こちらは2つの解決方法があります。用途に合わせてどちらかを選択すれば良いです。順に説明します。

### 解決方法1, 1つ古いバージョンのvirt-viewerを使う場合

1. UsbDkをインストール [https://www.spice-space.org/download.html](https://www.spice-space.org/download.html)からVer.1.0.22 [UsbDk_1.0.22_x64.msi](https://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.22_x64.msi)をDLして使う
2. virt-viewerをインストール [virt-manager download page](http://virt-manager.org/download)からVer.10.0-1.0 [https://releases.pagure.org/virt-viewer/virt-viewer-x64-10.0-1.0.msi](https://releases.pagure.org/virt-viewer/virt-viewer-x64-10.0-1.0.msi)をDLして使う
   * 2024/9/30現在、最新版ではないので、「Previous releases」からDLする必要があります

#### virt-viewer旧バージョンを使うことの影響

[変更履歴](https://gitlab.com/virt-viewer/virt-viewer/-/raw/master/NEWS)を見ると、バグ修正とホットキー関連の変更がメインのようです。そのため影響は少なそうだと思いますが、この内容の影響が大きい場合は、少し手順が厄介になりますが、次のようにlibusbだけを差し替える手があります。

### 解決方法2, libusbだけを差し替える場合

1. UsbDkをインストール [https://www.spice-space.org/download.html](https://www.spice-space.org/download.html)からVer.1.0.22 [UsbDk_1.0.22_x64.msi](https://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.22_x64.msi)をDLして使う
2. virt-viewerをインストール [virt-manager download page](http://virt-manager.org/download)から最新版11.0-1.0 [https://releases.pagure.org/virt-viewer/virt-viewer-x64-11.0-1.0.msi](https://releases.pagure.org/virt-viewer/virt-viewer-x64-11.0-1.0.msi)をDLして使う
3. libusbのDLLだけを最新版へ差し替え
    1. [VC++ランタイム(x64)](https://aka.ms/vs/17/release/vc_redist.x64.exe)が入っていない場合は、インストールする
    1. libusb 最新版Ver.1.0.27 [https://github.com/libusb/libusb/releases/tag/v1.0.27](https://github.com/libusb/libusb/releases/tag/v1.0.27)のページを開く
    1. 7zファイル（[libusb-1.0.27.7z](https://github.com/libusb/libusb/releases/download/v1.0.27/libusb-1.0.27.7z)）をDLして解凍し、VS2022-x64版のDLLを見つける（libusb-1.0.27\VS2022\MS64\dll\libusb-1.0.dll）
    1. virt-viewerのインストール先（%ProgramFiles%\VirtViewer v11.0-256\bin）を開き、そのファイルを上書きする ※バージョンによってフォルダ名が変わりそうなので注意

# まとめ

ドキュメントには使えると書かれているのに、実際に最新版を入れると使えない、という罠がありました。思わず挫折してしまいそうになりますが、解決方法もありました。諦めずにproxmoxを使っていきましょう！