Fem måter å koble fra og koble til en USB-enhet uten å ta hendene fra tastaturet

Ved mange anledninger, når vi bruker datamaskinen, kobler vi fra en USB-enhet (trygt, som den må være), og umiddelbart etterpå innser vi at vi har glemt å kopiere en fil, eller at vi måtte sørge for at data var i enheten vår. I disse tilfellene er det vanligvis veldig nyttig å nesten koble fra USB-stasjoner når vi jobber eksternt.

Etter å ha kastet ut enheten ser vi den ikke lenger i listen over enheter, men harddisken eller pendrive er fremdeles koblet til av USB-porten, og i mange distribusjoner i dag, etter å ha kastet harddisken ut, ser vi heller ikke enheten og Vi kan ikke gjøre det montere fra terminalen vår. Den raskeste løsningen er å koble fra kabelen og koble den til igjen, i noen tilfeller, enten på grunn av latskap å måtte stå opp, eller fordi vi får tilgang til en datamaskin som vi ikke er foran og det ikke er noen i nærheten, kan vi ikke gjøre det .

Informasjon om USB-enheter

Før vi begynner, la oss se hvordan du får informasjon om USB-enheter som er koblet til systemet. For dette kan vi bruke lsusb, som vil vise de tilkoblede enhetene akkurat nå. Jeg setter eksempler på hva jeg får på datamaskinen min akkurat nå, men kanskje det er veldig forskjellig fra det du får:

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

Hvis vi vil ha mer informasjon, kan vi bruke modifikasjonen -t som viser oss en utgang i form av et tre med informasjon om modulene:

$ lsusb -t /: Buss 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, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, Hvis 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, Hvis 0, Class = Masselagring, Driver = usb-lagring, 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, 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, Hvis 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, If 1, Class = Wireless, Driver = btusb, 12M

Hvis vi ønsker mye mer informasjon, kan vi bruke lsusb -v (utgangen er veldig stor), kunne vi for eksempel også vite den maksimale effekten som leveres til enheten, på følgende måte:

$ lsusb -v 2> / dev / null | egrep "^ Buss | MaxPower" Buss 002 Enhet 001: ID 1d6b: 0003 Linux Foundation 3.0 rotnav MaxPower 0mA Buss 001 Enhet 006: ID 8087: 0a2a Intel Corp. MaxPower 100mA Buss 001 Enhet 007: ID 046d: c52b Logitech, Inc. Unifying Receiver MaxPower 98mA Bus 001 Device 005: ID 1a40: 0101 Terminus Technology Inc. Hub MaxPower 100mA Bus 001 Device 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 rotnav MaxPower 0mA

Andre veldig nyttige kommandoer er USB-enheter, hwinfo, eller hvis vi for eksempel har banen til en enhet (inside / dev /), kan vi be systemet om all mulig informasjon om det og delsystemene det må gjennom. Hvis vi for eksempel kobler til en USB-harddisk, for at vi skal kunne se hvordan du bruker enheten, trenger vi en SCSI-driver (for å være / dev / sdX), vi trenger også en USB-lagringsdriver, som fungerer gjennom USB-port, som tilhører en hub, som er koblet til en PCI-port, blant andre mellomliggende systemer. Alt vi kunne se med

$ udevadm info --query = path --name = / dev / sdX --attribute-walk

o

$ udevadm info -a -n / dev / sdX

Hvis vi vil våge oss, kan vi også komme inn / sys / buss / usb og se på alt det er, vi vil se mye informasjon, men heldigvis klassifiserer ovennevnte kommandoer all denne informasjonen.

Privilegier og enheter

For å utføre denne oppgaven må vi vite hvilken enhet vi skal til koble til igjen. For å gjøre dette kan vi løpe:

$ dmesg | hale [tor nov 24 19:50:04 2016] sd 7: 0: 0: 0: Vedlagt scsi generisk sg3 type 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512-byte logiske blokker: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Write Protect er av [798339.431848] sd 7: 0: 0: 0: [sdc] Mode Sense: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Be om cache-data mislyktes [798339.431996] sd 7: 0: 0: 0: [sdc] Forutsatt at stasjonsbuffer: skriv gjennom [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Vedlagt SCSI-flyttbar disk [798360.808588] ISO 9660 Extensions: Microsoft Joliet Level 3 [798360.809353] ISO 9660 Extensions: RRIP_1991A

I denne utgangen vil vi se at enheten vi jobber med er sdc (sdc1 og sdc2 vil være partisjoner på den disken). For eksemplene vil jeg bruke denne enheten, i ditt tilfelle må du visualisere hvilken konto du har.

I eksemplene nedenfor vil jeg bruke sudo å utføre kommandoene med privilegiene root. Selv om det ville være nok å ha en bruker med tilstrekkelig tillatelse. Hvis vi ønsker å se de nødvendige privilegiene, bare gjør ls til enheten:

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

Der ser vi at eieren er rot og gruppen disk. Det ville være nok å ha en bruker som tilhører gruppedisken.

Metode 1. Behandle den som en CD / DVD

Det er det enkleste av alt. Sikkert hvis du har brukt GNU / Linux i årevis, da du jobbet med CD-ROM eller DVD, brukte du utløserkommandoen. Vel, utkast ble brukt til å åpne CDROM og utkast -t ble brukt til å lukke skuffen. Vel, hvis vi gjør dette før USB-enheten:

$ sudo utkast -t / dev / sdc

Enheten skal se ut som om vi har koblet den til igjen.

Metode 2. Frakoblet og virtuelt plugget inn

På noen systemer (så lenge maskinvaren støtter det), når du trygt fjerner USB-enheten, slutter enheten å slå på, og enheten vises ikke lenger. Det er det samme som når du gjør det:

udisksctl power-off -b / dev / sdc

I dette tilfellet / Dev / sdc det er enheten min, og med denne kommandoen simulerte den en virtuell strømfrakobling.

Problemet er at nå / dev / sdc ikke eksisterer. Hva mer, hvis vi ser på dmesg, vil vi få noe slikt:

$ dmesg | hale [281954.693298] USB 1-5: USB-frakobling, enhetsnummer 3

Så hvis vi prøver med metoden for ejektor det kommer ikke til å fungere. Merk: Jeg har uthevet USB 1-5 og vi får se hvorfor snart.

Hvis du jobber eksternt, kan dette være en god idé. Tenk deg at du har USB-stasjoner koblet til sikkerhetskopien. Når du lager kopiene, er det bra for systemet å vite at det er tilkoblede disker, men når vi ikke bruker dem på den ene siden, må vi spare energi og unngå slitasje på platene, så det er bedre å kutte strømmen, derimot, vi vil ikke at ondsinnede apper skal se at de eksisterer disse diskene, slik at de ikke blir smittet. (Ja, i GNU / Linux er det virus).

Hvordan kobler vi strømmen nå?

Vi må ringe til USB-porten, for dette er det et prosjekt som heter knutepunkt (Jeg lenker til en gaffel fra det opprinnelige prosjektet fordi her er en feil løst som kan fjerne strømmen fra flere enheter og ikke bare den vi vil ha). Det er flere prosjekter (som uhubctl), men dette har ingen avhengigheter for når vi skal kompilere, er det også bare en hubpower.c-fil.
Først kompilerer vi det,

$ gcc -o hubpower hubpower.c

Nå, husker du tallene med fet skrift fra dmesg? Vel, vi skal bruke dem, vi må koble fra enheten og koble den til igjen, slik:

$ sudo ./hubpower 1: 1 strøm 5 av Port 5 status: 0000 Strøm av $ sudo ./hubpower 1: 1 strøm 5 på Port 5 status: 0100 Power-On

Hvis enheten ikke oppdager oss, kan vi prøve å gjøre:

$ sudo ./hubpower 1: 1 bind Bind-driver-forespørsel sendt til kjernen

På denne måten vil vi se vår tilkoblede USB-enhet igjen.

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

Et C-program er vanskelig å kompilere og teste om det vi skal gjøre er veldig enkelt, så vi kan prøve denne lille porten i ti linjer laget i perl:

#! / bin / perl krever "sys / ioctl.ph"; $ device = "05"; open (my $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ data = pakke ("H *", "23010800". $ enhet. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); $ data = pakke ("H *", "23030800". $ enhet. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); lukk ($ usbdev);

Vi må respektere $ enhetportnummeret (i mitt tilfelle var det 5), det er en verdi i heksadesimal, derfor vil 10 være A, 11 vil være B, 15 vil være F, 16 vil være 10 ... Vi må også overvåke enheten og bussen, som vi får tilgang til fra / dev / bus / usb /001/001, må tallene være med ledende nuller siden vi kaller den filen.

Som vi kan se, er nøkkelen i ioctl (), det er en funksjon som manipulerer parametere til en enhet fra en spesiell fil i filsystemet. Blant de heksadesimale verdiene som brukes, finner vi 0xC0185500, en konstant kalt USBDEVFS_CONTROL som vi vil sende en kontrollkommando til USB-enheten. De andre kodene hører til frakoblings- og tilkoblingsforespørselen (du finner mer informasjon i programmet laget i C).

Metode 3. Skjule og vise enheten

En annen måte å koble fra enheten kan være:

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

Og vi kan gjenopprette det ved å gjøre:

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

Denne metoden forårsaker ikke fullstendig frakobling av enheten. Det gjør at operativsystemet ikke snakker med det, og mange enheter, når en datamaskin ikke vil vite noe om dem, blir satt i lavt strømmodus, siden vi ikke kommer til å be om noe.

Metode 4. Enhetsautorisasjon

Ulempen med denne metoden er at flere enheter kan deaktiveres midlertidig i mange systemer, noe som ikke bare er det vi trenger, men vi angriper også en hel USB-hub. For eksempel:

$ ekko 0 | sudo tee / sys / bus / usb / devices / usb1 / autorisert $ echo 1 | sudo tee / sys / bus / usb / enheter / usb1 / autorisert

Som vi selvfølgelig kan kjøre alt på rad:

$ ekko 0 | sudo tee / sys / bus / usb / enheter / usb1 / autorisert; ekko 1 | sudo tee / sys / bus / usb / enheter / usb1 / autorisert

Vi må være forsiktige, hvis det er flere disker koblet til samme USB-port (og nesten alltid på datamaskinene våre, er flere USB-porter enn de vi ser internt koblet til en hub, så det er grupper av porter med samme USB far, si det på en eller annen måte.

Metode 5. Start USB-delsystemet på nytt

Hvis vi vil starte USB-delsystemet på nytt. Det vil si, oppdater alle USB-enheter, for eksempel å koble fra og plugge dem alle, på den ene siden kan vi laste ned og laste USB-kjernemodulen på nytt:

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

Selv om noen distribusjoner, de nyeste versjonene av Ubuntu og derivater inkludert, har integrerte USB-moduler og de kan ikke lastes ned. På den annen side kan det hende at systemet ikke lar oss laste dem ned fordi de er i bruk på grunn av andre moduler (skrivere, lagring, grensesnitt enheter osv.), Og hvis vi begynner å laste ned moduler og ødelegge ting, må vi kanskje starte på nytt datamaskinen til slutt. Så på en annen måte kan vi gjø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 / drivers / xhci_hcd / bind

For å finne enheten vår, kan vi gjøre ls inni / sys / bus / pci / drivers / xhci_hcd, flere ting vil vises, vi må se etter en som ser ut slik aaaa: bb: cc: dd.e. USB-porten din kommer kanskje ikke som xhci_hcd (USB3), men heller ehci_hcd (USB2)


14 kommentarer, legg igjen dine

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Cristian sa

    Utmerket artikkel!

    1.    gasparfm sa

      Tusen takk Cristian! Jeg håper du har funnet det nyttig.

  2.   Antonio juan sa

    I denne artikkelen blir det ikke sagt at når du skal sette den, er den på motsatt side av den riktige, og du må snu den ... Stor artikkel.

    1.    gasparfm sa

      Takk Antonio Juan! Vel, du vet ikke hvor mange ganger det har skjedd med meg mens jeg prøvde alt jeg har lagt inn i innlegget! 🙂

  3.   ROMSAT sa

    Flott. En overlegen gjenstand. Den skal ha tittelen: "Lær om Linux-systemet ved å bare koble fra og koble til USB-pinnen." Gratulerer.
    Hilsen fra Malaga.

    1.    gasparfm sa

      Vel ja, jeg vet ikke om noen begynner å programmere i C og få tilgang til enheter fra dette innlegget! Også fra Malaga !! Vi er overalt 🙂

  4.   HO2Gi sa

    Imponerende artikkel. Du har gått overbord med slikt materiale.

    1.    gasparfm sa

      Takk HO2Gi !! På min personlige blogg ( http://totaki.com/poesiabinaria ) det er også mange tutorials av stilen 🙂

  5.   Atahualpa sa

    tusen takk venn. Jeg begynner i linux, spesielt i linux mint, og jeg har følgende problem: i konsollen kan jeg se at telefonen min er koblet til maskinen, men ikke i filbehandleren. Og derfor kan jeg ikke bruke det som et modem for å koble til internett. Hva kan jeg gjøre?

    1.    Gaspar Fernandez sa

      Det er telefoner som ikke lar deg koble til som modem, men du kan gjøre Internettdeling

  6.   Milazzo sa

    Utmerket dokumentasjon!
    Takk for at du tok deg tid til å dele opplevelsen.
    Jeg bruker den som referanse for en annen type problemer som jeg har: Frakobling av USB-porter i ubuntu (# 42 ~ presis1-Ubuntu SMP ons 14. aug 15:31:16 UTC 2013)
    Det kommer en tid da systemet kaster en -110 i dmesg og starter PCen på nytt, det antas at feilen skyldes mangel på strøm i USB der enheten er koblet til (USB3.0).

    Nå bruker jeg lsusb -v for å verifisere strømnivået til enheten, men den kaster 2mA, noe som er helt absurd ... bare lysdiodene bruker mer enn det ...

    Jeg kobler et huawei E4 USB-8372G-modem, men maxpower indikerer 2mA, noe som er utrolig, nå har tvilen endret seg og andre har dukket opp:
    Er MaxPower et attributt som kommer som standard på enheten eller i operativsystemet?
    Er det en parameter for maksimal effekt som USB-porten vil levere?
    I tilfelle du er en parameter
    Kan denne parameteren endres og settes til det maksimale gitt av USB-porten (900mAh- 3.0 / 500mAh- 2.0)?
    Hvis du ikke er en parameter,
    Er det en måleverdi i sanntid av USB-forbruket (usannsynlig)?
    Hvis det er et annet alternativ, vennligst forklar meg siden jeg er i tvil om referanseinformasjonen.

    Jeg har flere tvil angående denne MaxPower-verdien. Hvis du har ytterligere informasjon, vil jeg være veldig takknemlig.

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

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

  7.   Anonym sa

    Kan den brukes på windows?

  8.   Chelo sa

    Takk så mye. Med udisksctl power-off -b / dev / sdc på den eksterne disken min var det nok til å løse hodepinen. Ville det ikke vært bedre om demonteringen har en mulighet til å gjøre dette selv?

  9.   Marisa sa

    Herregud! Har noen lest hele testamentet? Og ovenfor etter tallerkenen vet vi fremdeles ikke hvordan vi skal slå av et DAC / USB -lydgrensesnitt, en skriver, et grafisk nettbrett ... kort sagt ingenting som ikke er en pigg eller en ekstern disk. For en bortkastet tid ...