Skip to content

RemoteUSB

ドキュメント · サイトの開発・公開手順(英語)

RemoteUSB — Windows向けUSB/IPクライアント・サーバー

English · 日本語 · 한국어 · 简体中文

Electron・React・TypeScript・Ant Designで構築した、Windows 11風UIのWindows向けUSB/IPクライアントです。

現在はMVPです。ドライバー不要のデモモードと、usbip-win2 0.9.8.0 を利用する実バックエンドを用意しています。実ドライバーの導入とUSB機器での接続は、別途実機検証が必要です。

主な機能

  • デバイス一覧・検索・接続状態・接続/切断・診断情報。
  • サーバーの追加・編集・削除・有効/無効切り替え・接続テスト。
  • デバイス単位の自動再接続。指数バックオフの待機時間は最大5分。
  • 英語・日本語・韓国語・簡体字中国語。トレイ・通知も対応し、OS言語への追従も可能。
  • ライト・ダーク・システムテーマ。Windows 11 build 22621以降ではネイティブMica。
  • トレイ常駐・通知・設定/履歴/ウィンドウ位置とサイズの保存。
  • ドライバーなしで開発・デモができるMockバックエンド。

スクリーンショット

実際のElectronアプリをMockバックエンドで起動して取得した画面です。

ライトテーマダークテーマ

動作環境

  • Windows 11 x64。
  • 開発環境:Node.js 24 LTS、pnpm 10.32.1。
  • 実接続:導入済みのusbip-win2クライアント・DLL・ドライバーと、別途構成したUSB/IPサーバー。
  • デモモードにはドライバー・管理者権限・USB機器は不要です。

インストール

ソースからWindowsインストーラーを生成します。

powershell
pnpm install
pnpm package

NSISインストーラーを release/RemoteUSB-Setup-0.1.2.exe に生成します。RemoteUSBのリリースビルドは既定では未署名です。

公式USBip 0.9.8.0 x64セットアップを未改変で同梱しています。インストール中に導入を選ぶと、SHA-256とAuthenticode署名を確認して公式セットアップを開きます。管理者権限・コンポーネント選択・再起動の案内に従ってください。サイレントインストールではUSBipセットアップを起動しません。

USBipの導入時はUSBハブが再起動し、USB機器が一時的に停止する場合があります。USBストレージへの転送や通話を終えてから実行してください。 RemoteUSBはSecure Bootやテスト署名を変更しません。USBipは独立したアプリとして導入され、RemoteUSBのアンインストールでは削除されません。

EXE・インストーラー・トレイにはRemoteUSBアイコンを使用し、インストーラーが通知名をRemoteUSBとして登録します。Electron経由の開発起動では通知元の表示が異なる場合があります。

開発とデモモード

powershell
npm.cmd install -g pnpm@10.32.1
pnpm install
pnpm dev:mock

実バックエンドは pnpm dev で起動します。PowerShellがスクリプトをブロックする場合は pnpm.cmdnpm.cmd を使えます。実行ポリシーの変更は不要です。

デモではSerial・Arduino・Debug Probe・Smart Card・Printer・Storageのサンプルを操作できます。接続/切断に750 msの遅延があり、設定のデモエラー確率で障害を再現できます。

デモ設定は demo.json、実設定は settings.json に保存します。実バックエンドに戻すには --mockREMOTEUSB_BACKEND=mock を外して再起動してください。ビルド済みアプリは pnpm exec electron . --mock でも起動できます。

USB/IPの設定

  1. RemoteUSBのインストール時、または設定/アプリ情報の同梱ツールからUSBipセットアップを実行します。
  2. 実行ファイルパスは空欄で Program Files/USBip/usbip.exe、次に PATH を検索します。独自の導入先は絶対パスを指定し、DLLをCLIと同じ場所に保持してください。
  3. USB/IPサーバーでデバイスを共有し、RemoteUSBにホスト名とポートを追加します。既定ポートは3240です。
  4. 接続テスト後にデバイス一覧を更新し、接続します。

usbip-win2はWindowsクライアントです。旧cezanne版・usbipd.exeattacher.exe は同梱しません。CLIのTCPポート指定範囲は1024–65535です。

pnpm vendor:fetch で固定した配布物を再取得し、pnpm vendor:verify でハッシュを検証します。同梱ガイドマニフェストバックエンドの詳細を参照してください。

テストとパッケージ作成

powershell
pnpm lint
pnpm typecheck
pnpm test
pnpm build
pnpm test:e2e
pnpm package

単体テストは解析・入力検証・エラー・永続化・サービス・プロセス制限・i18n・React UIを確認します。Electron E2EはMockでサーバー操作・接続・4言語・テーマ保存・125/150/200%表示を確認します。E2Eにはデスクトップセッションが必要です。

Windows CIでlint・型チェック・テスト・ビルド・E2Eを実行します。これらの成功だけでは実USB機器の互換性は保証しません。

GitHub Release

Releaseワークフローは次の両方に対応します。

  • 手動実行: Actions → Release → Run workflowで対象ブランチを選び、package.json と一致するタグ(例:v0.1.2)を入力します。検証後、テストしたコミットにタグを作成してReleaseを公開します。
  • タグのpush: バージョンが一致するタグをpushすると、そのコミットをビルドして公開します。

インストーラー・SHA-256一覧・usbip-win2ソース・ライセンスを添付します。バージョン不一致・別コミットの既存タグ・既存Releaseの上書きは拒否します。リポジトリでActionsを有効にしてください。書き込み権限は公開ジョブだけに付与します。

制限事項

  • 実ドライバーの導入、実機の接続/切断、ドライバー更新・削除は対象環境での確認が必要です。
  • 現在のアプリセッションで開始した接続だけを管理します。ポートと接続先を照合しますが、外部CLIとの同時操作やクラッシュ後の引き継ぎは未対応です。
  • COM/PnP照合とカーネルドライバー署名の分類は未実装です。
  • 自動再接続にはアプリの継続動作が必要です。ログイン時の自動起動はインストール版で反映します。
  • デバイス種別の表示は互換性を保証しません。Webcam・Audio・Capture・Hub・Storageの実動作は未検証です。
  • ネイティブ通知・アクセシビリティ設定・Micaは対象Windows環境で確認が必要です。

トラブルシューティング

症状確認事項
USBサポートの設定が必要USBip導入、CLIパス、DLL、UDEドライバーを確認
サーバーがオフラインアドレス・ポート・ファイアウォール・共有状態を確認して更新
接続失敗他PCの使用状況、物理接続、ドライバー権限を確認し、詳細を表示
Electronが「bad option」を表示起動環境の ELECTRON_RUN_AS_NODE を解除
設定ファイルの破損元ファイルを .invalid-* に保存し、既定値で起動

設定とログはElectronの app.getPath('userData') 配下に保存します。REMOTEUSB_DATA_DIR でテスト用ディレクトリを指定できます。

構成とセキュリティ

  • apps/desktop/src/main:ウィンドウ・トレイ・IPC・サービス・保存・ログ。
  • apps/desktop/src/preload:サンドボックス化したAPIブリッジ。
  • apps/desktop/src/renderer:React UI。
  • packages/corepackages/sharedpackages/usb-backend:モデル・IPC/i18n・実/Mockバックエンド。
  • testsscriptsvendor:検証・パッケージ補助・同梱物。

詳細は設計資料を参照してください。context isolationとsandboxを有効にし、Node integrationを無効化しています。IPCを検証し、外部リンクは許可リストで制限します。CLIはshellなしの execFile、検証済み引数、既定10秒のタイムアウト、1 MBの出力上限で実行します。USB/IPは信頼するLANやVPNで利用してください。

ライセンス

RemoteUSB本体はMITです。usbip-win2はBSD-2-Clauseで、著作権表示・ライセンス・未改変インストーラー・対応ソースを同梱します。ソースコピーの公開開発用署名鍵は除外しています。再配布時も同梱の表示を保持してください。第三者ソフトウェアの表示を参照してください。

ローカルUSBの共有

USB共有画面から、このPCのUSB機器を一覧表示し、usbipd-winで共有・共有解除できます。公式usbipd-win 5.3.0 MSIをvendor/usbipd-winに同梱しています。インストールウィザードのUSB機能選択で共有機能を選ぶか、USB共有画面から同梱ツールを開いて導入できます。クライアントとサーバーは順番に導入し、既定では両方を選択しています。不要な機能は選択を外せます。Program FilesまたはPATHから検出します。Bus ID・VID:PID・共有状態・接続中のクライアントを表示します。

共有操作は中央の確認ダイアログで確認し、その操作だけWindows UACで管理者権限を要求します。共有はRemoteUSB終了後も継続し、解除時はリモートクライアントが切断される場合があります。信頼できるネットワークでusbipdサービスとファイアウォールを設定してください。デモモードではPCを変更せず操作を再現します。実機とUAC操作は手動検証が必要です。実装メモも参照してください。

Released under the MIT License.