5 sposobów odłączania i podłączania urządzenia USB bez odrywania rąk od klawiatury

Przy wielu okazjach, kiedy korzystamy z naszego komputera, odłączamy urządzenie USB (bo tak jest bezpiecznie) i zaraz potem zdajemy sobie sprawę, że zapomnieliśmy skopiować plik lub że musieliśmy się upewnić, że dane zostały w naszej jednostce. W takich przypadkach zwykle bardzo przydatne jest wirtualne odłączanie dysków USB, gdy pracujemy zdalnie.

Po wysunięciu urządzenia nie widzimy go już na naszej liście urządzeń, ale dysk twardy lub pendrive jest nadal podłączony przez port USB, aw wielu dystrybucjach dziś, po bezpiecznym wysunięciu dysku, również nie widzimy urządzenia i Nie możemy tego zrobić uchwyt z naszego terminala. Najszybszym rozwiązaniem jest odłączenie kabla i ponowne podłączenie, w niektórych przypadkach albo z powodu lenistwa konieczności wstawania, albo z powodu dostępu do komputera, przed którym nie stoimy i nikogo nie ma w pobliżu, nie możemy tego zrobić.

Informacje o urządzeniach USB

Zanim zaczniemy, zobaczmy, jak uzyskać informacje o urządzeniach USB podłączonych do systemu. Do tego możemy użyć lsusb, który wyświetli teraz listę podłączonych urządzeń. Podaję przykłady tego, co mam teraz na moim komputerze, ale może jest to bardzo różne od tego, co otrzymujesz:

$ lsusb Magistrala 002 Urządzenie 001: ID 1d6b: 0003 Główny koncentrator Linux Foundation 3.0 Magistrala 001 Urządzenie 006: ID 8087: 0a2a Intel Corp. Bus 001 Urządzenie 007: ID 046d: c52b Logitech, Inc. Unifying Receiver Bus 001 Urządzenie 005: ID 1a40 : 0101 Terminus Technology Inc. Hub Bus 001 Urządzenie 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive Bus 001 Urządzenie 003: ID 04f2: b424 Chicony Electronics Co., Ltd Bus 001 Urządzenie 001: ID 1d6b : 0002 Główny koncentrator Linux Foundation 2.0

Jeśli chcemy uzyskać więcej informacji, możemy użyć modyfikatora -t, który pokaże nam wynik w postaci drzewa z informacjami o modułach:

$ 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, Jeśli 0, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, If 0, Class = Pamięć masowa, sterownik = pamięć usb, 480 M | __ Port 6: wersja deweloperska 5, jeśli 0, klasa = koncentrator, sterownik = koncentrator / 4 p, 12 M | __ Port 4: wersja 7, jeśli 0, klasa = urządzenie interfejsu ludzkiego, 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, Jeśli 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, If 1, Class = Wireless, Driver = btusb, 12M

Jeśli chcemy znacznie więcej informacji, możemy użyć lsusb -v (moc jest bardzo duża) moglibyśmy też np. poznać maksymalną moc jaka jest dostarczana do urządzenia w następujący sposób:

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

Inne bardzo przydatne polecenia to urządzenia USB, hwinfolub np. jeśli mamy ścieżkę do urządzenia (wewnątrz / dev /), możemy poprosić system o wszelkie możliwe informacje na jego temat i podsystemy, przez które musi przejść. Na przykład, jeśli podłączymy dysk twardy USB, abyśmy mogli zobaczyć, jak urządzenie jest używane, potrzebujemy sterownika SCSI (do bycia / dev / sdX), potrzebujemy również sterownika pamięci USB, który działa przez port USB, który należy do koncentrator, który jest podłączony do portu PCI, wśród innych systemów pośrednich. Wszystko, co mogliśmy zobaczyć

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

o

$ udevadm info -a -n / dev / sdX

Jeśli chcemy zaryzykować, możemy też wejść / sys / bus / usb i spójrz na wszystko, co jest, zobaczymy wiele informacji, ale na szczęście powyższe polecenia klasyfikują wszystkie te informacje.

Uprawnienia i urządzenia

Aby wykonać to zadanie, będziemy musieli wiedzieć, do którego urządzenia się wybieramy na nowo połączyć. Aby to zrobić, możemy uruchomić:

$ dmesg | tail [Thu Nov 24 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-bajtowe bloki logiczne: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Ochrona przed zapisem jest wyłączona [798339.431848] sd 7: 0: 0: 0: [sdc] Poczucie trybu: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Pytanie o dane w pamięci podręcznej nie powiodło się [798339.431996] sd 7: 0: 0: 0: [sdc] Przy założeniu pamięci podręcznej dysku: zapis przez [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Dołączony dysk wymienny SCSI [798360.808588] Rozszerzenia ISO 9660: Microsoft Joliet Level 3 [798360.809353] Rozszerzenia ISO 9660: RRIP_1991A

Na tym wyjściu zobaczymy, że urządzenie, z którym pracujemy, to Sdc (sdc1 i sdc2 byłyby partycjami na tym dysku). W przykładach użyję tego urządzenia, w twoim przypadku będziesz musiał wizualizować, jakie masz konto.

W poniższych przykładach użyję sudo do wykonywania poleceń z uprawnieniami korzeń. Chociaż wystarczyłoby mieć użytkownika z wystarczającymi uprawnieniami. Jeśli chcemy zobaczyć niezbędne przywileje, po prostu zrób to ls do urządzenia:

$ ls -latr / dev / sdc brw-rw ---- 1 dysk główny 8, 32 24 listopada 19:50 / dev / sdc

Tam widzimy, że właścicielem jest root i grupa dysk. Wystarczyłoby mieć użytkownika należącego do dysku grupowego.

Metoda 1. Traktuj to jak dysk CD / DVD

To jest najprostsze ze wszystkich. Z pewnością, jeśli używasz GNU / Linuksa od lat, kiedy pracujesz z CD-ROM lub DVD, użyłeś polecenia eject. Cóż, wysunięcie zostało użyte do otwarcia CDROM, a wysunięcie -t zostało użyte do zamknięcia tacy. Cóż, jeśli zrobimy to przed urządzeniem USB:

$ sudo eject -t / dev / sdc

Urządzenie powinno wyglądać tak, jakbyśmy je ponownie podłączyli.

Metoda 2. Odłączony i podłączony wirtualnie

W niektórych systemach (o ile obsługuje je sprzęt), po bezpiecznym odłączeniu urządzenia USB urządzenie przestaje się włączać i nie pojawia się. Działa tak samo, jak wtedy:

udisksctl power-off -b / dev / sdc

W tym przypadku / dev / sdc to moje urządzenie i za pomocą tego polecenia symuluje wirtualne odłączenie zasilania.

Problem w tym, że teraz / dev / sdc nie istnieje, co więcej, jeśli spojrzymy na dmesg, otrzymamy coś takiego:

$ dmesg | ogon [281954.693298] USB 1-5: Odłączenie USB, numer urządzenia 3

Więc jeśli spróbujemy z metodą wyrzucać to nie zadziała. Uwaga: zaznaczyłem USB 1-5 a wkrótce zobaczymy, dlaczego.

Jeśli pracujesz zdalnie, może to być dobry pomysł. Wyobraź sobie, że masz podłączone dyski USB do tworzenia kopii zapasowych. Podczas wykonywania kopii dobrze, że system wie, że są podłączone dyski, ale gdy ich nie używamy, z jednej strony musimy oszczędzać energię i unikaj zużycia tarcz, dlatego z drugiej strony lepiej odciąć prąd, nie chcemy, aby złośliwe aplikacje widziały, że istnieją te dyski, aby nie zostały zainfekowane. (Tak, w systemie GNU / Linux są wirusy).

Jak teraz łączymy prąd?

Musimy nawiązać połączenie z portem USB, w tym celu istnieje projekt o nazwie moc piasty (Podaję link do rozwidlenia oryginalnego projektu, ponieważ tutaj naprawiono błąd, który może usunąć prąd z większej liczby urządzeń, a nie tylko tego, którego chcemy). Jest więcej projektów (np uhubctl), ale nie ma żadnych zależności, kiedy przechodzimy do kompilacji, jest to również plik hubpower.c.
Najpierw go kompilujemy,

$ gcc -o hubpower hubpower.c

Czy pamiętasz teraz pogrubione liczby z dmesgCóż, będziemy ich używać, będziemy musieli odłączyć urządzenie i podłączyć je ponownie, na przykład:

$ sudo ./hubpower 1: 1 zasilanie 5 wyłączone Status portu 5: 0000 Wyłączony $ sudo ./hubpower 1: 1 zasilanie 5 włączone Status portu 5: 0100 Włączony

Jeśli urządzenie nas nie wykryje, możemy spróbować:

$ sudo ./hubpower 1: 1 bind Żądanie powiązania sterownika wysłane do jądra

W ten sposób ponownie zobaczymy nasze podłączone urządzenie USB.

Jeśli nie chcemy programu w C ... mam go w perlu

Program w C jest trudny do skompilowania i przetestowania, czy to, co zamierzamy zrobić, jest bardzo proste, więc możemy wypróbować ten mały port w 10 wierszach wykonany w perlu:

#! / bin / perl wymagają "sys / ioctl.ph"; $ device = "05"; open (my $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ dane = opakowanie ("H *", "23010800". $ urządzenie. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ dane); $ dane = opakowanie ("H *", "23030800". $ urządzenie. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ dane); zamknij ($ usbdev);

Musimy szanować $ device, numer portu (w moim przypadku było to 5), jest to wartość szesnastkowa, więc 10 będzie A, 11 będzie B, 15 będzie F, 16 będzie 10 ... Musimy też monitorować urządzenie i magistralę, do którego mamy dostęp z / dev / bus / usb /001/001, liczby muszą mieć początkowe zera, ponieważ wywołujemy ten plik.

Jak widać, klucz znajduje się w ioctl (), jest to funkcja, która manipuluje parametrami urządzenia ze specjalnego pliku w systemie plików. Wśród użytych wartości szesnastkowych znajdujemy 0xC0185500, stała o nazwie USBDEVFS_CONTROL, za pomocą której wyślemy polecenie sterujące do urządzenia USB, Pozostałe kody należą do żądania odłączenia i połączenia (więcej informacji można znaleźć w programie wykonanym w C).

Metoda 3. Ukrywanie i pokazywanie urządzenia

Innym sposobem odłączenia urządzenia może być:

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

I możemy to odzyskać, wykonując:

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

Ta metoda nie powoduje całkowitego odłączenia urządzenia. To tylko sprawia, że ​​system operacyjny z nim nie rozmawia, a wiele urządzeń, gdy komputer nie chce nic o nich wiedzieć, przechodzą w tryb niskiego poboru mocy, ponieważ nie będziemy o nic prosić.

Metoda 4. Autoryzacja urządzenia

Wadą tej metody jest to, że w wielu systemach można tymczasowo dezaktywować więcej urządzeń, które są nie tylko tym, czego potrzebujemy, ale także atakujemy cały koncentrator USB. Na przykład:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / autoryzowane $ echo 1 | sudo tee / sys / bus / usb / devices / usb1 / authorised

Co oczywiście możemy uruchomić wszystko z rzędu:

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

Musimy uważać, jeśli jest więcej dysków podłączonych do tego samego portu USB (i prawie zawsze w naszych komputerach kilka portów USB, niż widzimy, jest wewnętrznie podłączonych do koncentratora, więc są grupy portów z tym samym USB ojciec, ująć to w jakiś sposób.

Metoda 5. Uruchom ponownie podsystem USB

Jeśli chcemy ponownie uruchomić podsystem USB. Czyli odświeżyć wszystkie urządzenia USB, np. Odłączając i podłączając je wszystkie, z jednej strony możemy pobrać i przeładować moduł jądra USB:

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

Chociaż niektóre dystrybucje, w tym najnowsze wersje Ubuntu i pochodnych, mają rozszerzenie zintegrowane moduły USB i nie można ich pobrać. Z drugiej strony system może nie pozwolić nam ich pobrać, ponieważ są w użyciu ze względu na inne moduły (drukarki, pamięci masowe, urządzenia interfejsowe itp.), A jeśli zaczniemy pobierać moduły i zepsuć rzeczy, być może będziemy musieli ponownie uruchomić komputer. na końcu. Więc w inny sposób możemy zrobić:

$ 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

Aby znaleźć nasze urządzenie, możemy zrobić ls wewnątrz / sys / bus / pci / drivers / xhci_hcd, pojawi się kilka rzeczy, musimy poszukać takiego, który wygląda tak aaaa: bb: cc: dd.e. Twój port USB może nie być dostępny jako xhci_hcd (USB3), ale raczej jako ehci_hcd (USB2)


14 komentarzy, zostaw swoje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Cristian powiedział

    Świetny artykuł!

    1.    gaz parfm powiedział

      Bardzo dziękuję Cristian! Mam nadzieję, że okazał się przydatny.

  2.   Antonio juan powiedział

    W tym artykule nie jest powiedziane, że za każdym razem, gdy zamierzasz go umieścić, znajduje się on po przeciwnej stronie do właściwej i musisz go obrócić ... Świetny artykuł.

    1.    gaz parfm powiedział

      Dzięki Antonio Juan! Cóż, nie wiesz, ile razy to mi się przydarzyło, kiedy próbowałem wszystkiego, co umieściłem w poście! 🙂

  3.   ROMSAT powiedział

    Świetny. Doskonały przedmiot. Powinien nosić tytuł: „Dowiedz się o systemie Linux, po prostu odłączając i podłączając pamięć USB”. Gratulacje.
    Pozdrowienia z Malagi.

    1.    gaz parfm powiedział

      No tak, nie wiem czy ktoś zacznie programować w C i uzyskiwać dostęp do urządzeń z tego postu! Również z Malagi !! Jesteśmy wszędzie 🙂

  4.   HO2Gi powiedział

    Imponujący artykuł. Z takim materiałem przesadziłeś.

    1.    gaz parfm powiedział

      Dzięki HO2Gi !! Na moim osobistym blogu ( http://totaki.com/poesiabinaria ) istnieje również wiele tutoriali dotyczących stylu 🙂

  5.   atahualpa powiedział

    dziękuje Ci bardzo przyjacielu. Uruchamiam w Linuksie, a konkretnie w Linuksie Mint i mam następujący problem: w konsoli widzę, że mój telefon jest podłączony do maszyny ale nie w menedżerze plików. Dlatego nie mogę używać go jako modemu do łączenia się z Internetem. Co mogę zrobić?

    1.    Gaspar Fernandez powiedział

      Istnieją telefony, które nie pozwalają na połączenie jako modem, ale możesz korzystać z tetheringu

  6.   Milazzo powiedział

    Doskonała dokumentacja!
    Dziękujemy za poświęcenie czasu na podzielenie się doświadczeniem.
    Używam go jako odniesienia do innego rodzaju problemu, który mam: Odłączenie portów USB w Ubuntu (# 42 ~ precyzyjne1-Ubuntu SMP środa 14 sierpnia 15:31:16 UTC 2013)
    Przychodzi taki moment, gdy System wrzuca -110 do dmesg i restartuje komputer, zakłada się, że awaria jest spowodowana brakiem zasilania w USB, do którego jest podłączone urządzenie (USB3.0).

    Teraz używam lsusb -v do sprawdzenia poziomu mocy urządzenia, ale rzuca 2mA, co jest totalnie absurdalne ... tylko diody zużywają więcej ...

    Podłączam modem USB-4G Huawei E8372, jednak maxpower wskazuje 2mA, co jest niebywałe, teraz wątpliwości się zmieniły i pojawiły się inne:
    Czy MaxPower to atrybut, który jest domyślnie dostępny na urządzeniu lub w systemie operacyjnym?
    Czy jest to parametr maksymalnej mocy, jaką dostarczy port USB?
    W przypadku, gdy jest parametrem
    Czy ten parametr można zmodyfikować i ustawić na maksimum podane przez port USB (900 mAh - 3.0 / 500 mAh - 2.0)?
    W przypadku, gdy nie jest parametrem,
    Czy jest to wartość pomiaru zużycia USB w czasie rzeczywistym (mało prawdopodobne)?
    Jeśli jest to inna opcja, proszę o wyjaśnienie, ponieważ mam wątpliwości co do informacji referencyjnych.

    Mam kilka wątpliwości co do tej wartości MaxPower, gdybyś miał jakieś dodatkowe informacje, byłbym bardzo wdzięczny.

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

    Bus 002 Urządzenie 006: ID 1a86: 7523 QinHeng Electronics HL-340 Adapter szeregowy USB
    bDeviceClass 255 Vendor Specific Class
    iProduct 2 USB2.0-szeregowy
    MaxPower 96mA
    Urządzenie Bus 002 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 Communications
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonimowy powiedział

    Czy można go zastosować do okien?

  8.   Chelo powiedział

    Wielkie dzięki. Z udisksctl power-off -b / dev / sdc na moim zewnętrznym dysku wystarczyło, aby rozwiązać ból głowy. Czy nie byłoby lepiej, gdyby odmontowanie miało opcję zrobienia tego samodzielnie?

  9.   Marisa powiedział

    Boże co do cholery! Czy ktoś przeczytał cały ten testament? A wyżej po płytce nadal nie wiemy, jak wyłączyć interfejs dźwiękowy DAC/USB, drukarkę, tablet graficzny… krótko mówiąc, nic, co nie jest kolcem ani dyskiem zewnętrznym. Co za strata czasu ...