blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

USBをIPを通して使う

いきさつ

UVCカメラをIP上で使いたいな、と思ったわけですが、 sshでモニタリングするよりも、USBを手元のPCで認識する方がスマートな方法かと。 そこでusbipを使ってみます。

usbip

以下の2つをインストールすればOKみたい。

install

$ sudo apt-get install usbip usbip-source

setting

そして以下のコマンドを打ちます。

$ m-a prepare
$ m-a update
$ m-a a-i usbip-source

しかし、最後の行で失敗します。 これは、以前からバグとして報告されていますが、 kernelのバージョンごとに対応ができたりできてなかったりで、 Ubuntu12.10でも13.04でもダメでした。 もうちょっと解決方法調べてみます。

解決しました@2014/05/18

環境をUbuntuからDebian7.5に変えたところうまく行きました。 ホスト側もクライアント側もUbuntuではだめでした。

install

ホスト側もクライアント側も同じです。

$ sudo apt-get install usbip

host side

準備は以下の3行で終わります。

$ sudo modprobe usbip-core
$ sudo modprobe usbip-host
$ sudo usbip -D

以下のコマンドを打つと、ホスト側に接続されているusb機器が列挙されます。

$ sudo usbip list -l

以下が出力された結果。 usbハブとキーボードとwebカメラが認識されてます。

Local USB devices
=================
 - busid 1-1 (05e3:0606)
   Genesys Logic, Inc. : USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub (05e3:0606)
         1-1:1.0 -> hub

 - busid 1-1.1 (099a:0638)
   Zippy Technology Corp. : Sanwa Supply Inc. Small Keyboard (099a:0638)
         1-1.1:1.0 -> usbhid
         1-1.1:1.1 -> usbhid

 - busid 1-1.3 (046d:0825)
   Logitech, Inc. : Webcam C270 (046d:0825)
         1-1.3:1.0 -> uvcvideo
         1-1.3:1.1 -> uvcvideo
         1-1.3:1.2 -> snd-usb-audio
         1-1.3:1.3 -> snd-usb-audio

ここでwebカメラのbusidを確認し、webカメラを外部に公開します。

$ sudo usbip bind -b 1-1.3

これでホスト側の準備は完了です。 公開を停止したい場合はunbindすればOKです。

$ sudo usbip unbind -b 1-1.3

client side

準備は以下の2行で終わります。

$ sudo modprobe usbip-core
$ sudo modprobe vhci-hcd

以下のコマンドでホスト側のusbのbusidを確認します。

$ sudo usbip list -r host.local

以下が出力された結果。

Exportable USB devices
======================
 - beagle.local
      1-1.3: Logitech, Inc. : Webcam C270 (046d:0825)
           : /sys/devices/ocp.3/47400000.usb/musb-hdrc.1.auto/usb1/1-1/1-1.3
           : Miscellaneous Device / ? / Interface Association (ef/02/01)
           :  0 - Video / Video Control / unknown protocol (0e/01/00)
           :  1 - Video / Video Streaming / unknown protocol (0e/02/00)
           :  2 - Audio / Control Device / unknown protocol (01/01/00)
           :  3 - Audio / Streaming / unknown protocol (01/02/00)

そして確認したbusidを使ってローカルのUSBとして紐付けます。

$ sudo usbip -h host.local -b 1-1.3

これでクライアント側でホスト側のusb機器が使用できます。

参考URL