5 способів відключити та підключити USB-пристрій, не відриваючи рук від клавіатури

У багатьох випадках, коли ми використовуємо наш комп’ютер, ми від’єднуємо USB-пристрій (безпечно, як і повинно бути), і відразу після цього ми усвідомлюємо, що забули скопіювати файл або що нам потрібно було переконатися, що наш підрозділ. У цих випадках зазвичай дуже корисно практично відключити USB-накопичувачі, коли ми працюємо віддалено.

Вийнявши пристрій, ми більше не бачимо його в нашому списку пристроїв, але жорсткий диск або накопичувач все ще підключені через порт 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. Пристрій шини 001 Пристрій 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4 ГБ ручки приводу 001 Пристрій 003: ID 04f2: b424 Chicony Electronics Co., Ltd Шина 001 Пристрій 001: ID 1d6b : 0002 Кореневий концентратор Linux Foundation 2.0

Якщо ми хочемо отримати більше інформації, ми можемо використовувати модифікатор -t, який покаже нам висновок у вигляді дерева з інформацією про модулі:

$ lsusb -t /: Автобус 02. Порт 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 | __ Порт 6: Dev 5, If 0, Class = Hub, Driver = концентратор / 4p, 12M | __ Порт 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 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 Привід ручки 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 MaxPower 0mA

Іншими дуже корисними командами є USB-пристрої, HWiNFO, або, наприклад, якщо у нас є шлях пристрою (всередині / dev /), ми можемо попросити систему отримати всю можливу інформацію про нього та підсистеми, які він повинен пройти. Наприклад, якщо ми підключаємо жорсткий диск USB, щоб ми могли бачити, як користуватися пристроєм, нам потрібен драйвер SCSI (для / dev / sdX), нам також потрібен драйвер USB-накопичувача, який працює через Порт USB, який належить до концентратора, який підключений до порту PCI, серед інших проміжних систем. Все, що ми могли бачити

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

o

$ udevadm info -a -n / dev / sdX

Якщо ми хочемо наважитися, ми можемо також увійти / sys / bus / usb і подивившись на все, що є, ми побачимо багато інформації, але, на щастя, наведені вище команди класифікують всю цю інформацію.

Привілеї та пристрої

Для виконання цього завдання нам потрібно буде знати, до якого пристрою ми збираємось відновити зв’язок. Для цього ми можемо запустити:

$ dmesg | tail [чт, 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 ГБ / 7.54 ГіБ) [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 були б розділами на цьому диску). Для прикладів, я буду використовувати цей пристрій, у вашому випадку вам доведеться уявити, який у вас обліковий запис.

У наведених нижче прикладах я буду використовувати Суду виконувати команди з привілеями корінь. Хоча було б достатньо мати користувача з достатнім дозволом. Якщо ми хочемо побачити необхідні привілеї, просто виконайте 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. Ну, eject використовувався для відкриття CDROM, а eject -t - для закриття лотка. Добре, якщо ми зробимо це перед USB-пристроєм:

$ sudo eject -t / dev / sdc

Пристрій повинен виглядати так, ніби ми його знову підключили.

Спосіб 2. Відключено та віртуально підключено

У деяких системах (якщо апаратне забезпечення підтримує це), коли ви безпечно виймаєте USB-пристрій, пристрій перестає живити, і пристрій більше не відображається. Це те саме, що коли ви робите:

udisksctl вимкнення живлення -b / dev / sdc

У цьому випадку, / 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.c

Тепер ви пам’ятаєте цифри, виділені жирним шрифтом із dmesgНу, ми будемо ними користуватися, нам доведеться відключити пристрій і знову підключити його, наприклад:

$ sudo ./hubpower 1: 1 живлення 5 вимкнено Статус порту 5: 0000 Power-Off $ sudo ./hubpower 1: 1 живлення 5 ввімкнено стан 5 порту: 0100 Увімкнення

Якщо пристрій нас не виявляє, ми можемо спробувати зробити:

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

Таким чином, ми знову побачимо наш підключений USB-пристрій.

Якщо ми не хочемо програму на С ... у мене це на perl

Програму на С важко скласти та перевірити, чи те, що ми збираємося робити, дуже просто, тому ми можемо спробувати цей невеликий порт у 10 рядків, зроблених на perl:

#! / bin / perl вимагає "sys / ioctl.ph"; $ device = "05"; відкрити (мій $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ data = pack ("H *", "23010800". $ device. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ дані); $ data = pack ("H *", "23030800". $ device. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ дані); закрити ($ usbdev);

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

Як бачимо, ключ знаходиться в ioctl (), це функція, яка маніпулює параметрами пристрою зі спеціального файлу у файловій системі. Серед використовуваних шістнадцяткових значень ми знаходимо 0xC0185500, константа, що називається USBDEVFS_CONTROL, за допомогою якої ми надішлемо команду управління на USB-пристрій. Інші коди належать до запиту на відключення та підключення (додаткову інформацію можна знайти в програмі, зробленій на С).

Спосіб 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 inside / 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.    газпарфм - сказав він

      Щиро дякую Крістіане! Сподіваюся, вам це було корисно.

  2.   Антоніо Хуан - сказав він

    У цій статті не сказано, що всякий раз, коли ви збираєтеся її поставити, вона знаходиться на протилежній стороні від правильної, і ви повинні її повернути ... хе-хе-хе. Чудова стаття.

    1.    газпарфм - сказав він

      Дякую Антоніо Хуан! Ну, дивіться, ви не знаєте, скільки разів це траплялося зі мною, коли я намагався все, що вклав у пост! 🙂

  3.   ROMSAT - сказав він

    Блискуче. Вищий предмет. Його слід назвати: "Дізнайтеся про систему Linux, просто відключивши та підключивши USB-накопичувач". Вітаю.
    Привіт з Малаги.

    1.    газпарфм - сказав він

      Ну, так, я не знаю, чи хтось почне програмувати на мові C та отримувати доступ до пристроїв із цієї публікації! Також з Малаги !! Ми скрізь 🙂

  4.   HO2Gi - сказав він

    Вражаюча стаття. Ви переборщили з таким матеріалом.

    1.    газпарфм - сказав він

      Дякую HO2Gi !! В моєму особистому блозі ( http://totaki.com/poesiabinaria ) є також багато підручників із стилю 🙂

  5.   Атауальпа - сказав він

    велике спасибі друже. Я починаю працювати в Linux, зокрема в Linux mint, і у мене така проблема: у консолі я бачу, що мій телефон підключений до машини, але не в менеджері файлів. І тому я не можу використовувати його як модем для підключення до Інтернету. Що я можу зробити?

    1.    Гаспар Фернандес - сказав він

      Є телефони, які не дозволяють підключатися як модем, але ви можете зробити модем

  6.   Milazzo - сказав він

    Відмінна документація!
    Дякуємо, що знайшли час поділитися досвідом.
    Я використовую його як посилання на інший тип проблеми, яка в мене є: Відключення USB-портів в Ubuntu (# 42 ~ точно1-Ubuntu SMP Ср, 14 серпня 15:31:16 UTC 2013)
    Настає момент, коли Система кидає -110 в dmesg і перезавантажує ПК, передбачається, що збій обумовлений відсутністю живлення на USB, де пристрій підключено (USB3.0).

    Тепер я використовую lsusb -v для перевірки рівня потужності пристрою, але він видає 2 мА, що абсолютно абсурдно ... тільки світлодіоди споживають більше цього ...

    Я підключаю модем huawei E4 USB-8372G, однак максимальна потужність вказує на 2 мА, що неймовірно, тепер сумніви змінилися, і виникли інші:
    Чи є 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 USB-послідовний адаптер QinHeng Electronics HL-340
    bDeviceClass 255 Спеціальний клас постачальника
    iProduct 2 USB2.0-Serial
    MaxPower 96mA
    Шина 002 Пристрій 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 Communications
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Анонімний - сказав він

    Чи можна застосувати його до вікон?

  8.   Чоло - сказав він

    Дуже дякую. З відключенням udisksctl -b / dev / sdc на моєму зовнішньому диску цього було достатньо, щоб вирішити головний біль. Чи не було б краще, якщо б unmount мав можливість зробити це сам?

  9.   Маріса - сказав він

    Боже, який біс! Хтось читав весь цей заповіт? А зверху після таблички ми все ще не знаємо, як вимкнути звуковий інтерфейс ЦАП / USB, принтер, графічний планшет ... словом, нічого, що не є спайком чи зовнішнім диском. Яка втрата часу ...