5 způsobů odpojení a připojení zařízení USB, aniž byste museli sundávat ruce z klávesnice

Mnohokrát, když používáme náš počítač, odpojíme zařízení USB (bezpečně, jak to musí být) a hned poté si uvědomíme, že jsme zapomněli zkopírovat soubor nebo že jsme se museli ujistit, že data byla v naše jednotka. V těchto případech je obvykle velmi užitečné virtuálně odpojit USB disky, když pracujeme na dálku.

Po vysunutí zařízení jej již nevidíme v našem seznamu zařízení, ale pevný disk nebo pendrive je stále připojen přes port USB a v mnoha dnešních distribucích, když jsme bezpečně vysunuli disk, také zařízení nevidíme a Nemůžeme to udělat namontovat z našeho terminálu. Nejrychlejším řešením je odpojit kabel a znovu jej připojit, v některých případech buď kvůli lenosti, že musíme vstávat, nebo proto, že přistupujeme k počítači, před kterým nejsme před ním a kolem není nikdo, nemůžeme to udělat .

Informace o USB zařízeních

Než začneme, podívejme se, jak získat informace o zařízeních USB připojených k systému. K tomu můžeme použít lsusb, který zobrazí seznam připojených zařízení právě teď. Právě teď uvádím příklady toho, co dostávám do počítače, ale možná se velmi liší od toho, co získáte:

$ 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 kořenový rozbočovač Linux Foundation 2.0

Pokud chceme více informací, můžeme použít modifikátor -t, který nám ukáže výstup ve formě stromu s informacemi o modulech:

$ 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, pokud 0, třída = bezdrátová, ovladač = btusb, 12M | __ port 9: dev 6, pokud 1, třída = bezdrátová, ovladač = btusb, 12M

Pokud chceme mnohem více informací, můžeme použít lsusb -v (výstup je velmi velký), mohli bychom také například znát maximální výkon dodávaný do zařízení následovně:

$ 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 Zařízení 007: ID 046d: c52b Logitech, Inc. Unifying Receiver MaxPower 98mA Bus 001 Zařízení 005: ID 1a40: 0101 Terminus Technology Inc. Hub MaxPower 100mA Bus 001 Zařízení 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

Další velmi užitečné příkazy jsou USB zařízení, hwinfo, nebo například pokud máme cestu k zařízení (uvnitř / dev /), můžeme požádat systém o všechny možné informace o něm a subsystémech, kterými musí projít. Například pokud připojíme pevný disk USB, abychom mohli vidět, jak zařízení používat, potřebujeme ovladač SCSI (pro bytí / dev / sdX), potřebujeme také ovladač úložiště USB, který funguje prostřednictvím USB port, který patří k rozbočovači, který je zapojen do portu PCI, mimo jiné mezilehlé systémy. Všechno, s čím jsme mohli vidět

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

o

$ udevadm informace -a -n / dev / sdX

Pokud se chceme pustit, můžeme také vstoupit / sys / bus / usb a podívejte se na všechno, co existuje, uvidíme spoustu informací, ale naštěstí výše uvedené příkazy všechny tyto informace klasifikují.

Oprávnění a zařízení

K provedení tohoto úkolu budeme potřebovat vědět, ke kterému zařízení se chystáme znovu připojit. K tomu můžeme spustit:

$ dmesg | ocas [Čt 24. listopadu 19:50:04 2016] sd 7: 0: 0: 0: Připojené scsi generické sg3 typu 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512 bajtů logické bloky: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Ochrana proti zápisu je vypnutá [798339.431848] sd 7: 0: 0: 0: [sdc] Režim snímání: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Žádost o data mezipaměti se nezdařila [798339.431996] sd 7: 0: 0: 0: [sdc] Za předpokladu mezipaměti disku: zápis prostřednictvím [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Připojený vyměnitelný disk SCSI [798360.808588] Rozšíření ISO 9660: Microsoft Joliet úrovně 3 [798360.809353] Rozšíření ISO 9660: RRIP_1991A

V tomto výstupu uvidíme, že zařízení, se kterým pracujeme, je sdc (sdc1 a sdc2 by byly oddíly na tomto disku). Pro příklady, které toto zařízení použiji, budete ve vašem případě muset vizualizovat, který účet máte.

V níže uvedených příkladech použiji sudo provádět příkazy s oprávněními kořen. I když by stačilo mít uživatele s dostatečným oprávněním. Pokud chceme vidět potřebná oprávnění, prostě to udělejte ls do zařízení:

$ ls -latr / dev / sdc brw-rw ---- 1 kořenový disk 8, 32 listopadu 24 19:50 / dev / sdc

Tam vidíme, že vlastníkem je root a skupina disk. Stačilo by mít uživatele patřícího do skupinového disku.

Metoda 1. Zacházejte s ním jako s CD / DVD

Je to nejjednodušší ze všech. Jistě, pokud používáte GNU / Linux už léta, při práci s CD-ROM nebo DVD jste použili příkaz vysunutí. Eject byl použit k otevření CDROM a eject -t byl použit k uzavření zásobníku. Pokud to uděláme před zařízením USB:

$ sudo eject -t / dev / sdc

Zařízení by mělo vypadat, jako bychom jej znovu připojili.

Metoda 2. Unplugged a Virtual Plug In

V některých systémech (pokud to hardware podporuje), když bezpečně odpojíte zařízení USB, zařízení přestane napájet a zařízení se již nebude zobrazovat. Je to stejné, jako když:

udisksctl power-off -b / dev / sdc

V tomto případě / dev / sdc je to moje zařízení a tímto příkazem simulovalo odpojení virtuálního napájení.

Problém je v tom, že nyní / dev / sdc neexistuje, navíc když se podíváme na dmesg, dostaneme něco jako toto:

$ dmesg | ocas [281954.693298] USB 1-5: USB odpojení, zařízení číslo 3

Takže pokud to zkusíme metodou vysunout to nebude fungovat. Poznámka: Zvýraznil jsem USB 1-5 a brzy uvidíme proč.

Pokud pracujete na dálku, může to být dobrý nápad. Představte si, že máte k zálohování připojené jednotky USB. Když vytváříte kopie, je dobré, že systém ví, že jsou připojeny disky, ale když je nepoužíváme, musíme na jedné straně šetří energii a vyvarujte se opotřebení disků, takže je lepší snížit proud, na druhou stranu, nechceme, aby škodlivé aplikace viděly, že existují tyto disky, aby se nenakazily. (Ano, v GNU / Linux existují viry).

Jak nyní připojíme proud?

Musíme zavolat na port USB, protože k tomu existuje projekt rozbočovač (I link to a fork of the original project because here a bug is fixed that can remove the current from more devices and not just the one we want). Existuje více projektů (jako uhubctl), ale to nemá žádné závislosti, když půjdeme ke kompilaci, je to také jen soubor hubpower.c.
Nejprve to sestavíme,

$ gcc -o hubpower hubpower.c

Nyní si pamatujete čísla tučně z dmesg? Budeme je používat, budeme muset zařízení odpojit a znovu připojit, například takto:

$ sudo ./hubpower 1: 1 vypnuto 5 stav portu 5: 0000 Vypnuto $ sudo ./hubpower 1: 1 zapnuto 5 na portu 5 stav: 0100 zapnuto

Pokud nás zařízení nedetekuje, můžeme zkusit udělat:

$ sudo ./hubpower 1: 1 bind Bind-driver request sent to the kernel

Tímto způsobem uvidíme naše připojené zařízení USB znovu.

Pokud nechceme program C ... mám ho v perlu

Program C je těžké sestavit a otestovat, jestli to, co budeme dělat, je velmi jednoduché, takže můžeme vyzkoušet tento malý port v 10 řádcích vytvořených v perlu:

#! / bin / perl vyžadují "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); zavřít ($ usbdev);

Musíme respektovat $ zařízení, číslo portu (v mém případě to bylo 5), jedná se o hexadecimální hodnotu, proto 10 bude A, 11 bude B, 15 bude F, 16 bude 10 ... Musíme také monitorovat zařízení a autobus, ke kterému přistupujeme z / dev / bus / usb /001/001, čísla musí být s úvodními nulami, protože voláme tento soubor.

Jak vidíme, klíč je v ioctl (), jedná se o funkci, která manipuluje s parametry zařízení ze speciálního souboru v systému souborů. Mezi použitými hexadecimálními hodnotami najdeme 0xC0185500, konstanta zvaná USBDEVFS_CONTROL, se kterou pošleme řídicí příkaz na USB zařízení, ostatní kódy patří k požadavku na odpojení a připojení (více informací najdete v programu vytvořeném v C).

Metoda 3. Skrytí a zobrazení zařízení

Dalším způsobem, jak zařízení odpojit, může být:

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

A můžeme to obnovit tím, že:

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

Tato metoda nezpůsobí úplné odpojení zařízení. Pouze to způsobí, že s ním operační systém nebude mluvit a mnoho zařízení, když o nich počítač nechce nic vědět, se přepne do režimu nízké spotřeby, protože o nic nebudeme žádat.

Metoda 4. Autorizace zařízení

Nevýhodou této metody je, že v mnoha systémech lze dočasně deaktivovat více zařízení, což je nejen to, co potřebujeme, ale také napadáme celý rozbočovač USB. Například:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / authorized $ echo 1 | sudo tee / sys / bus / usb / devices / usb1 / autorizované

Což samozřejmě můžeme spustit vše za sebou:

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

Musíme být opatrní, pokud je ke stejnému portu USB připojeno více disků (a téměř vždy v našich počítačích je několik portů USB než těch, které vidíme, interně připojeno k rozbočovači, takže existují skupiny portů se stejným USB otec, řekněte to nějakým způsobem.

Metoda 5. Restartujte subsystém USB

Pokud chceme restartovat USB subsystém. To znamená, že obnovíte všechna zařízení USB, jako je odpojení a připojení všech, na jednu stranu si můžeme stáhnout a znovu načíst modul jádra USB:

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

Ačkoli některé distribuce, včetně nejnovějších verzí Ubuntu a jejich derivátů, mají integrované USB moduly a nelze je stáhnout. Na druhou stranu nám systém nemusí umožnit jejich stažení, protože se používají kvůli jiným modulům (tiskárny, úložiště, zařízení rozhraní atd.), A pokud začneme stahovat moduly a rozbít věci, možná budeme muset na konci restartujte počítač. Jiným způsobem tedy můžeme:

$ 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

Abychom našli naše zařízení, můžeme udělat ls uvnitř / sys / bus / pci / drivers / xhci_hcd, objeví se několik věcí, musíme hledat ten, který vypadá takto aaaa: bb: cc: dd.e. Váš USB port nemusí být xhci_hcd (USB3), ale spíše ehci_hcd (USB2)


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   Cristian řekl

    Výborný článek!

    1.    gasparfm řekl

      Moc děkuji Cristianovi! Doufám, že vám to přišlo užitečné.

  2.   Antonio juan řekl

    V tomto článku se neříká, že kdykoli to řeknete, je na opačné straně než ta správná a musíte to otočit ... hehehe. Skvělý článek.

    1.    gasparfm řekl

      Díky Antonio Juan! Podívej, nevíš, kolikrát se mi to stalo, když jsem zkoušel všechno, co jsem do příspěvku vložil! 🙂

  3.   ROMSAT řekl

    Skvělý. Vynikající položka. Název by měl být: „Dozvíte se o systému Linux jednoduchým odpojením a připojením USB flash disku.“ Gratulujeme.
    Zdravím z Malagy.

    1.    gasparfm řekl

      No ano, nevím, jestli někdo začne programovat v C a přistupovat k zařízením z tohoto příspěvku! Také z Malagy !! Jsme všude 🙂

  4.   HO2Gi řekl

    Působivý článek. S takovým materiálem jste přešli přes palubu.

    1.    gasparfm řekl

      Díky HO2Gi !! Na mém osobním blogu ( http://totaki.com/poesiabinaria ) existuje také spousta výukových programů tohoto stylu 🙂

  5.   atahualpa řekl

    Děkuji ti mnohokrát příteli. Začínám v linuxu, konkrétně v linuxové mincovně, a mám následující problém: v konzole vidím, že můj telefon je připojen ke stroji, ale ne ve správci souborů. A proto jej nemohu použít jako modem pro připojení k internetu. Co mohu udělat?

    1.    Gašpar Fernandez řekl

      Existují telefony, které vám neumožňují připojení jako modem, ale můžete to udělat Tethering

  6.   Milazzo řekl

    Vynikající dokumentace!
    Děkujeme, že jste si našli čas a sdíleli zkušenosti.
    Používám to jako referenci pro jiný typ problému, který mám: Odpojení USB portů v ubuntu (# 42 ~ precision1-Ubuntu SMP St 14. srpna 15:31:16 UTC 2013)
    Přijde čas, kdy systém hodí -110 do dmesg a restartuje počítač, předpokládá se, že porucha je způsobena nedostatkem energie na USB, kde je zařízení připojeno (USB3.0).

    Nyní používám lsusb -v ke kontrole úrovně výkonu zařízení, ale hodí 2mA, což je naprosto absurdní ... pouze LED diody spotřebovávají více než to ...

    Připojuji huawei E4 USB-8372G modem, ale maxpower ukazuje 2mA, což je neuvěřitelné, nyní se pochybnosti změnily a vznikly další:
    Je MaxPower atribut, který je ve výchozím nastavení dodáván v zařízení nebo v operačním systému?
    Je to parametr maximálního výkonu, který USB port přinese?
    V případě, že jde o parametr
    Lze tento parametr upravit a nastavit na maximum dané portem USB (900 mAh - 3.0 / 500 mAh - 2.0)?
    V případě, že se nejedná o parametr,
    Je to hodnota měření spotřeby USB v reálném čase (nepravděpodobná)?
    Pokud se jedná o jinou možnost, vysvětlete mi to, protože mám pochybnosti o referenčních informacích.

    O této hodnotě MaxPower mám několik pochybností, pokud máte nějaké další informace, byl bych vám velmi vděčný.

    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 Specifická třída dodavatele
    iProduct 2 USB2.0-Serial
    Max. Síla 96 mA
    Bus 002 Device 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    Komunikace bDeviceClass 2
    iProduct 2 HUAWEI_MOBILE
    Max. Výkon 2 mA

  7.   Anonymní řekl

    Lze jej použít na okna?

  8.   Chelo řekl

    Díky moc. S udisksctl power-off -b / dev / sdc na mém externím disku to stačilo k vyřešení bolesti hlavy. Nebylo by lepší, kdyby měl odpojení možnost to udělat sám?

  9.   Marisa řekl

    Bože, co to kurva! Přečetl si někdo celou tuto závěť? A výše po desce ještě nevíme, jak vypnout zvukové rozhraní DAC / USB, tiskárnu, grafický tablet ... no, nic, co není špice nebo externí disk. Jaká ztráta času ...