5 начина за изключване и свързване на USB устройство, без да откъсвате ръцете си от клавиатурата

В много случаи, когато използваме компютъра си, изключваме USB устройство (безопасно, както трябва да бъде) и веднага след това осъзнаваме, че сме забравили да копираме файл или че трябва да се уверим, че данните са били в нашето звено. В тези случаи обикновено е много полезно виртуалното изключване на USB устройствата, когато работим отдалечено.

След като извадихме устройството, вече не го виждаме в нашия списък с устройства, но твърдият диск или pendrive все още са свързани чрез USB порта и в много дистрибуции днес, след като извадихме устройството безопасно, ние също не виждаме устройството и Не можем да го направим монтиране от нашия терминал. Най-бързото решение е да изключите кабела и да го свържете отново, в някои случаи или поради мързел да се налага да ставате, или защото имаме достъп до компютър, пред който не сме и няма никой наоколо, не можем да го направим.

Информация за USB устройства

Преди да започнем, нека видим как да получим информация за USB устройства, свързани към системата. За това можем да използваме lsusb, който ще изброи свързаните устройства в момента. Слагам примери за това, което получавам на компютъра си в момента, но може би е много различно от това, което получавате:

$ 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

Ако искаме повече информация, можем да използваме модификатора -t, който ще ни покаже изход под формата на дърво с информация за модулите:

$ 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 | __ Порт 4: Dev 3, ако 0, клас = видео, драйвер = uvcvideo, 480M | __ порт 4: Dev 3, ако 1, клас = видео, драйвер = uvcvideo, 480M | __ порт 5: Dev 10, ако 0, клас = 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, Драйвер = usbhid, 12M | __ Порт 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 | __ Порт 9: Dev 6, ако 0, клас = безжичен, драйвер = btusb, 12M | __ порт 9: Dev 6, ако 1, клас = безжичен, драйвер = btusb, 12M

Ако искаме много повече информация, можем да използваме lsusb -v (изходът е много голям), освен това бихме могли например да знаем максималната мощност, която се доставя на устройството, както следва:

$ 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 Устройство 007: ID 046d: c52b Logitech, Inc. Обединяващ приемник MaxPower 98mA Bus 001 Устройство 005: ID 1a40: 0101 Terminus Technology Inc. Хъб MaxPower 100mA Bus 001 Устройство 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

Други много полезни команди са usb-устройства, hwinfo, или, например, ако имаме пътя на устройство (вътре / dev /), можем да поискаме от системата цялата възможна информация за него и подсистемите, през които трябва да премине. Например, ако свържем USB твърд диск, за да можем да видим как да използваме устройството, се нуждаем от SCSI драйвер (за да бъде / dev / sdX), имаме нужда и от USB драйвер за съхранение, който работи през USB порт, който принадлежи към хъб, който е включен в PCI порт, наред с други междинни системи. Всичко, с което можехме да видим

$ udevadm информация --query = path --name = / dev / sdX --attribute-walk

o

$ udevadm информация -a -n / dev / sdX

Ако искаме да се осмелим, можем и да влезем / sys / bus / usb и погледнете всичко, което има, ще видим много информация, но за щастие горните команди класифицират цялата тази информация.

Привилегии и устройства

За да изпълним тази задача, ще трябва да знаем към кое устройство ще отидем свържете се отново. За целта можем да изпълним:

$ dmesg | tail [Thu Nov 24 19:50:04 2016] sd 7: 0: 0: 0: Прикачен scsi родов sg3 тип 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512-байтови логически блокове: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Защитата срещу запис е изключена [798339.431848] sd 7: 0: 0: 0: [sdc] Режим на чувство: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Неуспешно искане на данни за кеш памет [798339.431996] sd 7: 0: 0: 0: [sdc] Приемане на кеш памет: запис чрез [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Прикачен SCSI сменяем диск [798360.808588] ISO 9660 Разширения: Microsoft Joliet Level 3 [798360.809353] ISO 9660 Разширения: RRIP_1991A

В този изход ще видим, че устройството, с което работим, е SDC (sdc1 и sdc2 ще бъдат дялове в този диск). За примерите, които ще използвам това устройство, във вашия случай ще трябва да визуализирате кой акаунт имате.

В примерите по-долу ще използвам Sudo да изпълнява командите с привилегиите на корен. Въпреки че би било достатъчно да имате потребител с достатъчно разрешение. Ако искаме да видим необходимите привилегии, просто го направете ls към устройството:

$ ls -latr / dev / sdc brw-rw ---- 1 корен диск 8, 32 ноември 24 19:50 / dev / sdc

Там виждаме, че собственикът е root и групата диск. Би било достатъчно да има потребител, принадлежащ към груповия диск.

Метод 1. Третирайте го като CD / DVD

Това е най-простото от всички. Със сигурност, ако използвате GNU / Linux от години, когато сте работили с CD-ROM или DVD, сте използвали командата за изваждане. Е, eject беше използван за отваряне на CDROM и eject -t беше използван за затваряне на тавата. Е, ако направим това преди USB устройството:

$ sudo eject -t / dev / sdc

Устройството трябва да изглежда така, сякаш сме го свързали отново.

Метод 2. Изключени и виртуални включени

На някои системи (стига хардуерът да го поддържа), когато безопасно извадите USB устройството, устройството спира да се захранва и устройството вече не се появява. Същото е като когато правите:

udisksctl изключване -b / dev / sdc

В този случай, / Сътрудничество / ШАРС това е моето устройство и с тази команда симулира виртуално изключване на захранването.

Проблемът е, че сега / dev / sdc не съществува, още повече, ако погледнем dmesg, ще получим нещо подобно:

$ dmesg | опашка [281954.693298] USB 1-5: USB прекъсване, номер на устройство 3

Така че, ако се опитаме с метода на извадете няма да проработи. Забележка: подчертах USB 1-5 и скоро ще видим защо.

Ако работите отдалечено, това може да е добра идея. Представете си, че имате USB устройства, прикачени към архивиране. Когато правите копията, добре е системата да знае, че има свързани дискове, но когато не ги използваме, от една страна трябва пестене на енергия и избягвайте износването на дисковете, така че е по-добре да намалите тока, от друга страна, не искаме злонамерени приложения да виждат, че съществуват тези дискове, за да не се заразят. (Да, в GNU / Linux има вируси).

Как да свържем тока сега?

Трябва да се обадим на USB порта, за това има проект, наречен мощност (Свързвам с разклонение на оригиналния проект, защото тук е фиксирана грешка, която може да премахне тока от повече устройства, а не само от това, което искаме). Има повече проекти (като uhubctl), но това няма зависимости, защото когато отиваме да компилираме, това също е само файл hubpower.c.
Първо, ние го компилираме,

$ gcc -o hubpower hubpower.c

Сега, помните ли цифрите с удебелен шрифт от dmesg? Е, ще ги използваме, ще трябва да изключим устройството и да го свържем отново, като това:

$ 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

Ако устройството не ни открие, можем да опитаме да направим:

$ sudo ./hubpower 1: 1 bind Заявка за свързване на драйвер, изпратена до ядрото

По този начин отново ще видим свързаното ни USB устройство.

Ако не искаме програма на C ... Имам я в perl

C програма е трудно да се компилира и тества дали това, което ще направим, е много просто, така че можем да опитаме този малък порт в 10 реда, направени в perl:

#! / bin / perl изисква "sys / ioctl.ph"; $ устройство = "05"; отворен (my $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ данни = пакет ("H *", "23010800". $ устройство. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ данни); $ данни = пакет ("H *", "23030800". $ устройство. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ данни); затваряне ($ usbdev);

Трябва да уважаваме $ устройство, номерът на порта (в моя случай беше 5), това е стойност в шестнадесетична, следователно 10 ще бъде A, 11 ще бъде B, 15 ще бъде F, 16 ще бъде 10 ... Ние също трябва да наблюдаваме устройството и автобуса, до който имаме достъп от / dev / bus / usb /001/001, числата трябва да вървят с водещи нули, тъй като извикваме този файл.

Както виждаме, ключът е в ioctl (), това е функция, която манипулира параметрите на устройство от специален файл във файловата система. Сред използваните шестнадесетични стойности намираме 0xC0185500, константа, наречена USBDEVFS_CONTROL, с която ще изпратим контролна команда към USB устройството, Другите кодове принадлежат към заявката за изключване и свързване (повече информация можете да намерите в програмата, направена в C).

Метод 3. Скриване и показване на устройството

Друг начин за изключване на устройството може да бъде:

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

И можем да го възстановим, като направим:

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

Този метод не причинява пълно изключване на устройството. Това само кара операционната система да не говори с нея и много устройства, когато компютър не иска да знае нищо за тях, се поставят в режим на ниска мощност, тъй като няма да искаме нищо.

Метод 4. Упълномощаване на устройството

Недостатъкът на този метод е, че в много системи могат да бъдат временно деактивирани повече устройства, които са не само това, от което се нуждаем, но и атакуваме цял USB хъб. Например:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / оторизиран $ echo 1 | sudo tee / sys / bus / usb / devices / usb1 / оторизиран

Което, разбира се, можем да изпълним всичко подред:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / оторизиран; ехо 1 | sudo tee / sys / bus / usb / devices / usb1 / оторизиран

Трябва да внимаваме, ако има повече дискове, свързани към един и същ USB порт (и почти винаги в нашите компютри, няколко USB порта от тези, които виждаме, са вътрешно свързани към концентратор, така че има групи портове със същия USB баща, сложи го по някакъв начин.

Метод 5. Рестартирайте USB подсистемата

Ако искаме да рестартираме USB подсистемата. Тоест, опресняване на всички USB устройства, като например изключване и включване на всички тях, от една страна можем да изтеглим и презаредим USB модула на ядрото:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd # За USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd # За USB3

Въпреки че някои дистрибуции, включени най-новите версии на Ubuntu и деривати, имат интегрирани USB модули и те не могат да бъдат изтеглени. От друга страна, системата може да не ни позволи да ги изтеглим, защото те се използват поради други модули (принтери, хранилище, интерфейсни устройства и т.н.) и ако започнем да изтегляме модули и да прекъсваме нещата, може да се наложи да рестартира накрая. И така, по друг начин можем да направим:

$ 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

За да намерим нашето устройство, можем да направим ls вътре / sys / bus / pci / drivers / xhci_hcd, ще се появят няколко неща, трябва да потърсим такъв, който изглежда така aaaa: bb: cc: dd.e. Вашият USB порт може да не е като xhci_hcd (USB3), а по-скоро ehci_hcd (USB2)


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Cristian каза той

    Отлична статия!

    1.    gasparfm каза той

      Благодаря ви много Кристиян! Надявам се, че ви е било полезно.

  2.   Антонио Хуан каза той

    В тази статия не се казва, че когато и да го поставяте, той е на противоположната страна на правилната и трябва да го обърнете ... хехехе. Страхотна статия.

    1.    gasparfm каза той

      Благодаря Антонио Хуан! Ами вижте, не знаете колко пъти ми се е случвало това, докато опитвах всичко, което съм сложил в публикацията! 🙂

  3.   ROMSAT каза той

    Страхотен. Превъзходен артикул. То трябва да бъде озаглавено: „Научете за системата Linux, като просто изключите и включите USB паметта си.“ Честито.
    Поздрави от Малага.

    1.    gasparfm каза той

      Ами да, не знам дали някой ще започне да програмира на C и да осъществява достъп до устройства от този пост! Също от Малага !! Ние сме навсякъде 🙂

  4.   HO2Gi каза той

    Впечатляваща статия. Прекалили сте с такъв материал.

    1.    gasparfm каза той

      Благодаря HO2Gi !! В личния ми блог ( http://totaki.com/poesiabinaria ) има и много уроци за стила 🙂

  5.   Атауалпа каза той

    много благодаря приятелю. Стартирам в linux, по-специално в linux mint, и имам следния проблем: в конзолата виждам, че телефонът ми е свързан с машината, но не и във файловия мениджър. И затова не мога да го използвам като модем за свързване с интернет. Какво мога да направя?

    1.    Гаспар Фернандес каза той

      Има телефони, които не ви позволяват да се свързвате като модем, но можете да направите Tethering

  6.   Милацо каза той

    Отлична документация!
    Благодарим ви, че отделихте време да споделите опита.
    Използвам го като справка за друг тип проблем, който имам: Прекъсване на USB портовете в Ubuntu (# 42 ~ precizno1-Ubuntu SMP Сряда, 14 август 15:31:16 UTC 2013)
    Идва момент, когато Системата хвърля -110 в dmesg и рестартира компютъра, предполага се, че повредата се дължи на липса на захранване в USB, където е свързано устройството (USB3.0).

    Сега използвам lsusb -v, за да проверя нивото на мощност на устройството, но то хвърля 2mA, което е напълно абсурдно ... само светодиодите консумират повече от това ...

    Свързвам huawei E4 USB-8372G модем, но максималната мощност показва 2mA, което е невероятно, сега съмнението се промени и възникнаха други:
    MaxPower атрибут ли е, който се предлага по подразбиране на устройството или в ОС?
    Дали това е параметър на максималната мощност, която ще достави usb портът?
    В случай че е параметър
    Може ли този параметър да бъде модифициран и зададен на максимума, предоставен от USB порта (900mAh- 3.0 / 500mAh- 2.0)?
    В случай че това не е параметър,
    Дали това е стойност за измерване в реално време на USB консумацията (малко вероятно)?
    Ако това е друга опция, моля, обяснете ми, тъй като съм със съмнения относно референтната информация.

    Имам няколко съмнения относно тази стойност на MaxPower, ако имате някаква допълнителна информация, ще ви бъда много благодарен.

    lsusb -v 2> / dev / null | egrep "^ Автобус | MaxPower | bDeviceClass | iProduct"

    Шина 002 Устройство 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-сериен адаптер
    bDeviceClass 255 Специфичен клас на продавача
    iProduct 2 USB2.0-Serial
    MaxPower 96mA
    Bus 002 Устройство 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 Комуникации
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonimo каза той

    Може ли да се приложи към прозорци?

  8.   Chelo каза той

    Благодаря много. С udisksctl power-off -b / dev / sdc на външния ми диск беше достатъчно, за да разреша главоболието. Не би ли било по-добре, ако демонтажът има опция да направи това сам?

  9.   Marisa каза той

    Господи, по дяволите! Някой чел ли е цялото това завещание? И горе след плочата все още не знаем как да изключим DAC / USB звуков интерфейс, принтер, графичен таблет ... е, нищо, което не е шип или външен диск. Каква загуба на време ...