- 5 способов отключить и подключить USB-устройство, не отрывая рук от клавиатуры
- Информация о USB-устройствах
- Привилегии и устройства
- Метод 1. Относитесь к нему как к CD / DVD.
- Метод 2. Отключение и виртуальное подключение
- Как теперь подключить ток?
- Если нам не нужна программа на C . у меня она есть на perl
- Способ 3. Скрытие и отображение устройства
- Способ 4. Авторизация устройства
- Способ 5. Перезагрузите подсистему 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 и посмотрите на все, что есть, мы увидим много информации, но, к счастью, приведенные выше команды классифицируют всю эту информацию.
Привилегии и устройства
Для выполнения этой задачи нам нужно будет знать, какое устройство мы собираемся использовать. воссоединиться. Для этого мы можем запустить:
$ 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-устройства:
Устройство должно выглядеть так, как будто мы его снова подключили.
Метод 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, числа должны быть с ведущими нулями, поскольку мы вызываем этот файл.
Как мы видим, ключ находится в 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-устройство, не отрывая рук от клавиатуры