5 maniere om 'n USB-toestel te ontkoppel en te verbind sonder om jou hande van die sleutelbord af te haal

Wanneer ons ons rekenaar gebruik, ontkoppel ons baie keer 'n USB-toestel (veilig, soos dit moet wees), en onmiddellik daarna besef ons dat ons vergeet het om 'n lêer te kopieer of dat ons moes seker maak dat die data in ons eenheid. In hierdie gevalle is dit gewoonlik baie handig om die USB-skyfies feitlik te ontkoppel as ons op afstand werk.

Nadat ons die toestel uitgegooi het, sien ons dit nie meer in ons lys met toestelle nie, maar die hardeskyf of pendrive is nog steeds deur die USB-poort gekoppel. Ons kan nie berg vanaf ons terminale. Die vinnigste oplossing is om die kabel te ontkoppel en weer aan te sluit, in sommige gevalle, as gevolg van luiheid om op te staan, of omdat ons toegang het tot 'n rekenaar waarvoor ons nie is nie en daar niemand is nie, ons kan dit nie doen nie.

Inligting oor USB-toestelle

Kom ons kyk eers voordat ons begin om inligting te kry oor USB-toestelle wat aan die stelsel gekoppel is. Hiervoor kan ons gebruik lsusb, wat tans die gekoppelde toestelle sal lys. Ek sit voorbeelde van wat ek nou op my rekenaar kry, maar miskien is dit baie anders as wat u kry:

$ 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. Hubbus 001 Toestel 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive Bus 001 Toestel 003: ID 04f2: b424 Chicony Electronics Co., Ltd Bus 001 Toestel 001: ID 1d6b : 0002 Linux Foundation 2.0-wortelhub

As ons meer inligting wil hê, kan ons die wysiger -t gebruik wat 'n boomvormige afvoer met inligting oor die modules sal wys:

$ lsusb -t /: Bus 02.Poort 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 | __ Poort 4: Dev 3, indien 0, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, If 0, Class = Massa-berging, bestuurder = usb-opslag, 480M | __ Poort 6: Dev 5, indien 0, Class = Hub, Driver = hub / 4p, 12M | __ Poort 4: Dev 7, As 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 | __ Poort 9: Dev 6, indien 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, As 1, Class = Wireless, Driver = btusb, 12M

As ons baie meer inligting wil hê, kan ons dit gebruik lsusb -v (as die uitset baie groot is), kan ons byvoorbeeld die maksimum krag wat aan die toestel gelewer word, op die volgende manier ken:

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

Ander baie nuttige opdragte is usb-toestelle, hwinfo, of as ons byvoorbeeld die pad van 'n toestel (binne / dev /) het, kan ons die stelsel vra vir alle moontlike inligting daaroor en die substelsels waardeur dit moet gaan. As ons byvoorbeeld 'n USB-hardeskyf verbind, sodat ons kan sien hoe u die toestel kan gebruik, benodig ons 'n SCSI-bestuurder (om te wees / dev / sdX), ons het ook 'n USB-stoorbestuurder nodig wat werk deur die USB-poort, wat behoort 'n hub wat onder andere tussenstelsels in 'n PCI-poort ingeprop is. Alles waarmee ons kon sien

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

o

$ udevadm info -a -n / dev / sdX

As ons dit wil waag, kan ons ook inskryf / sys / bus / usb en kyk na alles wat daar is, sal ons baie inligting sien, maar gelukkig klassifiseer die bogenoemde opdragte al hierdie inligting.

Voorregte en toestelle

Om hierdie taak uit te voer, sal ons moet weet na watter toestel ons gaan weer verbind. Om dit te doen, kan ons hardloop:

$ dmesg | stert [Do Nov 24 19:50:04 2016] sd 7: 0: 0: 0: Aangeheg scsi generiese sg3 tipe 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512-byte logiese blokke: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Skryfbeveiliging is uit [798339.431848] sd 7: 0: 0: 0: [sdc] Mode sin: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Vra vir cache-data het misluk [798339.431996] sd 7: 0: 0: 0: [sdc] Gestel skyfgeheue: skryf deur [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Aangehegte SCSI-verwyderbare skyf [798360.808588] ISO 9660 Uitbreidings: Microsoft Joliet Vlak 3 [798360.809353] ISO 9660 Uitbreidings: RRIP_1991A

In hierdie uitvoer sal ons sien dat die toestel waarmee ons werk, is STK (sdc1 en sdc2 sou partisies binne daardie skyf wees). Vir die voorbeelde sal ek hierdie toestel gebruik, in u geval moet u visualiseer watter rekening u het.

In die onderstaande voorbeelde sal ek gebruik sudo om die opdragte uit te voer met die voorregte van wortel. Alhoewel dit genoeg sou wees om 'n gebruiker met voldoende toestemming te hê. As ons die nodige voorregte wil sien, doen dit net ls na toestel:

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

Daar sien ons dat die eienaar root en die groep is skyf. Dit sou voldoende wees om 'n gebruiker wat tot die groepskyf behoort, te hê.

Metode 1. Behandel dit soos 'n CD / DVD

Dit is die eenvoudigste van almal. As u al jare lank GNU / Linux gebruik, het u die uitwerpopdrag gebruik toe u met CD-ROM of DVD gewerk het. Wel, die uitwerp is gebruik om die CDROM oop te maak en die uitwerp -t is gebruik om die skinkbord toe te maak. Wel, as ons dit voor die USB-toestel doen:

$ sudo-uitwerp -t / dev / sdc

Die toestel moet lyk asof ons dit weer verbind.

Metode 2. Ontkoppel en virtueel ingeprop

Op sommige stelsels (solank die hardeware dit ondersteun), hou die toestel op met krag en stop dit nie meer as u die USB-toestel veilig verwyder. Dit is dieselfde as wanneer u dit doen:

udisksctl afskakel -b / dev / sdc

In hierdie geval, / Dev / STK dit is my toestel, en met hierdie opdrag het dit 'n virtuele kragonderbreking gesimuleer.

Die probleem is dat nou / dev / sdc nie bestaan ​​nie. Wat meer is, as ons na dmesg kyk, sal ons so iets kry:

$ dmesg | stert [281954.693298] usb 1-5: USB-ontkoppeling, toestel nommer 3

Dus as ons probeer met die metode van uitwerp dit gaan nie werk nie. Let wel: Ek het uitgelig usb 1-5 en ons sal binnekort sien waarom.

As u op afstand werk, kan dit 'n goeie idee wees. Stel u voor dat u USB-skyfies aan die rugsteun gekoppel het. As u die kopieë maak, is dit goed dat die stelsel weet dat daar skywe gekoppel is, maar as ons dit nie gebruik nie, moet ons enersyds om energie te bespaar en vermy die verweer van die skywe, dus is dit beter om die stroom te sny, aan die ander kant, ons wil nie hê dat kwaadwillige programme moet sien dat dit bestaan ​​nie hierdie skywe sodat hulle nie besmet raak nie. (Ja, in GNU / Linux is daar virusse).

Hoe verbind ons die stroom nou?

Ons moet 'n oproep doen na die USB-poort, want daar is 'n projek genaamd spilkrag (Ek skakel na 'n vurk van die oorspronklike projek, want hier is 'n fout reggestel wat die stroom van meer toestelle kan verwyder en nie net die een wat ons wil hê nie). Daar is meer projekte (soos uhubctl), maar dit het geen afhanklikheid nie, want as ons gaan saamstel, is dit ook net 'n hubpower.c-lêer.
Eerstens stel ons dit saam,

$ gcc -o hubpower hubpower.c

Onthou u die vetgedrukte getalle in die dmesg? Wel, ons gaan dit gebruik, ons sal die toestel moet ontkoppel en weer verbind, soos volg:

$ 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

As die toestel ons nie opspoor nie, kan ons dit doen:

$ sudo ./hubpower 1: 1 bind Bind-drywer-versoek gestuur na die kern

Op hierdie manier sien ons weer ons gekoppelde USB-toestel.

As ons nie 'n C-program wil hê nie ... het ek dit in die perl

'N C-program is moeilik om saam te stel en te toets of dit baie eenvoudig is, en daarom kan ons hierdie klein poort in tien reëls in perl probeer:

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

Ons moet respekteer $ toestel, die poortnommer (in my geval was dit 5), dit is 'n heksadesimale waarde, daarom is 10 A, 11 sal B wees, 15 sal F wees, 16 sal 10 wees ... Ons moet ook die toestel en die bus monitor, waartoe ons toegang verkry vanaf / dev / bus / usb /001/001, die getalle moet met vooraanstaande nulle wees, aangesien ons die lêer noem.

Soos ons kan sien, is die sleutel in ioctl (), dit is 'n funksie wat parameters van 'n toestel vanaf 'n spesiale lêer in die lêerstelsel manipuleer. Onder die heksadesimale waardes wat gebruik word, vind ons 0xC0185500, 'n konstante genaamd USBDEVFS_CONTROL waarmee ons 'n beheeropdrag na die USB-toestel sal stuur. Die ander kodes behoort tot die ontkoppelings- en verbindingsversoek (u kan meer inligting vind in die program wat in C gemaak is).

Metode 3. Versteek en wys die toestel

'N Ander manier om die toestel te ontkoppel, kan wees:

eggo '1-5' | sudo tee / sys / bus / usb / bestuurders / usb / ontbind

En ons kan dit herstel deur:

eggo '1-5' | sudo tee / sys / bus / usb / bestuurders / usb / bind

Hierdie metode veroorsaak nie 'n volledige ontkoppeling van die toestel nie. Dit laat die bedryfstelsel net nie daaroor praat nie en baie toestelle, as 'n rekenaar niks hiervan wil weet nie, gaan hulle in lae kragmodus, want ons gaan niks vra nie.

Metode 4. Toestemming van toestelle

Die nadeel van hierdie metode is dat daar in baie stelsels meer toestelle tydelik gedeaktiveer kan word, wat nie net nodig is nie, maar ook 'n hele USB-hub aanval. Byvoorbeeld:

$ eggo 0 | sudo tee / sys / bus / usb / toestelle / usb1 / gemagtigde $ echo 1 | sudo tee / sys / bus / usb / toestelle / usb1 / gemagtig

Wat ons natuurlik alles agter mekaar kan laat loop:

$ eggo 0 | sudo tee / sys / bus / usb / toestelle / usb1 / gemagtig; eggo 1 | sudo tee / sys / bus / usb / toestelle / usb1 / gemagtig

Ons moet versigtig wees as daar meer skyfies aan dieselfde USB-poort gekoppel is (en byna altyd op ons rekenaars, is verskeie USB-poorte as die wat ons sien intern gekoppel aan 'n hub, so daar is groepe poorte met dieselfde USB vader, stel dit op 'n manier.

Metode 5. Herbegin die USB-substelsel

As ons die USB-substelsel wil weer begin. Dit wil sê: verfris alle USB-toestelle, soos om almal uit te trek en aan te sluit, enersyds kan ons die USB-kernelmodule aflaai en herlaai:

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

Alhoewel sommige verspreidings, die nuutste weergawes van Ubuntu en afgeleides, die geïntegreerde USB-modules en hulle kan nie afgelaai word nie. Aan die ander kant, kan die stelsel nie toelaat dat ons dit aflaai nie, omdat dit gebruik word vanweë ander modules (drukkers, berging, koppelvlaktoestelle, ens.), En as ons modules begin aflaai en dinge breek, moet ons die rekenaar dalk weer begin. aan die einde. Op 'n ander manier kan ons dit doen:

$ eggo '0000: 00: 14.5'| sudo tee / sys / bus / pci / bestuurders / xhci_hcd / ontkoppel $ echo '0000: 00: 14.5'| sudo tee / sys / bus / pci / drywers / xhci_hcd / bind

Om ons toestel te vind, kan ons ls binne / sys / bus / pci / bestuurders / xhci_hcd doen, verskeie dinge sal verskyn, ons moet een soek wat so lyk aaaa: bb: cc: dd.e. U USB-poort kom miskien nie as xhci_hcd (USB3) nie, maar eerder ehci_hcd (USB2)


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

14 kommentaar, los joune

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.

  1.   Cristian dijo

    Uitstekende artikel!

    1.    gasparfm dijo

      Baie dankie Cristian! Ek hoop dat u dit nuttig gevind het.

  2.   Antonio juan dijo

    In hierdie artikel word nie gesê dat wanneer u dit gaan gebruik, dit aan die ander kant van die regte een is nie, en u moet dit omdraai ... hehehe. Goeie artikel.

    1.    gasparfm dijo

      Dankie Antonio Juan! Wel, jy weet nie hoeveel keer dit met my gebeur het terwyl ek alles probeer het wat ek in die pos geplaas het nie! 🙂

  3.   ROMSAT dijo

    Groot. 'N Superieure item. Dit moet die titel he: "Lees meer oor die Linux-stelsel deur eenvoudig u USB-stekker uit te koppel en in te steek." Baie geluk.
    Groete uit Malaga.

    1.    gasparfm dijo

      Nou ja, ek weet nie of iemand vanaf hierdie pos in C sal begin programmeer en toegang tot toestelle sal kry nie! Ook van Malaga !! Ons is oral 🙂

  4.   HO2Gi dijo

    Indrukwekkende artikel. Jy het oorboord gegaan met sulke materiaal.

    1.    gasparfm dijo

      Dankie HO2Gi !! Op my persoonlike blog ( http://totaki.com/poesiabinaria ) daar is ook baie tutoriale van die styl 🙂

  5.   atahualpa dijo

    baie dankie vriend. Ek begin in Linux, spesifiek in Linux mint, en ek het die volgende probleem: in die konsole kan ek sien dat my telefoon op die masjien gekoppel is, maar nie in die lêerbestuurder nie. En daarom kan ek dit nie as 'n modem gebruik om verbinding met die internet te maak nie. Wat ek kan doen?

    1.    Gaspar Fernandez dijo

      Daar is telefone waarmee u nie as modem kan koppel nie, maar wel met tethering

  6.   Milazzo dijo

    Uitstekende dokumentasie!
    Dankie dat u die tyd geneem het om die ervaring te deel.
    Ek gebruik dit as verwysing vir 'n ander soort probleem wat ek het: Ontkoppeling van die USB-poorte in Ubuntu (# 42 ~ presies1-Ubuntu SMP Wo 14 Aug 15:31:16 UTC 2013)
    Daar kom 'n tyd dat die stelsel 'n -110 in die dmesg gooi en die rekenaar weer begin, daar word aanvaar dat die mislukking te wyte is aan die gebrek aan krag in die USB waar die toestel gekoppel is (USB3.0).

    Nou gebruik ek die lsusb -v om die kragvlak van die toestel te verifieer, maar dit gooi 2mA, wat heeltemal absurd is ... net die LED's verbruik meer as dit ...

    Ek verbind 'n huawei E4 USB-8372G-modem, maar die maksimum krag dui 2mA aan, wat ongelooflik is, nou het die twyfel verander en ander het ontstaan:
    Is MaxPower 'n kenmerk wat standaard op die toestel of in die bedryfstelsel is?
    Is dit 'n parameter van die maksimum krag wat die usb-poort sal lewer?
    As u 'n parameter is
    Kan hierdie parameter gewysig word en ingestel word op die maksimum wat deur die USB-poort (900mAh- 3.0 / 500mAh- 2.0) gegee word?
    As u nie 'n parameter is nie,
    Is dit 'n real-time meetwaarde van die USB-verbruik (onwaarskynlik)?
    As dit 'n ander opsie is, moet u dit aan my verduidelik, want ek twyfel oor die verwysingsinligting.

    Ek twyfel oor hierdie MaxPower-waarde. As u addisionele inligting het, sal ek baie dankbaar wees.

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

    Bus 002-toestel 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-seriële adapter
    bDeviceClass 255 Verskafferspesifieke klas
    iProduct 2 USB2.0-reeks
    MaxPower 96mA
    Bus 002 Toestel 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 kommunikasie
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonymous dijo

    Kan dit op vensters toegepas word?

  8.   carlitoxs dijo

    Baie dankie. Met udisksctl power-off -b / dev / sdc op my eksterne skyf was dit genoeg om die hoofpyn op te los. Sou dit nie beter wees as die ontkoppeling 'n opsie het om dit self te doen nie?

  9.   Marisa dijo

    God wat de fok! Het iemand hierdie hele testament gelees? En bo na die plaat weet ons nog nie hoe om 'n DAC / USB-klankinterface, 'n drukker, 'n grafiese tablet uit te skakel nie ... wel, niks wat nie 'n piek of 'n eksterne skyf is nie. Wat 'n mors van tyd ...