USB távolról - USB eszköz megosztása USBIP-vel

írta: hcl, 3 éve

Többféle megoldás létezik arra az esetre, ha egy távoli gép USB portjait szeretnénk helyben használni. Az usbip az egyik, nem a legegyszerűbb, de használható módszer. Elég sokat kellett túrni, de miután kiismeri az ember a(z Ubuntu/Debian verzió) hülyeségeit, tök használhatónak látszott.

Ubuntu és Debian rendszereken a telepítés módja megegyezik : apt install usbip
Az első gáncs az, hogy valamelyik Linux-tools-common csomagban is benne van az usbip, de az kb. mindenben is különbözik, nekem nem működött.
Suse-n és Centos alapú disztrókon is létezik a csomag, de nekem Suse-n nem működött, Centos-t meg nem tudtam telepíteni (sehogy nem tudtam bebootolni a telepítőt a tesztgépen :DDD), szóval azon nem néztem.

Azon a gépen, amiről megosztunk egy USB eszközt, be kell tölteni az usbip moduljait - én mind a két gépen kiadtam ezeket, az a biztos. (Elvileg a kliensen a vhci-hcd épül az usbip-core-ra, a szerveren meg az usbip-host.)

modprobe usbip-core
modprobe usbip-host
modprobe usbip-vduc
modprobe vhci-hcd

(Aztán ha már biztos jó, akkor be is lehet vágni a /etc/modules-ba)

Az usbipd démon futtatásához a szerveren kell egy usbipd -D parancs. Ez fogja a háttérben megosztani az usbip -vel kiexportált eszközöket.

Ha meg akarunk osztani valamit, akkor :
- az lsusb kimenetéből kiderülnek a bus és device id-k
- az usbip list -l -ből is, ez a helyi eszközöket listázza
- usbip bind -b busid-devid -adott busid-devid azonosítójú cuccot csatolja magához
- usbip detach -pX -a vhci (virtuális USB vezérlő) vezérlő adott X=0....akármennyi portján levő eszközt lerúgja (ha az meg volt osztva, akkor a távoli fél így járt :DDD )

Ha fel szeretnénk húzni valamit egy távoli gépről, akkor :
- usbip list -r távoli.gép.ip.címe - adott IP-jű gépről lelistázza a megosztott eszközöket
- usbip attach -r távoli.gép.ip.címe -b busid-devid -a bus id, dev id a list -r listájából derül ki
- usbip detach -p 0 -a vhci 0. porton ülő eszköz kihúzása... a vhci port nem azonos az usb busz id-val... :O

Nem triviális, pláne nem volt egyszerű összeszedni, de ha egyszer működik, akkor az már fog is. A modulokat és a démonként indítást meg könnyű automatizálni. (És pont az ennek a postnak a lényege, hogy másnak ne kelljen vele szívni. :) )

A gyakorlatban ez így néz ki :

A gépen, amiről megosztjuk az eszközt, kapcsolódik az usbip az eszközre (az 1-1.6-os bus id-jű kamerát adtam át) :

A gépen, ami a megosztott eszközt szeretnénk használni, lehet kapcsolódni a távoli USB-kre - a bus ID azonos a szerver bus id-jával. Meg is jelent a T430-am kamerája az "acer" nevű T400-on :D

...majd ha már nem kell, lekapcsolódni.

Ami viszont nekem nem ment : Windowson felhúzni a megosztott USB eszközöket. Létezik vhci-hcd driver Windowsra, nem is egy, csak egyik régebbi, mint a másik. Teszt cert is van hozzájuk, de a Driver Signature Enforcement kikapcsolása után sem működtek.

Windowson meg is találja a távoli USB-t, de a virtuális hub nem működik :O

Igazából az usbip-s USB megosztás nem túl felhasználóbarát; olyankor jó, ha pl. egy hardverkulcsot, vagy olyan eszközt kell megosztani, ami nem kell egyszerre több embernek, de több gépről használatos. Így egy állandóan működő szerver-jellegű valamibe (akár Openwrt-s routerbe) dugva, és megosztva az USB eszközt, több gépen is használható lesz.