5 maneres de desconnectar i connectar un dispositiu USB sense retirar les mans de el teclat

En multitud d'ocasions, quan estem utilitzant el nostre ordinador desconnectem un dispositiu USB (de forma segura, com ha de ser) i, tot seguit, ens adonem que se'ns va oblidar copiar un arxiu o que havíem de assegurar-nos que una dada estava en la nostra unitat. Per a aquests casos sol ser molt útil desconnectar virtualment els discs USB quan treballem en remot.

A l'haver expulsat el dispositiu, ja no el veiem a la nostra llista de dispositius, però el disc dur o pendrive segueix connectat pel port USB, i en moltes distribucions avui dia, a l'haver expulsat la unitat amb seguretat, tampoc veiem el dispositiu i no podem fer muntar des del nostre terminal. La solució més ràpida és desconnectar el cable i tornar-lo a connectar, en alguns casos, ja sigui per mandra d'haver de aixecar-nos o perquè estem accedint a un equip que no tenim davant i no hi ha ningú a prop, no podem fer-ho.

Informació sobre dispositius USB

Abans de començar, veurem com obtenir informació sobre dispositius USB connectats a sistema. Per a això, podem utilitzar lsusb, Que llistarà els dispositius connectats ara mateix. Poso exemples del que obtinc en el meu equip ara mateix, però potser és molt diferent del que obtinguis tu:

$ 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 root hub

Si volem més informació, podem utilitzar el modificador -t que ens mostrarà una sortida en forma d'arbre amb informació sobre els mòduls:

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

Si volem molta més informació, podem utilitzar lsusb -v (La sortida és molt gran), a més podríem, per exemple, saber la màxima potència que es lliura a el dispositiu, de la següent manera:

$ 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 device 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 root hub Maxpower 0mA

Altres ordres molt útils són usb-devices, hwinfoO, per exemple, si tenim la ruta d'un dispositiu (dins / dev /), podem demanar-li a sistema tota la informació possible sobre el mateix i els subsistemes pels que ha de passar. Per exemple, si connectem un disc dur USB, per a nosaltres poder veure utilitzar el dispositiu, ens cal un driver SCSI (per ser / dev / sdX), ens cal també un controlador d'emmagatzematge USB, que funciona a través del port USB, que pertany a un hub, que està endollat ​​a un port PCI, entre d'altres sistemes intermedis. Tot això podríem veure-ho amb

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

o

$ Udevadm info -a -n / dev / sdX

Si volem aventurar, també podem entrar en / Sys / bus / usb i mirar tot el que hi ha, veurem molta informació, però afortunadament les ordres anteriors classifiquen tota aquesta informació.

Privilegis i dispositius

Per dur a terme aquesta tasca necessitarem conèixer quin dispositiu anem a reconnectar. Per a això, podem executar:

$ Dmesg | tail [dj 24 nov 19:50:04 2016] sd 7: 0: 0: 0: Attached SCSI generic SG3 type 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512-byte logical blocks: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Write Protect is off [798339.431848] sd 7: 0: 0: 0: [sdc] Mode Sense: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Asking for cache data failed [798339.431996] sd 7: 0: 0: 0: [sdc] Assuming drive cache: write through [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd juliol : 7: 0: 0: [sdc] Attached SCSI una arrencada amb disk [0] ISO 798360.808588 Extensions: Microsoft Joliet Level 9660 [3] ISO 798360.809353 Extensions: RRIP_9660A

En aquesta sortida, veurem que el dispositiu amb el qual treballem és sdc (Sdc1 i sdc2 serien particions dins d'aquest disc). Per als exemples utilitzaré aquest dispositiu, en el teu cas hauràs de visualitzar amb quin comptes.

En els exemples que es detallen a continuació faré servir suo per executar les ordres amb privilegis de root. Encara que n'hi hauria prou amb tenir un usuari amb permís suficient. Si volem veure els privilegis necessaris, només cal fer ls a el dispositiu:

$ Ls -latr / dev / sdc BRW-rw ---- 1 root disk 8, 32 novembre 24 19:50 / dev / sdc

Aquí veiem que l'amo és root i el grup disk. N'hi hauria prou amb tenir un usuari que pertany a el grup disk.

Mètode 1. Tractar-lo com si fos un CD / DVD

És el més senzill de tots. Segur que si portes anys en GNU / Linux, quan treballaves amb CD-ROM o DVD utilitzaves la comanda eject. Bé, eject servia per obrir el CDROM i eject -t serveix per tancar la safata. Doncs bé, si fem això davant el llapis:

$ Sudo eject -t / dev / sdc

El dispositiu hauria d'aparèixer com si ho haguéssim connectat de nou.

Mètode 2. Desendollat ​​i endollat ​​virtual

En alguns sistemes (sempre que el maquinari el suport), quan retires el dispositiu USB amb seguretat, es deixa d'alimentar el dispositiu i aquest ja no apareix. És el mateix que quan es fa:

udisksctl power-off -b / dev / sdc

En aquest cas, / dev / sdc és el meu dispositiu, i amb aquesta comanda va simular una desconnexió energètica virtual.

El problema és que ara / dev / sdc no existeix, és més, si mirem dmesg, obtindrem alguna cosa així:

$ Dmesg | tail [281954.693298] usb 1-5: USB disconnect, device number 3

Llavors si provem amb el mètode de expulsar no funcionarà. Nota: He destacat usb 1-5 i en breu veurem per què.

Si treballes en remot, això pot ser una bona idea. Imagina que tens discos USB connectats per fer còpies de seguretat. Quan estàs realitzant les còpies sí que va bé que el sistema sàpiga que hi ha discs adjunts, i quan no estem utilitzant-per una banda hem de estalviar energia i evitar el desgast dels discos, per la qual cosa és millor tallar el corrent, d'altra banda, no volem que aplicacions malicioses vegin que hi aquests discos perquè no s'infectin. (Sí, en GNU / Linux hi ha virus).

Com connectem ara el corrent?

Hem de fer una crida a l'port USB, per això hi ha un projecte anomenat hubpower (Enllaço a un fork de el projecte original perquè aquí s'arregla un bug que pot llevar-li el corrent a més dispositius i no només a què volem). Hi ha més projectes (com uhubctl), Però aquest no té dependències per quan anem a compilar, a més és només un arxiu hubpower.c.
Primer, el compilem,

$ Gcc -o hubpower hubpower.c

Ara, recordeu els números en negreta de l' dmesg?, Ja que els utilitzarem, haurem de desconnectar el dispositiu i tornar a connectar, així:

$ Sudo ./hubpower 1: 1 power maig off Port maig a l'estat: 5 Power-Off $ sudo ./hubpower 5: 0000 power 1 on Port maig a l'estat: 1 Power-On

Si no ens detecta el dispositiu, podem provar fer:

$ Sudo ./hubpower 1: 1 bind Bind-driver request vaig sentir to the nucli

D'aquesta manera, tornarem a veure el nostre dispositiu USB connectat.

Si no volem un programa en C ... el tinc en perl

Un programa en C és dur per compilar i provar si el que farem és molt senzill, així que podem provar aquest petit port en 10 línies fet en perl:

#! / Bin / perl requereix "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); close ($ usbdev);

hem de respectar $ device, El nombre de port (en el meu cas era el 5), és un valor en hexadecimal, per tant el 10 serà A, 11 serà B, 15 serà F, 16 serà 10 ... També hem de vigilar el dispositiu i el bus, als quals accedim des / dev / bus / usb /001/001, Els números han d'anar amb zeros a l'esquerra ja que estem trucant a aquest arxiu.

Com veiem, la clau està en ioctl (), és una funció que manipula paràmetres d'un dispositiu a partir d'un fitxer especial en el sistema d'arxius. Entre els valors hexadecimals utilitzats, trobem 0xC0185500, Una constant anomenada USBDEVFS_CONTROL amb la qual enviarem un comando de control a el llapis USB Els altres codis pertanyen a la petició de desconnexió i connexió (podeu trobar més informació al programa fet en C).

Mètode 3. Ocultant i mostrant el dispositiu

Una altra manera de desconnectar el dispositiu podria ser:

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

I podrem recuperar fent:

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

Aquest mètode, no causa una desconnexió completa de el dispositiu. Només fa que el sistema operatiu no parli amb ell i molts dispositius, quan un ordinador no vol saber res d'ells, es posen en mode baix consum, ja que no els demanarem res.

Mètode 4. Autorització de el dispositiu

El dolent d'aquest mètode és que en molts sistemes es poden desactivar temporalment més dispositius, que no són només el que necessitem, sinó que ataquem a tot un hub USB. Per exemple:

$ Echo 0 | suo tee / sys / bus / usb / devices / USB1 / authorized $ echo 1 | suo tee / sys / bus / usb / devices / USB1 / authorized

Que, per descomptat ho podem executar tot seguit:

$ Echo 0 | suo tee / sys / bus / usb / devices / USB1 / authorized; echo 1 | suo tee / sys / bus / usb / devices / USB1 / authorized

Hem de tenir cura, si hi ha més discs adjunts a el mateix port USB (i gairebé sempre en els nostres ordinadors diversos ports USB dels que veiem estan connectats internament a un hub, de manera que hi ha grups de ports amb la mateixa USB pare, Per dir-ho d'alguna manera.

Mètode 5. reiniciar el subsistema USB

Si volem reiniciar el subsistema USB. És a dir, refrescar tots els dispositius USB, com desendollar i endollar tots, d'una banda podem descarregar i recarregar el mòdul USB de l'nucli:

$ Sudo modprobe -r ehci_hcd; suo modprobe ehci_hcd #per USB2 $ sudo modprobe -r xhci_hcd; suo modprobe xhci_hcd #per USB3

Encara que algunes distribucions, les últimes versions d'Ubuntu i derivades incloses, tenen els mòduls USB integrats i no poden ser descarregats. D'altra banda, pot ser que el sistema no ens deixi descarregar-los per estar en ús a causa d'altres mòduls (impressores, emmagatzematge, dispositius d'interfície, etc), i si ens posem a descarregar mòduls i trencar coses potser ens toqui reiniciar l'equip a al final. Així que, d'una altra manera podem fer:

$ Echo '0000:00:14.5'| suo tee / sys / bus / pci / drivers / xhci_hcd / unbind $ echo '0000:00:14.5'| suo tee / sys / bus / pci / drivers / xhci_hcd / bind

Per trobar el nostre dispositiu, podem fer ls dins / sys / bus / pci / drivers / xhci_hcd, apareixeran diverses coses, hem de buscar una que s'assembli a això aaaa: bb: cc: dd.e. Potser el teu port USB no vingui com xhci_hcd (USB3), sinó que vingui com ehci_hcd (USB2)


14 comentaris, deixa el teu

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Cristian va dir

    Excel·lent article!

    1.    gasparfm va dir

      Moltes gràcies Cristian! Espero que t'hagi resultat útil.

  2.   Antonio Juan va dir

    En aquest article no es parla que sempre que vas a ficar-lo està d'el costat contrari a l'correcte i cal donar-li la volta ... jejeje. Fantàstic article.

    1.    gasparfm va dir

      Gràcies Antonio Juan! Doncs mira, no saps la de vegades que m'ha passat això correctament durant la comprovació tot el que he posat en el post !!! 🙂

  3.   ROMSAT va dir

    Genial. Un article superior. Hauria de titular: «Aprèn sobre el sistema Linux a través d'simple fet de desconnectar i connectar el teu llapis USB.» Felicitats.
    Una salutació des de Màlaga.

    1.    gasparfm va dir

      Doncs sí, no sé si algú s'iniciarà en això de programar en C i l'accés a dispositius a partir d'aquest post !! 'També de Màlaga !! Estem a tot arreu 🙂

  4.   HO2Gi va dir

    Impressionant article. Et as passat amb semblant material.

    1.    gasparfm va dir

      Gràcies HO2Gi !! En el meu bloc personal ( http://totaki.com/poesiabinaria ) També hi ha un munt de tutorials de l'estil 🙂

  5.   Atahualpa va dir

    moltes gràcies amic. Estic iniciándome en linux, específicament en linux mint, i tinc el següent problema: a la consola puc veure que el meu telèfon està connectat a la màquina però en el gestor de fitxers no. I per tant no puc usar-lo com mòdem per connectar-me a internet. Que puc fer?

    1.    Gaspar Fernández va dir

      Hi ha telèfons que no et deixen connectar com a mòdem, però pots fer Tethering

  6.   Milazzo va dir

    Excel·lent documentació!
    Gràcies per dedicar el teu temps a compartir l'experiència.
    Ho estic fent servir de referència per a un altre tipus de problema que tinc: desconnexió dels ports USB en ubuntu (# 42 ~ precise1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013)
    Arriba un moment en el Sistema que llança un -110 al dmesg i reinicia el PC, se suposa que la falla és per falta de potència en l'USB on es connecta el dispositiu (USB3.0).

    Ara faig servir el lsusb -v per verificar el nivell de potència de el dispositiu però aquest llança 2mA, cosa que és totalment absurda ... només els led consumeixen mes que això ...

    Connecto un mòdem-USB-4G Huawei E8372, però el Maxpower indica 2mA, cosa increïble, ara el dubte canvi i van sorgir altres:
    ¿El Maxpower és un atribut que ve per defecte de l'dispositiu o al SO?
    És un parametre de la màxima potència que lliurés el port usb?
    En cas de ser un paràmetre
    ¿Es pot modificar aquest paràmetre i establir a el màxim atorgat pel port USB (900mAh- 3.0 / 500mAh- 2.0)?
    En cas de no ser un paràmetre,
    És un valor de mesurament a temps real de l'consum que hi ha per l'USB (improbable)?
    Si és una altra opció si us plau Explicame ja que estic amb dubtes de la informació referencial.

    Quedi amb diversos dubtes respecte a aquest valor Maxpower si tenen alguna informació addicional els estaria molt agraït.

    lsusb -v 2> / dev / null | egrep «^ Bus | Maxpower | bDeviceClass | iProduct»

    Bus 002 Device 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-Serial adapter
    bDeviceClass 255 Vendor Specific Class
    iProduct 2 USB2.0-Serial
    Maxpower 96mA
    Bus 002 Device 008: ID 12d1: 14db Huawei Technologies Co, Ltd
    bDeviceClass 2 Communications
    iProduct 2 HUAWEI_MOBILE
    Maxpower 2mA

  7.   Anònim va dir

    Es pot aplicar a Windows?

  8.   Chelo va dir

    Moltes gràcies. Amb udisksctl power-off -b / dev / sdc sobre el meu disc extern va arribar per solucionar el mal de cap. ¿No seria millor que el unmount tingui una opció per fer això mateix?

  9.   Marisa va dir

    Déu, què c * Nazo! Algú s'ha llegit aquest testament sencer? I a sobre després de la xapa seguim sense saber com s'apaga un DAC / interfície de so USB, una impressora, una tauleta gràfica ... en fi, res que no sigui una punxa o un disc extern. Vagi pèrdua de temps ...