USBデバイスをネットワーク経由で共有できると、日常生活の多くの場面で非常に便利です。例えば、オフィス全体で使用するソフトウェアのライセンスドングルを持っている場合、頻繁な接続と取り外しによってドングルが破損する可能性があります。新しいライセンスを全員分購入する予算がない場合、代替方法を検討する必要があります。
Raspberry Piを使用して、USBデバイスをTCP/IP経由で共有できることをご存じですか?この方法を実現するためには、特別なソフトウェアが必要です。ここでは、有料の信頼性の高いアプリと、無料ですが不安定なオープンソースソリューションを比較し、それぞれの特徴を詳しく見ていきます。
dpkg -i [パッケージ]
apt-get install -f
rpm -i [パッケージ]
yum install [パッケージ]
これで完了です!
この手順を完了すると、インターネットに接続された任意のマシン(Linux、Windows、MacなどのOSを搭載)から共有デバイスにアクセスできるようになります。リモートマシンとの物理的な距離に関係なく利用可能です。LinuxマシンでUSB Network Gateを起動する際にカーネルモジュールをロードする必要もありません。また、このアプリはVMware、VMware ESX Server、Citrix XenServer、Microsoft Hyper-Vなどの仮想マシンでも使用できます。この方法は、すべてのタイプやブランドのUSBデバイスに対応しており、デバイスの共有や解除はシステムの再起動を必要とせず、即座に反映されます。
USB Network Gateで確立されたすべての接続は、先進的な2048ビットSSL暗号化により完全に保護されます。さらに、追加の保護として認証パスワードを設定することもできます。そのため、データが不正な手に渡る心配は一切ありません。
USB Network Gateを選ぶ最大の利点は、Raspberry Piを恒久的にUSB-over-IPサーバーにする必要がないことです。このソリューションは、任意のマシンからUSBデバイスを共有するのに適したマルチプラットフォーム対応です。また、共有できるデバイスの数に制限はありません。
この方法は基本的にUbuntuでUSBをIP経由で共有するのと同じですが、今回は別のアプリを使用します。このアプリはLinuxベースのオープンソースソフトウェアであり、まだ開発段階にあるため、設定が技術的に難しい場合があります。初めての試行で失敗しても落ち込まないように準備しておいてください。
事前に注意すべき重要なポイント:
sudo apt install usbip
sudo modprobe usbip_host
echo 'usbip_host' >> /etc/modules
lsusb
usbip list -p -l
sudo usbip bind --busid=N
usbipd
vi /lib/systemd/system/usbipd.service
[Unit]
Description=usbip host daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/usbipd -D
ExecStartPost=/bin/sh -c "/usr/sbin/usbip bind --$(/usr/sbin/usbip list -p -l | grep '#usbid=N#' | cut '-d#' -f1)"
ExecStop=/bin/sh -c "/usr/sbin/usbip unbind --$(/usr/sbin/usbip list -p -l | grep '#usbid=N#' | cut '-d#' -f1); killall usbipd"
[Install]
WantedBy=multi-user.target
sudo systemctl --system daemon-reload
sudo systemctl enable usbipd.service
sudo systemctl start usbipd.service
注記: アプリのWindows向けクライアント版はベータ版であり、Windows 10には対応していません。そのため、ここでは考慮しません。
sudo -s
apt-get install linux-tools-generic -y
modprobe vhci-hcd
echo 'vhci-hcd' >> /etc/modules
sudo usbip attach -r 0.0.0.0
または、systemdサービスを作成する方法もあります:
vi /lib/systemd/system/usbip.service
定義:
[Unit]
Description=usbip client
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c "/usr/lib/linux-tools/$(uname -r)/usbip attach -r 0.0.0.0 -b $(/usr/lib/linux-tools/$(uname -r)/usbip list -r 0.0.0.0 | grep 'N' | cut -d: -f1)"
ExecStop=/bin/sh -c "/usr/lib/linux-tools/$(uname -r)/usbip detach --port=$(/usr/lib/linux-tools/$(uname -r)/usbip port | grep '<Port in Use>' | sed -E 's/^Port ([0-9][0-9]).*/\1/')"
[Install]
WantedBy=multi-user.target
重要:
Nを実際のデバイスのUSB ID番号に、0.0.0.0をRaspberry PiのIPアドレスに置き換えてください。
サービスの保存と開始:
上記の定義を保存した後、以下のコマンドを実行してサービスを開始します:
sudo systemctl --system daemon-reload
sudo systemctl enable usbip.service
sudo systemctl start usbip.service
クライアントマシンから共有デバイスにアクセスできない場合は、サーバーセットアップガイドのステップ1からやり直してください。
重要事項: 共有中はRaspberry PiからUSBデバイスを取り外さないでください。 デバイスを安全に取り外すには、最初にRaspberry Piの電源をオフにしてからデバイスを取り外してください。これにより、データ損失やデバイスの損傷を防ぐことができます。
距離制限
|
距離制限
|
制限なし
|
LAN内の範囲のみ
|
対応プラットフォーム:
|
対応プラットフォーム:
|
|
|
サーバープラットフォーム
|
サーバープラットフォーム
|
✓ Windows
✓ Linux
✓ macOS
✓ Android |
✓ Linux |
クライアントプラットフォーム
|
クライアントプラットフォーム
|
✓ Windows
✓ Linux
✓ macOS |
✓ Windows(ベータ版)
✓ Linux |
トラフィック最適化
|
トラフィック最適化
|
暗号化(オプション) |
N/A |
セキュリティ
|
セキュリティ
|
パスワード保護 |
N/A |
暗号化
|
暗号化
|
2048ビットSSL |
N/A |
無線接続
|
無線接続
|
対応 |
N/A |
アクティビティログ
|
アクティビティログ
|
対応 |
N/A |
どの方法を選ぶにしても、「無料オプションが必ずしも最良とは限らない」ことを覚えておいてください。最初は節約できるように見えても、後になってコストがかさむ場合があります。10回中9回は、簡単に使えて問題を引き起こさない、信頼性の高いアプリに投資する方が、運用全体を危険にさらし、無料ツールの次の不具合を待ち受けるよりも遥かに有益です。