Linux отключить usb устройство

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

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

После извлечения устройства мы больше не видим его в нашем списке устройств, но жесткий диск или флешка все еще подключены через порт USB, и во многих сегодняшних дистрибутивах, после безопасного извлечения диска, мы также не видим устройство и Мы не можем сделать монтировать с нашего терминала. Самое быстрое решение — отсоединить кабель и снова подключить его, в некоторых случаях либо из-за того, что нам не нужно вставать, либо из-за того, что мы получаем доступ к компьютеру, перед которым мы не находимся и никого вокруг нет, мы не можем этого сделать.

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

Прежде чем мы начнем, давайте посмотрим, как получить информацию о USB-устройствах, подключенных к системе. Для этого мы можем использовать lsusb, в котором прямо сейчас будут перечислены подключенные устройства. Я помещаю примеры того, что у меня есть на моем компьютере прямо сейчас, но, возможно, это сильно отличается от того, что вы получаете:

$ lsusb Bus 002 Устройство 001: ID 1d6b: 0003 Корневой концентратор Linux Foundation 3.0 Шина 001 Устройство 006: ID 8087: 0a2a Intel Corp. Bus 001 Устройство 007: ID 046d: c52b Logitech, Inc. Объединение шины приемника 001 Устройство 005: ID 1a40 : 0101 Шина концентратора Terminus Technology Inc. 001 Устройство 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive Bus 001 Устройство 003: ID 04f2: b424 Chicony Electronics Co., Ltd Bus 001 Устройство 001: ID 1d6b : 0002 Корневой концентратор Linux Foundation 2.0

Если нам нужна дополнительная информация, мы можем использовать модификатор -t, который покажет нам результат в виде дерева с информацией о модулях:

$ lsusb -t /: Bus 02.Port 1: Dev 1, Driver = xhci_hcd / 8p, 5000M /: Bus 01.Port 1: Dev 1, Driver = xhci_hcd / 16p, 480M | __ Порт 4: Dev 3, если 0, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Driver = uvcvideo, 480M | __ Port 5: Dev 10, If 0, Storage, Driver = usb-storage, 480 МБ | __ Порт 6: Dev 5, если 0, Driver = hub / 4p, 12M | __ Port 4: Dev 7, If 0, Interface Device, Driver = usbhid, 12M | __ Порт 4: Dev 7, If 1, Interface Device, Driver = usbhid, 12M | __ Port 4: Dev 7, If 2, Interface Device, Driver = usbhid, 12M | __ Порт 9: Dev 6, если 0, Driver = btusb, 12M | __ Port 9: Dev 6, If 1, Driver = 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. Unifying Receiver MaxPower 98mA Bus 001 Device 005: ID 1a40: 0101 Terminus Technology Inc. Hub MaxPower 100mA Bus 001 Устройство 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4 ГБ Pen Drive MaxPower 480mA Bus 001 Устройство 003: ID 04f2: b424 Chicony Electronics Co., Ltd MaxPower 500mA Bus 001 Устройство 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
$ udevadm info -a -n / dev / sdX

Если мы хотим рискнуть, мы также можем войти / системный / автобус / USB и посмотрите на все, что есть, мы увидим много информации, но, к счастью, приведенные выше команды классифицируют всю эту информацию.

Читайте также:  Pdf djvu viewer linux

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

Для выполнения этой задачи нам нужно будет знать, какое устройство мы собираемся использовать. воссоединиться. Для этого мы можем запустить:

$ 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] Mode Sense: 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 / dev / sdc

Там мы видим, что владельцем является root и группа диск. Достаточно иметь пользователя, принадлежащего группе disk.

Метод 1. Относитесь к нему как к CD / DVD.

Это самый простой способ. Конечно, если вы использовали GNU / Linux в течение многих лет, когда вы работали с CD-ROM или DVD, вы использовали команду извлечения. Что ж, извлечение использовалось для открытия CDROM, а извлечение -t использовалось для закрытия лотка. Хорошо, если мы сделаем это до USB-устройства:

Читайте также:  Linux create pid file

Устройство должно выглядеть так, как будто мы его снова подключили.

Метод 2. Отключение и виртуальное подключение

В некоторых системах (если это поддерживает оборудование) при безопасном извлечении USB-устройства устройство перестает включаться и оно больше не появляется. Это то же самое, что и когда вы делаете:

udisksctl power-off -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.
Сначала мы его компилируем,

Теперь вы помните цифры, выделенные жирным шрифтом из dmesg? Что ж, мы собираемся их использовать, нам придется отключить устройство и снова подключить его, например:

$ sudo ./hubpower 1: 1 power 5 off Состояние порта 5: 0000 Power-Off $ sudo ./hubpower 1: 1 power 5 on Состояние порта 5: 0100 Power-On

Если устройство нас не обнаруживает, мы можем попробовать сделать:

$ sudo ./hubpower 1: 1 bind Запрос Bind-драйвера, отправленный ядру

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

Если нам не нужна программа на C . у меня она есть на perl

Программу на C сложно скомпилировать и проверить, очень ли просто то, что мы собираемся делать, поэтому мы можем попробовать этот небольшой порт в 10 строках, сделанных на perl:

#! / bin / perl требуется "sys / ioctl.ph"; $ device ; 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); закрыть ($ usbdev);

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

Читайте также:  Установить домашнюю директорию linux

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

Способ 3. Скрытие и отображение устройства

Другой способ отключить устройство:

эхо '1-5' | sudo tee / sys / bus / usb / drivers / usb / unbind

И мы можем восстановить это, выполнив:

эхо '1-5' | sudo tee / sys / bus / usb / drivers / usb / bind

Этот метод не вызывает полного отключения устройства. Это только заставляет операционную систему не взаимодействовать с ней, и многие устройства, когда компьютер не хочет ничего о них знать, переводятся в режим низкого энергопотребления, поскольку мы не собираемся ничего запрашивать.

Способ 4. Авторизация устройства

Обратной стороной этого метода является то, что во многих системах может быть временно отключено больше устройств, и это не только то, что нам нужно, но мы также атакуем весь USB-концентратор. Например:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / authorized $ echo 1 | sudo tee / sys / bus / usb / устройства / 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 / привязка

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

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Из Linux » Учебники / Руководства / Советы » 5 способов отключить и подключить USB-устройство, не отрывая рук от клавиатуры

Источник

Оцените статью
Adblock
detector