5 måder at afbryde og tilslutte en USB-enhed uden at tage hænderne fra tastaturet

Ved mange lejligheder, når vi bruger vores computer, afbryder vi en USB-enhed (sikkert, som det skal være), og straks bagefter indser vi, at vi har glemt at kopiere en fil, eller at vi var nødt til at sørge for, at der var data i vores enhed. I disse tilfælde er det normalt meget nyttigt at frakoble USB-drevne næsten, når vi arbejder eksternt.

Efter at have skubbet enheden ud, ser vi den ikke længere på vores liste over enheder, men harddisken eller pendrive er stadig forbundet via USB-porten, og i mange distributioner i dag, efter at have skubbet drevet sikkert ud, ser vi heller ikke enheden og Det kan vi ikke montere fra vores terminal. Den hurtigste løsning er at afbryde kablet og tilslutte det igen, i nogle tilfælde enten på grund af dovenskab med at skulle rejse sig, eller fordi vi får adgang til en computer, som vi ikke er foran, og der ikke er nogen i nærheden, kan vi ikke gøre det .

Oplysninger om USB-enheder

Lad os se, hvordan vi får oplysninger om USB-enheder, der er tilsluttet systemet, inden vi starter. Til dette kan vi bruge så udfør lsusb, der viser de tilsluttede enheder lige nu. Jeg sætter eksempler på, hvad jeg får på min computer lige nu, men måske er det meget forskelligt fra hvad du får:

$ lsusb Bus 002 Enhed 001: ID 1d6b: 0003 Linux Foundation 3.0 rodhub Bus 001 Enhed 006: ID 8087: 0a2a Intel Corp. Bus 001 Enhed 007: ID 046d: c52b Logitech, Inc. Unifying Receiver Bus 001 Enhed 005: ID 1a40 : 0101 Terminus Technology Inc. Hub Bus 001 Device 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive Bus 001 Device 003: ID 04f2: b424 Chicony Electronics Co., Ltd Bus 001 Device 001: ID 1d6b : 0002 Linux Foundation 2.0 rodhub

Hvis vi ønsker mere information, kan vi bruge -t modifikatoren, der viser os en output i form af et træ med information om modulerne:

$ 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, hvis 0, klasse = video, driver = uvcvideo, 480M | __ Port 4: dev 3, hvis 1, klasse = video, driver = uvcvideo, 480M | __ Port 5: dev 10, hvis 0, klasse = Masselager, Driver = USB-lager, 480M | __ Port 6: Dev 5, Hvis 0, Class = Hub, Driver = hub / 4p, 12M | __ Port 4: Dev 7, Hvis 0, Class = Human Interface Device, Driver = usbhid, 12M | __ Port 4: Dev 7, Hvis 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, Hvis 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, Hvis 1, Class = Wireless, Driver = btusb, 12M

Hvis vi ønsker meget mere information, kan vi bruge dem lsusb -v (output er meget stort), desuden kunne vi f.eks. kende den maksimale effekt, der leveres til enheden på følgende måde:

$ lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower" Bus 002 Enhed 001: ID 1d6b: 0003 Linux Foundation 3.0 rodhub MaxPower 0mA Bus 001 Enhed 006: ID 8087: 0a2a Intel Corp. MaxPower 100mA Bus 001 Enhed 007: ID 046d: c52b Logitech, Inc. Unifying Receiver MaxPower 98mA Bus 001 Enhed 005: ID 1a40: 0101 Terminus Technology Inc. Hub MaxPower 100mA Bus 001 Enhed 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive MaxPower 480mA Bus 001 Device 003: ID 04f2: b424 Chicony Electronics Co., Ltd MaxPower 500mA Bus 001 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 rodhub MaxPower 0mA

Andre meget nyttige kommandoer er USB-enheder, hwinfo, eller hvis vi for eksempel har stien til en enhed (inside / dev /), kan vi bede systemet om alle mulige oplysninger om det og de undersystemer, det skal gennemgå. For eksempel, hvis vi tilslutter en USB-harddisk, for at vi kan se, hvordan vi bruger enheden, har vi brug for en SCSI-driver (for at være / dev / sdX), vi har også brug for en USB-lagerdriver, som fungerer gennem USB-port, som hører til en hub, der er tilsluttet en PCI-port, blandt andre mellemliggende systemer. Alt det, vi kunne se med

$ udevadm info - forespørgsel = sti - navn = / dev / sdX - attribut-walk

o

$ udevadm info -a -n / dev / sdX

Hvis vi vil vove os, kan vi også komme ind / sys / bus / usb og se på alt, hvad der er, vil vi se en masse information, men heldigvis klassificerer ovenstående kommandoer al denne information.

Privilegier og enheder

For at udføre denne opgave bliver vi nødt til at vide, hvilken enhed vi skal til tilslut igen. For at gøre dette kan vi køre:

$ dmesg | hale [Tor 24. nov 19:50:04 2016] sd 7: 0: 0: 0: Vedhæftet scsi generisk sg3 type 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512-byte logiske blokke: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Skrivbeskyttelse er slået fra [798339.431848] sd 7: 0: 0: 0: [sdc] Mode Sense: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] At bede om cache-data mislykkedes [798339.431996] sd 7: 0: 0: 0: [sdc] Under forudsætning af drevcache: skriv igennem [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Vedhæftet SCSI-flytbar disk [798360.808588] ISO 9660-udvidelser: Microsoft Joliet niveau 3 [798360.809353] ISO 9660-udvidelser: RRIP_1991A

I denne output vil vi se, at den enhed, vi arbejder med, er sdc (sdc1 og sdc2 ville være partitioner inden for den disk). For eksemplerne bruger jeg denne enhed, i dit tilfælde bliver du nødt til at visualisere, hvilken konto du har.

I eksemplerne nedenfor vil jeg bruge sudo at udføre kommandoerne med privilegierne rod. Selvom det ville være nok at have en bruger med tilstrækkelig tilladelse. Hvis vi vil se de nødvendige privilegier, skal du bare gøre det ls til enhed:

$ ls -latr / dev / sdc brw-rw ---- 1 roddisk 8, 32 nov 24 19:50 / dev / sdc

Der ser vi, at ejeren er rod og gruppen disk. Det ville være nok at have en bruger, der tilhører gruppedisken.

Metode 1. Behandl det som en CD / DVD

Det er det enkleste af alle. Sikkert, hvis du har været i GNU / Linux i årevis, da du arbejdede med CD-ROM eller DVD, brugte du udskubningskommandoen. Nå, udkast blev brugt til at åbne CDROM og udkast -t blev brugt til at lukke bakken. Nå, hvis vi gør dette før USB-enheden:

$ sudo skub ud -t / dev / sdc

Enheden skal se ud som om vi har tilsluttet den igen.

Metode 2. Frakoblet og virtuelt tilsluttet

På nogle systemer (så længe hardwaren understøtter det), når du sikkert fjerner USB-enheden, holder enheden op med at tænde, og enheden vises ikke længere. Det er det samme som når du gør:

udisksctl sluk -b / dev / sdc

I dette tilfælde / Dev / sdc det er min enhed, og med denne kommando simulerede den en virtuel strømafbrydelse.

Problemet er, at nu / dev / sdc ikke findes, hvad mere er, hvis vi ser på dmesg, får vi noget som dette:

$ dmesg | hale [281954.693298] USB 1-5: USB-afbrydelse, enhed nummer 3

Så hvis vi prøver med metoden til udstøde det kommer ikke til at virke. Bemærk: Jeg har fremhævet USB 1-5 og vi vil snart se hvorfor.

Hvis du arbejder eksternt, kan det være en god idé. Forestil dig, at du har tilsluttet USB-drev til backup. Når du laver kopierne, er det godt for systemet at vide, at der er tilsluttet diske, men når vi ikke bruger dem på den ene side, skal vi spare energi og undgå slid på skiverne, så det er bedre at skære strømmen på den anden side, vi ønsker ikke, at ondsindede apps skal se, at de findes disse diske, så de ikke bliver smittet. (Ja, i GNU / Linux er der vira).

Hvordan forbinder vi strømmen nu?

Vi skal ringe til USB-porten, for dette er der et projekt kaldet knudepunkt (Jeg linker til en gaffel fra det oprindelige projekt, fordi her er en fejl rettet, der kan fjerne strømmen fra flere enheder og ikke kun den, vi ønsker). Der er flere projekter (som f.eks uhubctl), men dette har ingen afhængigheder for når vi går til kompilering, er det også bare en hubpower.c-fil.
Først kompilerer vi det,

$ gcc -o hubpower hubpower.c

Kan du nu huske de fedte tal fra dmesg? Nå, vi skal bruge dem, vi bliver nødt til at afbryde enheden og tilslutte den igen på denne måde:

$ 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

Hvis enheden ikke registrerer os, kan vi prøve at gøre:

$ sudo ./hubpower 1: 1 bind Bind-driver-anmodning sendt til kernen

På denne måde vil vi se vores tilsluttede USB-enhed igen.

Hvis vi ikke vil have et C-program ... har jeg det i perl

Et C-program er svært at kompilere og teste, om det, vi skal gøre, er meget simpelt, så vi kan prøve denne lille port i 10 linjer lavet i perl:

#! / bin / perl kræver "sys / ioctl.ph"; $ enhed = "05"; åben (min $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ data = pakke ("H *", "23010800". $ enhed. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); $ data = pakke ("H *", "23030800". $ enhed. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); luk ($ usbdev);

Vi skal respektere $ enhedportnummeret (i mit tilfælde var det 5), det er en værdi i hexadecimal, derfor vil 10 være A, 11 være B, 15 være F, 16 være 10 ... Vi skal også overvåge enheden og bussen, som vi får adgang til fra / dev / bus / usb /001/001, numrene skal gå med førende nuller, da vi kalder den fil.

Som vi kan se, er nøglen i ioctl (), det er en funktion, der manipulerer parametre for en enhed fra en speciel fil i filsystemet. Blandt de anvendte hexadecimale værdier finder vi 0xC0185500, en konstant kaldet USBDEVFS_CONTROL, hvormed vi sender en kontrolkommando til USB-enheden. De andre koder hører til frakoblings- og forbindelsesanmodningen (du kan finde mere information i programmet lavet i C).

Metode 3. Skjul og vis enheden

En anden måde at afbryde enheden på kan være:

ekko '1-5' | sudo tee / sys / bus / usb / drivere / usb / unbind

Og vi kan gendanne det ved at gøre:

ekko '1-5' | sudo tee / sys / bus / usb / drivere / usb / bind

Denne metode forårsager ikke en fuldstændig afbrydelse af enheden. Det får kun operativsystemet til ikke at tale med det, og mange enheder, når en computer ikke vil vide noget om dem, sættes i lavt strømtilstand, da vi ikke vil bede om noget.

Metode 4. Enhedsgodkendelse

Ulempen ved denne metode er, at flere enheder midlertidigt kan deaktiveres i mange systemer, hvilket ikke kun er det, vi har brug for, men vi angriber også en hel USB-hub. For eksempel:

$ ekko 0 | sudo tee / sys / bus / usb / enheder / usb1 / autoriseret $ echo 1 | sudo tee / sys / bus / usb / enheder / usb1 / autoriseret

Hvilket vi naturligvis kan køre alt i træk:

$ ekko 0 | sudo tee / sys / bus / usb / enheder / usb1 / autoriseret; ekko 1 | sudo tee / sys / bus / usb / enheder / usb1 / autoriseret

Vi skal være forsigtige, hvis der er flere diske tilsluttet den samme USB-port (og næsten altid i vores computere, er flere USB-porte end dem, vi ser, internt forbundet til en hub, så der er grupper af porte med den samme USB far, sæt det på en eller anden måde.

Metode 5. Genstart USB-undersystemet

Hvis vi vil genstarte USB-undersystemet. Det vil sige, opdater alle USB-enheder, f.eks. Frakobling og tilslutning af dem alle, på den ene side kan vi downloade og genindlæse USB-kernemodulet:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd # For USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd #For USB3

Selvom nogle distributioner, de nyeste versioner af Ubuntu og derivater inkluderet, har integrerede USB-moduler og de kan ikke downloades. På den anden side kan systemet muligvis ikke lade os downloade dem, fordi de er i brug på grund af andre moduler (printere, lagring, interfaceenheder osv.), Og hvis vi begynder at downloade moduler og bryde ting, er vi muligvis nødt til at genstarte computeren. i slutningen. Så på en anden måde kan vi gøre:

$ ekko '0000:00:14.5'| sudo tee / sys / bus / pci / drivers / xhci_hcd / unbind $ echo '0000:00:14.5'| sudo tee / sys / bus / pci / drivere / xhci_hcd / bind

For at finde vores enhed kan vi gøre ls inde / sys / bus / pci / drivere / xhci_hcd, flere ting vises, vi er nødt til at kigge efter en der ser sådan ud aaaa: bb: cc: dd.e. Din USB-port kommer muligvis ikke som xhci_hcd (USB3), men snarere ehci_hcd (USB2)


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Cristian sagde han

    Fremragende artikel!

    1.    gasparfm sagde han

      Mange tak Cristian! Jeg håber, du har fundet det nyttigt.

  2.   Antonio juan sagde han

    I denne artikel siges det ikke, at når du skal sætte det, er det på den modsatte side af det rigtige, og du skal vende det ... hehehe. Fantastisk artikel.

    1.    gasparfm sagde han

      Tak Antonio Juan! Nå se, du ved ikke, hvor mange gange det er sket med mig, mens jeg prøvede alt, hvad jeg har lagt i stillingen! 🙂

  3.   ROMSAT sagde han

    Store. En overlegen vare. Det skal have titlen: "Lær om Linux-systemet ved blot at frakoble og tilslutte din USB-stick." Tillykke.
    Hilsner fra Malaga.

    1.    gasparfm sagde han

      Nå ja, jeg ved ikke, om nogen begynder at programmere i C og få adgang til enheder fra dette indlæg! Også fra Malaga !! Vi er overalt 🙂

  4.   HO2Gi sagde han

    Imponerende artikel. Du er gået overbord med sådant materiale.

    1.    gasparfm sagde han

      Tak HO2Gi !! På min personlige blog ( http://totaki.com/poesiabinaria ) der er også en masse tutorials af stilen 🙂

  5.   Atahualpa sagde han

    tak meget ven. Jeg starter i linux, specifikt i linux mint, og jeg har følgende problem: i konsollen kan jeg se, at min telefon er forbundet til maskinen, men ikke i filhåndteringen. Og derfor kan jeg ikke bruge det som et modem til at oprette forbindelse til internettet. Hvad kan jeg gøre?

    1.    Gaspar Fernandez sagde han

      Der er telefoner, der ikke lader dig oprette forbindelse som et modem, men du kan udføre internetdeling

  6.   Milazzo sagde han

    Fremragende dokumentation!
    Tak fordi du tog dig tid til at dele oplevelsen.
    Jeg bruger det som en reference til en anden type problem, jeg har: Afbrydelse af USB-porte i Ubuntu (# 42 ~ præcis1-Ubuntu SMP ons 14. aug 15:31:16 UTC 2013)
    Der kommer et tidspunkt, hvor systemet kaster en -110 i dmesg og genstarter pc'en, det antages, at fejlen skyldes manglende strøm i USB, hvor enheden er tilsluttet (USB3.0).

    Nu bruger jeg lsusb -v til at verificere enhedens strømniveau, men det kaster 2mA, hvilket er helt absurd ... kun lysdioderne forbruger mere end det ...

    Jeg forbinder et huawei E4 USB-8372G-modem, men maxpower indikerer 2mA, hvilket er utroligt, nu er tvivlen ændret, og andre er opstået:
    Er MaxPower en attribut, der kommer som standard på enheden eller i operativsystemet?
    Er det en parameter for den maksimale effekt, som USB-porten leverer?
    I tilfælde af at være en parameter
    Kan denne parameter ændres og indstilles til det maksimale, der gives af USB-porten (900mAh- 3.0 / 500mAh- 2.0)?
    I tilfælde af ikke at være en parameter,
    Er det en realtidsmåleværdi af USB-forbruget (usandsynligt)?
    Hvis det er en anden mulighed, bedes du forklare mig, da jeg er i tvivl om henvisningsoplysningerne.

    Jeg er i tvivl om denne MaxPower-værdi. Hvis du har yderligere oplysninger, ville jeg være meget taknemmelig

    lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower | bDeviceClass | iProduct"

    Bus 002 Enhed 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-seriel adapter
    bDeviceClass 255 Leverandørspecifik klasse
    iProduct 2 USB2.0-seriel
    MaxPower 96mA
    Bus 002 Enhed 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 kommunikation
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonimo sagde han

    Kan det anvendes på windows?

  8.   Chelo sagde han

    Mange tak. Med udisksctl power-off -b / dev / sdc på min eksterne disk var det nok til at løse hovedpinen. Ville det ikke være bedre, hvis afmonteringen har en mulighed for at gøre dette selv?

  9.   Marisa sagde han

    Gud hvad fanden! Har nogen læst hele dette testamente? Og ovenfor efter pladen ved vi stadig ikke, hvordan man slukker for en DAC / USB-lydgrænseflade, en printer, en grafikplade ... ja, intet der ikke er en spids eller en ekstern disk. Hvilket spild af tid ...