5 manieren om een ​​USB-apparaat los te koppelen en aan te sluiten zonder uw handen van het toetsenbord te halen

In veel gevallen, wanneer we onze computer gebruiken, ontkoppelen we een USB-apparaat (veilig, zoals het moet) en, onmiddellijk daarna, realiseren we ons dat we zijn vergeten een bestand te kopiëren of dat we ervoor moesten zorgen dat er gegevens in onze eenheid. Voor deze gevallen is het meestal erg handig om USB-drives virtueel los te koppelen wanneer u op afstand werkt.

Nadat we het apparaat hebben uitgeworpen, zien we het niet meer in onze lijst met apparaten, maar de harde schijf of pendrive is nog steeds verbonden via de USB-poort, en in veel distributies vandaag, nadat we de schijf veilig hebben uitgeworpen, zien we het apparaat ook niet en We kunnen niet doen monteren vanaf onze terminal. De snelste oplossing is om de kabel los te koppelen en opnieuw aan te sluiten, in sommige gevallen, hetzij vanwege luiheid omdat we moeten opstaan ​​of omdat we toegang hebben tot een computer waar we niet voor staan ​​en er is niemand in de buurt, we kunnen het niet doen .

Informatie over USB-apparaten

Laten we, voordat we beginnen, kijken hoe we informatie kunnen krijgen over USB-apparaten die op het systeem zijn aangesloten. Hiervoor kunnen we gebruik maken van lsusb, waarin de aangesloten apparaten nu worden weergegeven. Ik heb voorbeelden van wat ik nu op mijn computer krijg, maar misschien is het heel anders dan wat jij krijgt:

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

Als we meer informatie willen, kunnen we de -t modifier gebruiken die ons een output laat zien in de vorm van een boom met informatie over de modules:

$ 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 | __ Poort 4: Dev 3, If 0, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Poort 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, Driver = usbhid, 12M | __ Poort 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, If 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, If 1, Class = Wireless, Driver = btusb, 12M

Als we veel meer informatie willen, kunnen we dat gebruiken lsusb-v (de output is erg groot), we zouden bijvoorbeeld ook het maximale vermogen kunnen weten dat aan het apparaat wordt geleverd, op de volgende manier:

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

Andere zeer nuttige opdrachten zijn usb-apparaten, hwinfo, of, bijvoorbeeld, als we het pad van een apparaat hebben (binnen / dev /), kunnen we het systeem vragen om alle mogelijke informatie erover en de subsystemen die het moet doorlopen. Als we bijvoorbeeld een USB-harde schijf aansluiten om te kunnen zien hoe we het apparaat moeten gebruiken, hebben we een SCSI-stuurprogramma nodig (omdat het / dev / sdX is), we hebben ook een USB-opslagstuurprogramma nodig, dat werkt via de USB-poort, die hoort bij een hub, die is aangesloten op een PCI-poort, naast andere tussenliggende systemen. Alles waarmee we konden zien

$ udevadm info --query = pad --naam = / dev / sdX --attribute-walk

o

$ udevadm info -a -n / dev / sdX

Als we ons willen wagen, kunnen we ook binnenkomen / sys / bus / usb en kijk naar alles wat er is, we zullen veel informatie zien, maar gelukkig classificeren de bovenstaande commando's al deze informatie.

Privileges en apparaten

Om deze taak uit te voeren, moeten we weten naar welk apparaat we gaan maak opnieuw verbinding. Om dit te doen, kunnen we uitvoeren:

$ dmesg | tail [Thu Nov 24 19:50:04 2016] sd 7: 0: 0: 0: Bijgevoegd scsi algemeen sg3 type 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 Logische blokken van 512 bytes: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Schrijfbeveiliging is uitgeschakeld [798339.431848] sd 7: 0: 0: 0: [sdc] Mode Sense: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Vragen om cachegegevens mislukt [798339.431996] sd 7: 0: 0: 0: [sdc] Ervan uitgaande dat schijfcache: schrijven door [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Bijgevoegde SCSI-verwijderbare schijf [798360.808588] ISO 9660-extensies: Microsoft Joliet Level 3 [798360.809353] ISO 9660-extensies: RRIP_1991A

In deze uitvoer zullen we zien dat het apparaat waarmee we werken is sdc (sdc1 en sdc2 zouden partities op die schijf zijn). Voor de voorbeelden zal ik dit apparaat gebruiken, in jouw geval zul je moeten visualiseren welk account je hebt.

In de onderstaande voorbeelden zal ik gebruiken sudo om de opdrachten uit te voeren met de rechten van wortel. Hoewel het voldoende zou zijn om een ​​gebruiker met voldoende toestemming te hebben. Als we de nodige privileges willen zien, doe dat dan gewoon ls naar apparaat:

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

Daar zien we dat de eigenaar root is en de groep schijf. Het zou voldoende zijn om een ​​gebruiker te hebben die tot de groepsschijf behoort.

Methode 1. Behandel het als een cd / dvd

Het is de eenvoudigste van allemaal. Als je GNU / Linux al jaren gebruikt, heb je bij het werken met cd-rom of dvd het uitwerpcommando gebruikt. Nou, uitwerpen werd gebruikt om de cd-rom te openen en uitwerpen -t werd gebruikt om de lade te sluiten. Als we dit doen vóór het USB-apparaat:

$ sudo uitwerpen -t / dev / sdc

Het apparaat zou eruit moeten zien alsof we het opnieuw hebben aangesloten.

Methode 2. Niet aangesloten en virtueel aangesloten

Op sommige systemen (zolang de hardware dit ondersteunt), stopt het apparaat met stroomvoorziening wanneer u het USB-apparaat veilig verwijdert en verschijnt het apparaat niet meer. Het is hetzelfde als wanneer u:

udisksctl power-off -b / dev / sdc

In dit geval / Dev / sdc het is mijn apparaat, en met deze opdracht simuleerde het een virtuele stroomonderbreking.

Het probleem is dat / dev / sdc nu niet bestaat, wat meer is, als we naar dmesg kijken, krijgen we zoiets als dit:

$ dmesg | staart [281954.693298] usb1-5: USB-verbinding verbreken, apparaatnummer 3

Dus als we het proberen met de methode van uitwerpen het zal niet werken. Opmerking: ik heb gemarkeerd usb1-5 en we zullen binnenkort zien waarom.

Als u op afstand werkt, kan dit een goed idee zijn. Stel je voor dat je USB-drives hebt aangesloten op de back-up. Wanneer u de kopieën maakt, is het goed voor het systeem om te weten dat er schijven zijn aangesloten, maar als we ze enerzijds niet gebruiken, moeten we energie te besparen en vermijd slijtage van de schijven, dus het is beter om de stroom af te snijden, aan de andere kant, we willen niet dat kwaadwillende apps zien dat ze bestaan deze schijven zodat ze niet geïnfecteerd raken. (Ja, er zijn virussen in GNU / Linux).

Hoe verbinden we de stroom nu?

We moeten de USB-poort bellen, hiervoor is er een project genaamd naafkracht (Ik link naar een vork van het originele project omdat hier een bug is opgelost die de stroom van meer apparaten kan verwijderen en niet alleen degene die we willen). Er zijn meer projecten (zoals uhubctl), maar dit heeft geen afhankelijkheden voor wanneer we gaan compileren, het is ook gewoon een hubpower.c-bestand.
Eerst compileren we het,

$ gcc -o hubpower hubpower.c

Herinner je je nu de vetgedrukte cijfers van de dmesgNou, we gaan ze gebruiken, we zullen het apparaat moeten loskoppelen en opnieuw verbinden, zoals dit:

$ sudo ./hubpower 1: 1 power 5 off Poort 5 status: 0000 Power-Off $ sudo ./hubpower 1: 1 power 5 on Poort 5 status: 0100 Power-On

Als het apparaat ons niet detecteert, kunnen we proberen:

$ sudo ./hubpower 1: 1 bind Bind-driver-verzoek verzonden naar de kernel

Op deze manier zullen we ons aangesloten USB-apparaat weer zien.

Als we geen C-programma willen ... Ik heb het in perl

Een C-programma is moeilijk te compileren en te testen of wat we gaan doen heel eenvoudig is, dus we kunnen deze kleine port proberen in 10 regels gemaakt in perl:

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

We moeten respecteren $ apparaat, het poortnummer (in mijn geval was het 5), het is een waarde in hexadecimaal, daarom wordt 10 A, 11 B, 15 F, 16 is 10 ... We moeten ook het apparaat monitoren en de bus, waartoe we toegang hebben vanaf / dev / bus / usb /001/001moeten de nummers met voorloopnullen zijn, aangezien we dat bestand aanroepen.

Zoals we kunnen zien, bevindt de sleutel zich in ioctl (), het is een functie die parameters van een apparaat manipuleert vanuit een speciaal bestand in het bestandssysteem. Onder de gebruikte hexadecimale waarden vinden we 0xC0185500, een constante genaamd USBDEVFS_CONTROL waarmee we een controlecommando naar het USB-apparaat sturen. De andere codes horen bij het verbroken en verbindingsverzoek (u kunt meer informatie vinden in het programma gemaakt in C).

Methode 3. Het apparaat verbergen en weergeven

Een andere manier om het apparaat los te koppelen kan zijn:

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

En we kunnen het herstellen door te doen:

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

Deze methode leidt niet tot een volledige ontkoppeling van het apparaat. Het zorgt er alleen voor dat het besturingssysteem er niet mee praat en dat veel apparaten, wanneer een computer er niets van wil weten, in de energiebesparende modus gaan, omdat we nergens om zullen vragen.

Methode 4. Apparaatautorisatie

Het nadeel van deze methode is dat in veel systemen meer apparaten tijdelijk kunnen worden uitgeschakeld, wat niet alleen degene is die we nodig hebben, maar we vallen ook een hele USB-hub aan. Bijvoorbeeld:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / geautoriseerde $ echo 1 | sudo tee / sys / bus / usb / devices / usb1 / geautoriseerd

Waarmee we natuurlijk alles op een rij kunnen uitvoeren:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / geautoriseerd; echo 1 | sudo tee / sys / bus / usb / devices / usb1 / geautoriseerd

We moeten voorzichtig zijn, als er meer schijven zijn aangesloten op dezelfde USB-poort (en bijna altijd op onze computers, zijn meerdere USB-poorten dan die we zien intern verbonden met een hub, dus er zijn groepen poorten met dezelfde USB-poort). vader, zeg het op een of andere manier.

Methode 5. Start het USB-subsysteem opnieuw op

Als we het USB-subsysteem willen herstarten. Dat wil zeggen, vernieuw alle USB-apparaten, zoals ze allemaal loskoppelen en aansluiten, enerzijds kunnen we de USB-kernelmodule downloaden en opnieuw laden:

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

Hoewel sommige distributies, de nieuwste versies van Ubuntu en afgeleide producten, de geïntegreerde USB-modules en ze kunnen niet worden gedownload. Aan de andere kant laat het systeem ons ze misschien niet downloaden omdat ze in gebruik zijn vanwege andere modules (printers, opslag, interfaceapparaten, enz.), En als we modules gaan downloaden en dingen kapot maken, moeten we mogelijk opnieuw opstarten de computer uiteindelijk. Dus op een andere manier kunnen we doen:

$ 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

Om ons apparaat te vinden, kunnen we ls doen in / sys / bus / pci / drivers / xhci_hcd, er zullen verschillende dingen verschijnen, we moeten er een zoeken die er zo uitziet aaaa: bb: cc: dd.e. Uw USB-poort komt misschien niet als xhci_hcd (USB3), maar eerder als ehci_hcd (USB2)


14 reacties, laat de jouwe achter

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Cristian zei

    Uitstekend artikel!

    1.    gasparfum zei

      Heel erg bedankt Cristian! Ik hoop dat je het nuttig hebt gevonden.

  2.   Antonio Juan zei

    In dit artikel wordt niet gezegd dat wanneer je het gaat plaatsen, het zich aan de andere kant van de juiste bevindt en je het moet omdraaien ... hehehe. Geweldig artikel.

    1.    gasparfum zei

      Bedankt Antonio Juan! Nou kijk, je weet niet hoe vaak dat mij is overkomen terwijl ik alles probeerde wat ik in de post heb gestopt! 🙂

  3.   ROMSAT zei

    Briljant. Een superieur item. Het zou de titel moeten hebben: "Leer meer over het Linux-systeem door simpelweg je USB-stick los te koppelen en in te pluggen." Gefeliciteerd.
    Groeten uit Malaga.

    1.    gasparfum zei

      Nou ja, ik weet niet of iemand zal beginnen met programmeren in C en toegang krijgt tot apparaten vanuit dit bericht! Ook uit Malaga !! We zijn overal 🙂

  4.   HO2Gi zei

    Indrukwekkend artikel. Je bent met dergelijk materiaal overboord gegaan.

    1.    gasparfum zei

      Bedankt HO2Gi !! Op mijn persoonlijke blog ( http://totaki.com/poesiabinaria ) zijn er ook veel tutorials over de stijl 🙂

  5.   Atahualpa zei

    heel erg bedankt vriend. Ik begin in linux, specifiek in linux mint, en ik heb het volgende probleem: in de console kan ik zien dat mijn telefoon is verbonden met de machine, maar niet in de bestandsbeheerder. En daarom kan ik het niet als modem gebruiken om verbinding te maken met internet. Wat ik kan doen?

    1.    Gaspar Fernandez zei

      Er zijn telefoons waarmee u geen verbinding kunt maken als modem, maar u kunt tethering gebruiken

  6.   Milazzo zei

    Uitstekende documentatie!
    Bedankt dat je de tijd hebt genomen om deze ervaring te delen.
    Ik gebruik het als referentie voor een ander type probleem dat ik heb: Ontkoppeling van de USB-poorten in Ubuntu (# 42 ~ precieze1-Ubuntu SMP wo 14 aug. 15:31:16 UTC 2013)
    Er komt een tijd dat het systeem een ​​-110 in de dmesg gooit en de pc opnieuw opstart. Aangenomen wordt dat de storing te wijten is aan een gebrek aan stroom op de USB waarop het apparaat is aangesloten (USB3.0).

    Nu gebruik ik de lsusb -v om het vermogensniveau van het apparaat te controleren, maar het gooit 2mA, wat volkomen absurd is ... alleen de LED's verbruiken meer dan dat ...

    Ik sluit een huawei E4 USB-8372G-modem aan, maar de maxpower geeft 2mA aan, wat ongelooflijk is, nu is de twijfel veranderd en zijn er andere ontstaan:
    Is MaxPower een kenmerk dat standaard op het apparaat of in het besturingssysteem wordt geleverd?
    Is het een parameter van het maximale vermogen dat de usb-poort zal leveren?
    In het geval dat het een parameter is
    Kan deze parameter worden gewijzigd en ingesteld op het maximum dat wordt gegeven door de USB-poort (900 mAh-3.0 / 500 mAh-2.0)?
    In het geval dat het geen parameter is,
    Is het een realtime meetwaarde van het USB-verbruik (onwaarschijnlijk)?
    Als het een andere optie is, leg het me dan uit, want ik heb twijfels over de verwijzende informatie.

    Ik heb verschillende twijfels over deze MaxPower-waarde, als je aanvullende informatie hebt, zou ik je zeer dankbaar zijn.

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

    Bus 002 Apparaat 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-seriële adapter
    bDeviceClass 255 Leveranciersspecifieke klasse
    iProduct 2 USB2.0-serieel
    MaxPower 96mA
    Bus 002 Apparaat 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2-communicatie
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anoniem zei

    Kan het op ramen worden toegepast?

  8.   Chelo zei

    Hartelijk dank. Met udisksctl power-off -b / dev / sdc op mijn externe schijf was het genoeg om de hoofdpijn op te lossen. Zou het niet beter zijn als de unmount een optie heeft om dit zelf te doen?

  9.   Marisa zei

    Godverdomme! Heeft iemand dit hele testament gelezen? En boven na de plaat weten we nog steeds niet hoe we een DAC / USB-geluidsinterface, een printer, een grafisch tablet ... nou ja, niets dat geen spike of een externe schijf is, moeten uitschakelen. Wat een tijdverspilling ...