5 načina za odspajanje i spajanje USB uređaja bez skidanja ruku s tipkovnice

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)


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Cristian dijo

    Izvrsan članak!

    1.    gasparfm dijo

      Hvala ti puno Cristian! Nadam se da vam je bilo korisno.

  2.   Antonio juan dijo

    U ovom članku nije rečeno da kad god ga želite staviti na suprotnu stranu od ispravne i morate ga okrenuti ... hehehe. Sjajan članak.

    1.    gasparfm dijo

      Hvala Antonio Juan! Pa, pogledajte, ne znate koliko mi se puta to dogodilo dok sam pokušavao sve što sam stavio u postu! 🙂

  3.   ROMSAT dijo

    Sjajno. Superiorna stavka. Trebao bi biti naslovljen: "Saznajte o Linux sustavu jednostavnim isključivanjem i priključivanjem USB ključa." Čestitamo.
    Pozdrav iz Malage.

    1.    gasparfm dijo

      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 🙂

  4.   HO2Gi dijo

    Impresivan članak. Pretjerali ste s takvim materijalom.

    1.    gasparfm dijo

      Hvala HO2Gi !! Na mom osobnom blogu ( http://totaki.com/poesiabinaria ) postoji i puno tutorijala za stil 🙂

  5.   atahualpa dijo

    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?

    1.    Gaspar Fernandez dijo

      Postoje telefoni koji vam ne dopuštaju povezivanje kao modem, ali možete učiniti modemsku vezu

  6.   Milazzo dijo

    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

  7.   Anoniman dijo

    Može li se primijeniti na prozore?

  8.   Chelo dijo

    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?

  9.   Marisa dijo

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