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 ), 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 )
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...
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
...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
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.