U mnogim prilikama, kada koristimo računalo, odspojimo USB uređaj (sigurno, onakav kakav mora biti) i odmah nakon toga shvatimo da smo zaboravili kopirati datoteku ili da moramo biti sigurni da su podaci u naša jedinica. U tim je slučajevima obično vrlo korisno virtualno odspojiti USB pogone kada radimo na daljinu.
Nakon izbacivanja uređaja, više ga ne vidimo na popisu uređaja, ali tvrdi disk ili pendrive i dalje su povezani putem USB priključka, a u mnogim distribucijama danas, nakon što smo sigurno izbacili pogon, ne vidimo ni uređaj i Ne možemo montirati s našeg terminala. Najbrže rješenje je odspojiti kabel i ponovo ga spojiti, u nekim slučajevima, bilo zbog lijenosti da ustanemo ili zato što pristupamo računalu pred kojim nismo i nema nikoga u blizini, ne možemo to učiniti .
Informacije o USB uređajima
Prije nego što započnemo, pogledajmo kako doći do podataka o USB uređajima povezanim na sustav. Za to možemo koristiti lsusb, koji će trenutno navesti povezane uređaje. Dajem primjere onoga što trenutno dobivam na računalu, ali možda se to jako razlikuje od onoga što dobivate:
$ lsusb Bus 002 Device 001: ID 1d6b: 0003 Linux Foundation 3.0 root hub Bus 001 Device 006: ID 8087: 0a2a Intel Corp. Bus 001 Device 007: ID 046d: c52b Logitech, Inc. Unifying Receiver Bus 001 Device 005: ID 1a40 : 0101 Terminus Technology Inc. Uređaj sabirnice 001 010: ID 125f: c93a A-DATA Technology Co., Ltd. Uređaj 4 sabirnice olovke 001GB Pen 003: ID 04f2: b424 Chicony Electronics Co., Ltd Sabirnica 001 Uređaj 001: ID 1d6b : 0002 korijensko čvorište Linux Foundation 2.0
Ako želimo više informacija, možemo koristiti modifikator -t koji će nam prikazati izlaz u obliku stabla s informacijama o modulima:
$ lsusb -t /: Bus 02.Port 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 8p, 5000M /: Bus 01.Port 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 16p, 480M | __ Port 4: Dev 3, Ako je 0, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, If 0, Class = Mass Storage, Driver = usb-storage, 480M | __ Port 6: Dev 5, If 0, Class = Hub, Driver = hub / 4p, 12M | __ Port 4: Dev 7, If 0, Class = Human Interface Device, Pogonski program = usbhid, 12M | __ Port 4: Dev 7, If 1, Class = Human Interface Device, Driver = usbhid, 12M | __ Port 4: Dev 7, If 2, Class = Human Interface Device, Driver = usbhid, 12M | __ Port 9: Dev 6, Ako je 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, If 1, Class = Wireless, Driver = btusb, 12M
Ako želimo puno više informacija, možemo ih koristiti lsusb -v (izlaz je vrlo velik), mogli bismo, na primjer, znati i maksimalnu snagu koja se isporučuje na uređaj, na sljedeći način:
$ lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower" Bus 002 Uređaj 001: ID 1d6b: 0003 Korijensko središte Linux Foundation 3.0 MaxPower 0mA Bus 001 Uređaj 006: ID 8087: 0a2a Intel Corp. MaxPower 100mA Bus 001 Uređaj 007: ID 046d: c52b Logitech, Inc. Objedinjavajući prijemnik MaxPower 98mA Bus 001 Uređaj 005: ID 1a40: 0101 Terminus Technology Inc. Čvorište MaxPower 100mA Bus 001 Uređaj 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Olovka MaxPower 480mA sabirnica 001 uređaj 003: ID 04f2: b424 Chicony Electronics Co., Ltd MaxPower 500mA sabirnica 001 uređaj 001: ID 1d6b: 0002 korijensko čvorište Linux Foundation 2.0 MaxPower 0mA
Ostale vrlo korisne naredbe su usb-uređaji, hwinfoili, na primjer, ako imamo put uređaja (unutar / dev /), možemo zatražiti od sustava sve moguće informacije o njemu i podsustavima koje mora proći. Na primjer, ako spojimo USB tvrdi disk, da bismo mogli vidjeti kako se koristi uređaj, potreban nam je SCSI upravljački program (za / dev / sdX), potreban nam je i USB pogonitelj za pohranu koji radi putem USB priključak, koji pripada čvorištu koje je, među ostalim srednjim sustavima, priključeno na PCI priključak. Sve ono što smo mogli vidjeti
$ udevadm info --query = path --name = / dev / sdX --attribute-walk
o
$ udevadm info -a -n / dev / sdX
Ako se želimo odvažiti, možemo i ući / sys / bus / usb i pogledajući sve što postoji, vidjet ćemo puno informacija, ali na sreću gornje naredbe klasificiraju sve ove informacije.
Privilegije i uređaji
Da bismo izvršili ovaj zadatak, morat ćemo znati na koji ćemo uređaj ići ponovno povezati. Da bismo to učinili, možemo pokrenuti:
$ dmesg | tail [Thu Nov 24 19:50:04 2016] sd 7: 0: 0: 0: Priloženi scsi generički sg3 tip 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512-bajtni logički blokovi: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Zaštita od pisanja isključena [798339.431848] sd 7: 0: 0: 0: [sdc] Osjećaj načina rada: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Neuspješno traženje podataka predmemorije [798339.431996] sd 7: 0: 0: 0: [sdc] Pod pretpostavkom predmemorije pogona: pisanje kroz [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Priloženi SCSI prijenosni disk [798360.808588] ISO 9660 Proširenja: Microsoft Joliet Level 3 [798360.809353] ISO 9660 Proširenja: RRIP_1991A
U ovom ćemo izlazu vidjeti da je uređaj s kojim radimo SDC (sdc1 i sdc2 bi bile particije unutar tog diska). Za primjere koje ću koristiti ovaj uređaj, u vašem slučaju morat ćete vizualizirati koji račun imate.
U slijedećim primjerima koristit ću sudo izvršavati naredbe s privilegijama korijen. Iako bi bilo dovoljno imati korisnika s dovoljnim dopuštenjem. Ako želimo vidjeti potrebne privilegije, samo učinite ls na uređaj:
$ ls -latr / dev / sdc brw-rw ---- 1 root disk 8, 32. studenoga 24:19 / dev / sdc
Tamo vidimo da je vlasnik root i grupa disk. Dovoljno bi bilo imati korisnika koji pripada disku grupe.
Metoda 1. Tretirajte ga kao CD / DVD
Najjednostavnije je od svega. Ako ste godinama koristili GNU / Linux, kada ste radili s CD-ROM-om ili DVD-om, koristili ste naredbu eject. Pa, izbacivanje se koristilo za otvaranje CDROM-a, a izbacivanje -t koristilo se za zatvaranje ladice. Pa, ako to učinimo prije USB uređaja:
$ sudo izbaci -t / dev / sdc
Uređaj bi trebao izgledati kao da smo ga ponovno povezali.
Metoda 2. Isključeni i virtualno priključeni
Na nekim sustavima (sve dok ga hardver podržava), kada sigurno uklonite USB uređaj, uređaj se prestaje napajati i uređaj se više ne pojavljuje. To je isto kao kad to učinite:
udisksctl isključivanje -b / dev / sdc
U ovom slučaju / Dev / SDC to je moj uređaj i ovom je naredbom simulirao virtualni prekid napajanja.
Problem je u tome što sada / dev / sdc ne postoji, štoviše, ako pogledamo dmesg, dobit ćemo nešto poput ovoga:
$ dmesg | rep [281954.693298] USB 1-5: USB odspoj, uređaj broj 3
Pa ako pokušamo s metodom izbaciti neće uspjeti. Napomena: Istaknuo sam USB 1-5 a uskoro ćemo vidjeti zašto.
Ako radite na daljinu, ovo bi mogla biti dobra ideja. Zamislite da imate USB pogone priključene na sigurnosnu kopiju. Kada izrađujete kopije, dobro je da sustav zna da su povezani diskovi, ali kad ih ne koristimo, s jedne strane moramo uštedjeti energiju i izbjegavajte trošenje diskova, pa je bolje smanjiti struju, s druge strane, ne želimo da zlonamjerne aplikacije vide da postoje ove diskove da se ne zaraze. (Da, u GNU / Linuxu postoje virusi).
Kako sada spojiti struju?
Moramo nazvati USB priključak, jer se radi o projektu glavčina (Povezujem se s račvastom izvornog projekta jer je ovdje ispravljena programska pogreška koja može ukloniti struju s više uređaja, a ne samo onog koji želimo). Postoji više projekata (poput uhubctl), ali ovo nema ovisnosti, jer kad idemo kompajlirati, to je također samo datoteka hubpower.c.
Prvo, sastavljamo ga,
$ gcc -o hubpower hubpower.c
Sad, sjećate li se brojeva podebljanih s oznake dmesg? Pa, koristit ćemo ih, morat ćemo odspojiti uređaj i ponovo ga spojiti, ovako:
$ sudo ./hubpower 1: 1 power 5 off Port 5 status: 0000 Power-Off $ sudo ./hubpower 1: 1 power 5 on Port 5 status: 0100 Power-On
Ako nas uređaj ne prepozna, možemo pokušati učiniti:
$ sudo ./hubpower 1: 1 bind Zahtjev Bind-driver-a poslan u kernel
Na taj ćemo način ponovno vidjeti naš povezani USB uređaj.
Ako ne želimo C program ... Imam ga u perlu
C program je teško sastaviti i testirati je li ono što ćemo učiniti vrlo jednostavno, pa možemo isprobati ovaj mali port u 10 redaka izrađenih u perlu:
#! / bin / perl zahtijeva "sys / ioctl.ph"; $ device = "05"; open (my $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ podataka = paket ("H *", "23010800". $ uređaj. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ podataka); $ podataka = paket ("H *", "23030800". $ uređaj. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ podataka); zatvori ($ usbdev);
Moramo poštivati $ uređaj, broj porta (u mom slučaju bio je 5), to je vrijednost u heksadecimalnom značenju, dakle 10 će biti A, 11 će biti B, 15 će biti F, 16 će biti 10 ... Također moramo nadzirati uređaj i autobusu kojem pristupamo s / dev / bus / usb /001/001, brojevi moraju biti s vodećim nulama jer pozivamo tu datoteku.
Kao što vidimo, ključ je u ioctl (), to je funkcija koja manipulira parametrima uređaja iz posebne datoteke u datotečnom sustavu. Među korištenim heksadecimalnim vrijednostima nalazimo 0xC0185500, konstanta nazvana USBDEVFS_CONTROL pomoću koje ćemo poslati upravljačku naredbu na USB uređaj, Ostali kodovi pripadaju zahtjevu za prekid veze i povezivanja (više informacija možete pronaći u programu izrađenom na C).
Metoda 3. Sakrivanje i pokazivanje uređaja
Drugi način za odspajanje uređaja mogao bi biti:
echo '1-5' | sudo tee / sys / bus / usb / drivers / usb / unbind
A to možemo oporaviti radeći:
echo '1-5' | sudo tee / sys / bus / usb / drivers / usb / bind
Ova metoda ne uzrokuje potpuno odspajanje uređaja. To samo čini da operativni sustav ne razgovara s njim, a mnogi se uređaji, kada računalo ne želi znati ništa o njima, prebacuju u način niske potrošnje, jer nećemo ništa tražiti.
Metoda 4. Autorizacija uređaja
Loša strana ove metode je što se u mnogim sustavima može privremeno onemogućiti više uređaja koji nisu samo oni koji nam trebaju, već napadamo i čitav USB čvorište. Na primjer:
$ echo 0 | sudo tee / sys / bus / usb / uređaji / usb1 / ovlašteni $ echo 1 | sudo tee / sys / bus / usb / uređaji / usb1 / ovlašteni
Što, naravno, možemo pokretati sve redom:
$ echo 0 | sudo tee / sys / bus / usb / uređaji / usb1 / ovlašteni; odjek 1 | sudo tee / sys / bus / usb / uređaji / usb1 / ovlašteni
Moramo biti oprezni, ako je više diskova spojenih na isti USB priključak (i gotovo uvijek na našim računalima, nekoliko USB priključaka od onih koje vidimo su interno povezani s čvorištem, pa postoje grupe priključaka s istim USB priključkom otac, na neki način.
Metoda 5. Ponovo pokrenite USB podsustav
Ako želimo ponovno pokrenuti USB podsustav. Odnosno, osvježite sve USB uređaje, poput njihovog isključivanja i priključenja, s jedne strane možemo preuzeti i ponovo učitati modul USB jezgre:
$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd #Za USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd #Za USB3
Iako neke distribucije, uključujući najnovije verzije Ubuntu-a i derivate, imaju integrirani USB moduli i ne mogu se preuzeti. S druge strane, sustav nam možda neće dopustiti da ih preuzmemo jer se koriste zbog drugih modula (pisači, memorija, uređaji za sučelje itd.), A ako počnemo preuzimati module i lomimo stvari, možda ćemo morati ponovno pokrenite računalo na kraju. Dakle, na još jedan način možemo učiniti:
$ echo '0000:00:14.5'| sudo tee / sys / bus / pci / drivers / xhci_hcd / unbind $ echo '0000:00:14.5'| sudo tee / sys / bus / pci / drivers / xhci_hcd / bind
Da bismo pronašli svoj uređaj, možemo učiniti ls unutar / sys / bus / pci / drivers / xhci_hcd, pojavit će se nekoliko stvari, moramo potražiti jednu koja izgleda ovako aaaa: bb: cc: dd.e. Vaš USB priključak možda neće biti xhci_hcd (USB3), već ehci_hcd (USB2)
Izvrsan članak!
Hvala ti puno Cristian! Nadam se da vam je bilo korisno.
U ovom članku nije rečeno da kad god ga želite staviti na suprotnu stranu od ispravne i morate ga okrenuti ... hehehe. Sjajan članak.
Hvala Antonio Juan! Pa, pogledajte, ne znate koliko mi se puta to dogodilo dok sam pokušavao sve što sam stavio u postu! 🙂
Sjajno. Superiorna stavka. Trebao bi biti naslovljen: "Saznajte o Linux sustavu jednostavnim isključivanjem i priključivanjem USB ključa." Čestitamo.
Pozdrav iz Malage.
Pa, da, ne znam hoće li netko početi programirati na C-u i pristupati uređajima s ovog posta! Također iz Malage !! Posvuda smo 🙂
Impresivan članak. Pretjerali ste s takvim materijalom.
Hvala HO2Gi !! Na mom osobnom blogu ( http://totaki.com/poesiabinaria ) postoji i puno tutorijala za stil 🙂
puno hvala prijatelju. Pokrećem u linuxu, konkretno u linux mint, i imam sljedeći problem: na konzoli vidim da je moj telefon povezan s računalom, ali ne i s upraviteljem datoteka. Stoga ga ne mogu koristiti kao modem za povezivanje s internetom. Što ja mogu učiniti?
Postoje telefoni koji vam ne dopuštaju povezivanje kao modem, ali možete učiniti modemsku vezu
Izvrsna dokumentacija!
Hvala vam što ste odvojili vrijeme za dijeljenje iskustva.
Koristim ga kao referencu za drugu vrstu problema koji imam: Isključivanje USB priključaka u Ubuntuu (# 42 ~ precizno1-Ubuntu SMP srijeda 14. kolovoza 15:31:16 UTC 2013)
Dođe vrijeme kada Sustav baci -110 u dmesg i ponovno pokrene računalo, pretpostavlja se da je kvar rezultat nedostatka napajanja na USB-u na kojem je uređaj povezan (USB3.0).
Sada koristim lsusb -v za provjeru razine snage uređaja, ali on baca 2mA, što je totalno apsurdno ... samo LED diode troše više od toga ...
Spajam huawei E4 USB-8372G modem, međutim maxpower pokazuje 2mA, što je nevjerojatno, sada se sumnja promijenila i pojavile su se druge:
Je li MaxPower atribut koji se po defaultu isporučuje na uređaju ili u OS-u?
Je li to parametar maksimalne snage koju će isporučiti usb port?
U slučaju da je parametar
Može li se ovaj parametar izmijeniti i postaviti na maksimum koji daje USB priključak (900mAh-3.0 / 500mAh-2.0)?
U slučaju da nije parametar,
Je li to mjerna vrijednost potrošnje USB-a u stvarnom vremenu (malo vjerojatno)?
Ako je to druga opcija, molim vas objasnite mi jer sumnjam u referentne informacije.
Imam nekoliko dvojbi u vezi s ovom vrijednošću MaxPower-a, ako imate dodatnih informacija, bio bih vam vrlo zahvalan.
lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower | bDeviceClass | iProduct"
Sabirnica 002 Uređaj 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-serijski adapter
bDeviceClass 255 Dobavljač određena klasa
iProduct 2 USB2.0-serijski
MaxPower 96mA
Sabirnica 002 Uređaj 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
bDeviceClass 2 Komunikacije
iProduct 2 HUAWEI_MOBILE
MaxPower 2mA
Može li se primijeniti na prozore?
Hvala puno. S isključenjem udisksctl -b / dev / sdc na mom vanjskom disku bilo je dovoljno da riješim glavobolju. Ne bi li bilo bolje da demontaža ima mogućnost to učiniti sama?
Bože, koji kurac! Je li netko čitao cijeli ovaj testament? I gore nakon ploče još uvijek ne znamo isključiti DAC / USB zvučno sučelje, pisač, grafički tablet ... ukratko, ništa što nije šiljak ili vanjski disk. Kakvo gubljenje vremena ...