Reglulega kemur upp það verkefni að tengja USB tæki við ytri tölvu í gegnum staðarnet. Undir skurðinum er saga leitar minnar í þessa átt sett fram og leiðin að tilbúinni lausn byggða á opnu verkefni
Fyrsti hluti, sögulegur
Ef vélin er sýndarvél - allt er þetta auðvelt. Virkni USB-framsendingar frá hýsil í sýndarvél birtist í VMWare 4.1. En í mínu tilviki þurfti öryggislykillinn, auðþekkjanlegur sem WIBU-KEY, að vera tengdur á mismunandi tímum við mismunandi vélar, en ekki aðeins sýndarvélar.
Fyrsta leitarlotan í fjarlægri 2009 leiddi mig að járnstykki sem heitir
Kostir:
- stundum virkar það jafnvel
Gallar:
- virkar ekki alltaf. Segjum sem svo að Guardant Stealth II verndarlykillinn byrji ekki í gegnum hann og blóti með villunni „Ekki er hægt að ræsa tækið“.
- Stjórnunarhugbúnaður (lesa - upp og taka USB tæki upp) er ömurlegur til hins ýtrasta. Skipanalínurofar, sjálfvirkni - nei, hef ekki heyrt. Allt er bara í höndunum. Martröð.
- stýrihugbúnaðurinn leitar að járnstykkinu sjálfu í netinu með því að senda út, þannig að þetta virkar aðeins innan eins útvarpsnetshluta. Þú getur ekki tilgreint IP tölu járnstykkisins með höndunum. Járnstykki í öðru undirneti? Þá ertu í vandræðum.
- þróunaraðilar skoruðu á tækinu, það er gagnslaust að senda villutilkynningar.
Önnur umferð gerðist á tímum ekki svo fjarlægum og leiddi mig að efni greinarinnar -
Hluti tvö, server-linux
USB/IP miðlara sem deilir USB tækjum yfir net er aðeins hægt að setja upp á Linux-undirstaða stýrikerfi. Jæja, Linux er Linux, svo settu upp á Debian 8 sýndarvélinni í lágmarksstillingu, venjulegri handhreyfingu:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install usbip
Settist. Ennfremur bendir internetið til þess að þú þyrftir að hlaða niður usbip-einingunni, en - halló, fyrsta hrífan. Það er engin slík eining. Og allt vegna þess að flestar handbækur á netinu vísa til eldri útibúsins 0.1.x og í nýjustu 0.2.0 heita usbip einingarnar mismunandi nöfn.
Því:
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo lsmod | grep usbip
Jæja, við skulum bæta eftirfarandi línum við /etc/modules til að hlaða þeim sjálfkrafa við ræsingu kerfisins:
usbip-core
usbip-host
vhci-hcd
Byrjum usbip þjóninn:
sudo usbipd -D
Ennfremur segir alheimshugurinn okkur að usbip kemur með forskriftum sem gera okkur kleift að stjórna þjóninum - sýna hvaða tæki það mun deila yfir netið, sjá stöðuna, og svo framvegis. Hér bíður okkar annað garðverkfæri - þessi forskrift í 0.2.x greininni, aftur, hefur verið endurnefna. Þú getur fengið lista yfir skipanir með
sudo usbip
Eftir að hafa lesið lýsinguna á skipunum verður ljóst að til að deila nauðsynlegu USB tæki, vill usbip vita Bus ID þess. Kæru áhorfendur, hrífa númer þrjú er á vettvangi: Bus ID sem mun gefa okkur lsusb (það virðist vera augljósasta leiðin) - það hentar henni ekki! Staðreyndin er sú að usbip hunsar vélbúnað eins og USB hubbar. Þess vegna munum við nota innbyggðu skipunina:
user@usb-server:~$ sudo usbip list -l
- busid 1-1 (064f:0bd7)
WIBU-Systems AG : BOX/U (064f:0bd7)
Athugið: Hér á eftir í skráningunum mun ég lýsa öllu með því að nota dæmið um sérstaka USB lykilinn minn. Vélbúnaðarnafnið þitt og VID:PID parið getur verið mismunandi. Mitt heitir Wibu-Systems AG: BOX/U, VID 064F, PID 0BD7.
Nú getum við deilt tækinu okkar:
user@usb-server:~$ sudo usbip bind --busid=1-1
usbip: info: bind device on busid 1-1: complete
Húrra, félagar!
user@usb-server:~$ sudo usbip list -r localhost
Exportable USB devices
======================
- localhost
1-1: WIBU-Systems AG : BOX/U (064f:0bd7)
: /sys/devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-1
: Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)
Þrjú skál, félagar! Miðlarinn deildi járnstykkinu yfir netið og við getum tengt það! Það er aðeins eftir að bæta sjálfvirkri ræsingu usbip púkans við /etc/rc.local
usbipd -D
Þriðji hluti, viðskiptavinur og ruglingslegur
Ég reyndi að tengja samnýtta tækið yfir netið við Debian vél strax á sama netþjóni og allt tengdist vel:
sudo usbip attach --remote=localhost --busid=1-1
Við skulum halda áfram í Windows. Í mínu tilviki var það Windows Server 2008R2 Standard Edition. Opinberi handbókin biður þig um að setja upp ökumanninn fyrst. Aðferðinni er fullkomlega lýst í readme sem fylgir Windows viðskiptavinnum, við gerum allt eins og það er skrifað, allt gengur upp. Á XP virkar það líka án vandræða.
Eftir að viðskiptavinurinn hefur verið pakkaður upp reynum við að setja lykilinn okkar upp:
C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip_windows.c: 756 (query_interface0) recv op_common
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Ó ó. Eitthvað fór úrskeiðis. Við notum hæfileika Google. Það eru brotakennd minnst á að eitthvað sé athugavert við fastana; í miðlarahlutanum breyttu þróunaraðilar samskiptareglur þegar þeir skiptu yfir í útgáfu 0.2.0, en þeir gleymdu að gera þetta í Win biðlaranum. Fyrirhuguð lausn er að breyta fastanum í frumkóðanum og endurbyggja biðlarann.
En ég vil virkilega ekki hlaða niður Visual Studio vegna þessarar aðferðar. En ég á gamla góða Hiew. Í frumkóðanum er fastinn lýst yfir sem tvöfalt orð. Við skulum leita í skránni fyrir 0x00000106 og skipta því út fyrir 0x00000111. Mundu að bæta röð er snúið við. Niðurstaðan er tvær viðureignir, plástur:
[usbip.exe]
00000CBC: 06 11
00000E0A: 06 11
Eeeee... já!
C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
new usb device attached to usbvbus port 1
Þetta hefði getað bundið enda á kynninguna en tónlistin lék ekki lengi. Eftir að hafa endurræst þjóninn fann ég að tækið á biðlaranum er ekki tengt!
C:Program FilesUSB-IP>usbip -a %server-ip% 1-1
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Og þannig er það. Jafnvel alvitur Google gat ekki svarað þessu fyrir mig. Og á sama tíma sýnir skipunin til að sýna tæki sem eru tiltæk á þjóninum alveg rétt - hér er það, lykillinn, þú getur sett hann upp. Ég reyni að tengja undir Linux - það virkar! Og ef nú reyna frá undir Windows? Ó shit - það virkar!
Síðasta hrífan: eitthvað er ekki bætt við netþjónskóðann. Þegar tæki er deilt les það ekki fjölda USB-lýsingar frá því. Og þegar tækið er sett upp undir Linux er þetta reit fyllt út. Því miður kannast ég við þróun undir Linux á „gera && gera upp“ stigi. Þess vegna er vandamálið leyst með frekar óhreinum hakki - bæta við /etc/rc.local
usbip attach --remote=localhost --busid=1-1
usbip port
usbip detach --port=00
Úrslitahluti
Eftir smá pæling þá virkar þetta. Æskileg niðurstaða hefur náðst, nú er hægt að festa lykilinn á hvaða tölvu sem er (og aftengja hann auðvitað líka), þar með talið þær sem eru utan útsendingarkerfisins. Ef þú vilt geturðu gert það með skeljaforskrift. Það sem er gott - ánægjan er algjörlega ókeypis.
Ég vona að reynsla mín muni hjálpa habrazhiteli að komast í kringum hrífuna sem prentaði á ennið á mér. Takk fyrir athyglina!
Heimild: www.habr.com