Fem sätt att koppla bort och ansluta en USB-enhet utan att ta händerna från tangentbordet

Vid många tillfällen, när vi använder vår dator, kopplar vi bort en USB-enhet (säkert, som den måste vara) och omedelbart efteråt inser vi att vi glömde att kopiera en fil eller att vi var tvungna att se till att en data fanns i vår enhet. För dessa fall är det vanligtvis mycket användbart att nästan koppla bort USB-enheter när vi arbetar på distans.

Efter att ha matat ut enheten ser vi den inte längre i vår lista över enheter, men hårddisken eller pendrive är fortfarande ansluten av USB-porten, och i många distributioner idag, efter att ha matat ut enheten säkert, ser vi inte heller enheten och Vi kan inte göra det montera från vår terminal. Den snabbaste lösningen är att koppla loss kabeln och återansluta den, i vissa fall, antingen på grund av lathet att behöva gå upp eller för att vi använder en dator som vi inte är framför och det finns ingen i närheten, vi kan inte göra det .

Information om USB-enheter

Innan vi börjar, låt oss se hur man får information om USB-enheter anslutna till systemet. För detta kan vi använda lsusb, som listar de anslutna enheterna just nu. Jag lägger exempel på vad jag får på min dator just nu, men kanske är det väldigt annorlunda än vad 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. Hubbus 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

Om vi ​​vill ha mer information kan vi använda modifieraren -t som visar oss en utdata i form av ett träd med information om modulerna:

$ 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, Om 0, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, If 0, Class = Masslagring, Driver = usb-lagring, 480M | __ Port 6: Dev 5, Om 0, Class = Hub, Driver = hub / 4p, 12M | __ Port 4: Dev 7, Om 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, Om 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, If 1, Class = Wireless, Driver = btusb, 12M

Om vi ​​vill ha mycket mer information kan vi använda lsusb -v (utgången är mycket stor), kan vi till exempel också veta den maximala effekten som levereras till enheten enligt följande:

$ lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower" Bus 002 Device 001: ID 1d6b: 0003 Linux Foundation 3.0 root hub MaxPower 0mA Bus 001 Device 006: ID 8087: 0a2a Intel Corp. MaxPower 100mA Bus 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

Andra mycket användbara kommandon är USB-enheter, hwinfo, eller, till exempel, om vi har sökvägen till en enhet (inuti / dev /), kan vi be systemet om all möjlig information om det och de delsystem det måste gå igenom. Om vi ​​till exempel ansluter en USB-hårddisk, för att vi ska kunna se hur enheten används, behöver vi en SCSI-drivrutin (för att vara / dev / sdX), vi behöver också en USB-lagringsdrivrutin, som fungerar genom USB-porten, som tillhör ett nav som är anslutet till en PCI-port, bland andra mellanliggande system. Allt som vi kunde se med

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

o

$ udevadm info -a -n / dev / sdX

Om vi ​​vill våga kan vi också komma in / sys / buss / usb och titta på allt som finns, vi kommer att se mycket information, men lyckligtvis klassificerar ovanstående kommandon all denna information.

Privilegier och enheter

För att utföra denna uppgift måste vi veta vilken enhet vi ska anslut igen. För att göra detta kan vi köra:

$ dmesg | svans [Tor 24 nov 19:50:04 2016] sd 7: 0: 0: 0: Bifogad scsi generisk sg3 typ 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512-byte logiska block: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Skrivskydd är 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 cachedata misslyckades [798339.431996] sd 7: 0: 0: 0: [sdc] Antar att enhetscache: skriv igenom [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Bifogad SCSI-flyttbar disk [798360.808588] ISO 9660-tillägg: Microsoft Joliet nivå 3 [798360.809353] ISO 9660-tillägg: RRIP_1991A

I denna utdata ser vi att enheten vi arbetar med är SDC (sdc1 och sdc2 skulle vara partitioner inom den disken). För exemplen kommer jag att använda den här enheten, i ditt fall måste du visualisera vilket konto du har.

I exemplen nedan kommer jag att använda sudo för att utföra kommandona med privilegierna rot. Även om det skulle vara tillräckligt att ha en användare med tillräcklig behörighet. Om vi ​​vill se nödvändiga privilegier, gör bara ls till enhet:

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

Där ser vi att ägaren är root och gruppen skiva. Det räcker att ha en användare som tillhör gruppdisken.

Metod 1. Behandla den som en CD / DVD

Det är det enklaste av allt. Visst om du har använt GNU / Linux i flera år, när du arbetade med CD-ROM eller DVD använde du utmatningskommandot. Tja, utmatning användes för att öppna CDROM och utmatning -t användes för att stänga facket. Tja, om vi gör det innan USB-enheten:

$ sudo mata ut -t / dev / sdc

Enheten ska se ut som om vi har anslutit den igen.

Metod 2. Unplugged och Virtual Plugged In

I vissa system (så länge som hårdvaran stöder det), när du tar bort USB-enheten på ett säkert sätt, slutar enheten att strömma och enheten visas inte längre. Det är detsamma som när du gör:

udisksctl avstängning -b / dev / sdc

I detta fall, / Dev / sdc det är min enhet, och med det här kommandot simulerade det en virtuell strömavbrott.

Problemet är att nu / dev / sdc inte finns, vad mer, om vi tittar på dmesg får vi något så här:

$ dmesg | svans [281954.693298] USB 1-5: USB-koppling, enhetsnummer 3

Så om vi försöker med metoden för mata ut det kommer inte att fungera. Obs: Jag har markerat USB 1-5 och vi får se varför inom kort.

Om du arbetar på distans kan det vara en bra idé. Tänk dig att du har USB-enheter anslutna till säkerhetskopian. När du gör kopiorna är det bra för systemet att veta att det finns diskar anslutna, men när vi inte använder dem å ena sidan måste vi spara energi och undvik slitage på skivorna, så det är bättre att klippa strömmen å andra sidan, vi vill inte att skadliga appar ska se att de finns dessa skivor så att de inte blir smittade. (Ja, det finns virus i GNU / Linux).

Hur ansluter vi strömmen nu?

Vi måste ringa till USB-porten, för det finns ett projekt som heter navkraft (Jag länkar till en gaffel från det ursprungliga projektet, för här fixas ett fel som kan ta bort strömmen från fler enheter och inte bara den vi vill ha). Det finns fler projekt (som uhubctl), men detta har inga beroenden för när vi går att kompilera, det är också bara en hubpower.c-fil.
Först sammanställer vi det,

$ gcc -o hubpower hubpower.c

Kommer du ihåg numren i fetstil från dmesg? Tja, vi ska använda dem, vi måste koppla bort enheten och ansluta den igen så här:

$ 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

Om enheten inte upptäcker oss kan vi försöka göra:

$ sudo ./hubpower 1: 1 bind Bind-driver-begäran skickas till kärnan

På detta sätt ser vi vår anslutna USB-enhet igen.

Om vi ​​inte vill ha ett C-program ... har jag det i perl

Ett C-program är svårt att sammanställa och testa om det vi ska göra är väldigt enkelt, så vi kan prova den här lilla porten i 10 rader gjorda i perl:

#! / bin / perl kräver "sys / ioctl.ph"; $ device = "05"; öppna (min $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ data = pack ("H *", "23010800". $ enhet. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); $ data = pack ("H *", "23030800". $ enhet. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); stäng ($ usbdev);

Vi måste respektera $ enhetportnumret (i mitt fall var det 5), det är ett hexadecimalt värde, därför kommer 10 att vara A, 11 kommer att vara B, 15 kommer att vara F, 16 kommer att vara 10 ... Vi måste också övervaka enheten och bussen, som vi kommer från / dev / bus / usb /001/001måste siffrorna vara med ledande nollor eftersom vi ringer den filen.

Som vi kan se är nyckeln i ioctl (), det är en funktion som manipulerar parametrar för en enhet från en speciell fil i filsystemet. Bland de hexadecimala värden som används hittar vi 0xC0185500, en konstant som kallas USBDEVFS_CONTROL med vilken vi skickar ett kontrollkommando till USB-enheten. De andra koderna tillhör frånkoppling och anslutningsförfrågan (du kan hitta mer information i programmet gjort i C).

Metod 3. Dölja och visa enheten

Ett annat sätt att koppla bort enheten kan vara:

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

Och vi kan återställa det genom att göra:

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

Denna metod orsakar inte en fullständig frånkoppling av enheten. Det får bara operativsystemet att inte prata med det och många enheter, när en dator inte vill veta något om dem, sätts i lågeffektläge, eftersom vi inte kommer att be om någonting.

Metod 4. Enhetsbehörighet

Nackdelen med denna metod är att i många system kan fler enheter tillfälligt inaktiveras, vilket inte bara är vad vi behöver utan vi attackerar också en hel USB-hubb. Till exempel:

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

Vilket vi naturligtvis kan köra allt i rad:

$ echo 0 | sudo tee / sys / bus / usb / enheter / usb1 / auktoriserad; eko 1 | sudo tee / sys / bus / usb / enheter / usb1 / auktoriserad

Vi måste vara försiktiga, om det finns fler diskar anslutna till samma USB-port (och nästan alltid i våra datorer är flera USB-portar än vi ser internt anslutna till en hub, så det finns grupper av portar med samma USB far, sätt det på något sätt.

Metod 5. Starta om USB-delsystemet

Om vi ​​vill starta om USB-delsystemet. Det vill säga, uppdatera alla USB-enheter, som att koppla ur och ansluta dem alla, å ena sidan kan vi ladda ner och ladda om USB-kärnmodulen:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd # För USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd # För USB3

Även om vissa distributioner, de senaste versionerna av Ubuntu och derivat ingår, har integrerade USB-moduler och de kan inte laddas ner. Å andra sidan kanske systemet inte tillåter oss att ladda ner dem eftersom de används på grund av andra moduler (skrivare, lagring, gränssnittsenheter etc.), och om vi börjar ladda ner moduler och bryta saker kan vi behöva starta om datorn i slutet. Så på ett annat sätt kan vi göra:

$ 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

För att hitta vår enhet kan vi göra ls inuti / sys / bus / pci / drivers / xhci_hcd, flera saker kommer att visas, vi måste leta efter en som ser ut så här aaaa: bb: cc: dd.e. Din USB-port kommer kanske inte som xhci_hcd (USB3), utan snarare ehci_hcd (USB2)


14 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   cristian sade

    Utmärkt artikel!

    1.    gasparfm sade

      Tack så mycket Cristian! Jag hoppas att du har hittat det användbart.

  2.   Antonio juan sade

    I den här artikeln sägs det inte att när du ska sätta den är den på motsatt sida till den rätta och du måste vända på den ... hehehe. Bra artikel.

    1.    gasparfm sade

      Tack Antonio Juan! Tja, du vet inte hur många gånger det har hänt mig medan jag försökte allt jag har lagt i inlägget! 🙂

  3.   ROMSAT sade

    Bra. En överlägsen artikel. Det borde ha titeln: "Lär dig mer om Linux-systemet genom att helt enkelt koppla ur och ansluta USB-minnet." Grattis.
    Hälsningar från Malaga.

    1.    gasparfm sade

      Tja, ja, jag vet inte om någon kommer att börja programmera i C och komma åt enheter från det här inlägget! Också från Malaga !! Vi är överallt 🙂

  4.   HO2Gi sade

    Imponerande artikel. Du har gått överbord med sådant material.

    1.    gasparfm sade

      Tack HO2Gi !! På min personliga blogg ( http://totaki.com/poesiabinaria ) det finns också en hel del tutorials av stilen 🙂

  5.   Atahualpa sade

    tack så mycket min vän. Jag börjar i linux, specifikt i linux mint, och jag har följande problem: i konsolen kan jag se att min telefon är ansluten till maskinen men inte i filhanteraren. Och därför kan jag inte använda det som ett modem för att ansluta till internet. Vad jag kan göra?

    1.    Gaspar Fernandez sade

      Det finns telefoner som inte låter dig ansluta som ett modem, men du kan göra internetdelning

  6.   milazzo sade

    Utmärkt dokumentation!
    Tack för att du tog dig tid att dela upplevelsen.
    Jag använder den som referens för en annan typ av problem som jag har: Frånkoppling av USB-portarna i Ubuntu (# 42 ~ precis1-Ubuntu SMP ons 14 aug 15:31:16 UTC 2013)
    Det kommer en tid då systemet kastar en -110 i dmesg och startar om datorn, det antas att felet beror på brist på ström i USB där enheten är ansluten (USB3.0).

    Nu använder jag lsusb -v för att verifiera enhetens effektnivå men det visar 2mA, vilket är helt absurt ... bara lysdioderna förbrukar mer än så ...

    Jag ansluter ett huawei E4 USB-8372G-modem, men maxeffekten indikerar 2 mA, vilket är otroligt, nu har tvivlet förändrats och andra har uppstått:
    Är MaxPower ett attribut som kommer som standard på enheten eller i operativsystemet?
    Är det en parameter för den maximala effekten som USB-porten kommer att leverera?
    Om det är en parameter
    Kan denna parameter ändras och ställas in till det maximala som USB-porten ger (900mAh- 3.0 / 500mAh- 2.0)?
    Om du inte är en parameter,
    Är det ett mätvärde i realtid av USB-förbrukningen (osannolikt)?
    Om det är ett annat alternativ, förklara för mig eftersom jag tvivlar på referensinformationen.

    Jag har flera tvivel angående detta MaxPower-värde, om du har ytterligare information skulle jag vara mycket tacksam.

    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 Leverantörsspecifik klass
    iProduct 2 USB2.0-seriell
    MaxPower 96mA
    Buss 002 Enhet 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 Communications
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonym sade

    Kan det appliceras på Windows?

  8.   Chelo sade

    Tack så mycket. Med udisksctl power-off -b / dev / sdc på min externa disk räckte det för att lösa huvudvärken. Skulle det inte vara bättre om avmonteringen har möjlighet att göra det själv?

  9.   marisa sade

    Herregud vad fan! Har någon läst hela testamentet? Och ovanför plattan vet vi fortfarande inte hur vi stänger av ett DAC / USB -ljudgränssnitt, en skrivare, en grafisk surfplatta ... ja, inget som inte är en spik eller en extern disk. Vilket slöseri med tid ...