- Disconnect and reconnect USB port via cli
- Linux. Переподключить все USB устройства
- Публикации из этого раздела:
- Добавить комментарий Отменить ответ
- Свежие записи
- Востребованное
- Рубрики
- Комментарии
- Отключение и подключение USB-устройства из консоли
- Перезагружаем USB через терминал в Linux
- RSS
- How to reconnect a logically disconnected USB device?
- 9 Answers 9
Disconnect and reconnect USB port via cli
Does this effectively reset the power on the device and would therefore completely reset it without having to unplug and replug it in?
If a program has opened a serial USB device(say, /dev/ttyUSB0 symlinked from /dev/myserialdevice as specified in /etc/udev/rules.d/mystuff.rules), and the device gets hung for some reason, is it then necessary to reset it with an ioctl() as above, or is it sufficient to simply close() and open() it again?
@Jarryd see Alan’s explanation in the link above: Note however, that reset followed by re-enumeration is _not_ the same thing as power-cycle followed by reconnect and re-enumeration.
Save the script below as reset_usb.py or clone this repo: https://github.com/mcarans/resetusb/.
python reset_usb.py help : Show this help
sudo python reset_usb.py list : List all USB devices
sudo python reset_usb.py path /dev/bus/usb/XXX/YYY : Reset USB device using path /dev/bus/usb/XXX/YYY
sudo python reset_usb.py search «search terms» : Search for USB device using the search terms within the search string returned by list and reset matching device
sudo python reset_usb.py listpci : List all PCI USB devices
sudo python reset_usb.py pathpci /sys/bus/pci/drivers/. /XXXX:XX:XX.X : Reset PCI USB device using path /sys/bus/pci/drivers/. /XXXX:XX:XX.X
sudo python reset_usb.py searchpci «search terms» : Search for PCI USB device using the search terms within the search string returned by listpci and reset matching device
#!/usr/bin/env python import os import sys from subprocess import Popen, PIPE import fcntl instructions = ''' Usage: python reset_usb.py help : Show this help sudo python reset_usb.py list : List all USB devices sudo python reset_usb.py path /dev/bus/usb/XXX/YYY : Reset USB device using path /dev/bus/usb/XXX/YYY sudo python reset_usb.py search "search terms" : Search for USB device using the search terms within the search string returned by list and reset matching device sudo python reset_usb.py listpci : List all PCI USB devices sudo python reset_usb.py pathpci /sys/bus/pci/drivers/. /XXXX:XX:XX.X : Reset PCI USB device using path sudo python reset_usb.py searchpci "search terms" : Search for PCI USB device using the search terms within the search string returned by listpci and reset matching device ''' if len(sys.argv) < 2: print(instructions) sys.exit(0) option = sys.argv[1].lower() if 'help' in option: print(instructions) sys.exit(0) def create_pci_list(): pci_usb_list = list() try: lspci_out = Popen('lspci -Dvmm', shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().decode('utf-8') pci_devices = lspci_out.split('%s%s' % (os.linesep, os.linesep)) for pci_device in pci_devices: device_dict = dict() categories = pci_device.split(os.linesep) for category in categories: key, value = category.split('\t') device_dictLinux переподключить usb устройство] = value.strip() if 'USB' not in device_dict['Class']: continue for root, dirs, files in os.walk('/sys/bus/pci/drivers/'): slot = device_dict['Slot'] if slot in dirs: device_dict['path'] = os.path.join(root, slot) break pci_usb_list.append(device_dict) except Exception as ex: print('Failed to list pci devices! Error: %s' % ex) sys.exit(-1) return pci_usb_list def create_usb_list(): device_list = list() try: lsusb_out = Popen('lsusb -v', shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().decode('utf-8') usb_devices = lsusb_out.split('%s%s' % (os.linesep, os.linesep)) for device_categories in usb_devices: if not device_categories: continue categories = device_categories.split(os.linesep) device_stuff = categories[0].strip().split() bus = device_stuff[1] device = device_stuff[3][:-1] device_dict = device_info = ' '.join(device_stuff[6:]) device_dict['description'] = device_info for category in categories: if not category: continue categoryinfo = category.strip().split() if categoryinfo[0] == 'iManufacturer': manufacturer_info = ' '.join(categoryinfo[2:]) device_dict['manufacturer'] = manufacturer_info if categoryinfo[0] == 'iProduct': device_info = ' '.join(categoryinfo[2:]) device_dict['device'] = device_info path = '/dev/bus/usb/%s/%s' % (bus, device) device_dict['path'] = path device_list.append(device_dict) except Exception as ex: print('Failed to list usb devices! Error: %s' % ex) sys.exit(-1) return device_list if 'listpci' in option: pci_usb_list = create_pci_list() for device in pci_usb_list: print('path=%s' % device['path']) print(' manufacturer=%s' % device['SVendor']) print(' device=%s' % device['SDevice']) print(' search string=%s %s' % (device['SVendor'], device['SDevice'])) sys.exit(0) if 'list' in option: usb_list = create_usb_list() for device in usb_list: print('path=%s' % device['path']) print(' description=%s' % device['description']) print(' manufacturer=%s' % device['manufacturer']) print(' device=%s' % device['device']) print(' search string=%s %s %s' % (device['description'], device['manufacturer'], device['device'])) sys.exit(0) if len(sys.argv) < 3: print(instructions) sys.exit(0) option2 = sys.argv[2] print('Resetting device: %s' % option2) # echo -n "0000:39:00.0" | tee /sys/bus/pci/drivers/xhci_hcd/unbind;echo -n "0000:39:00.0" | tee /sys/bus/pci/drivers/xhci_hcd/bind def reset_pci_usb_device(dev_path): folder, slot = os.path.split(dev_path) try: fp = open(os.path.join(folder, 'unbind'), 'wt') fp.write(slot) fp.close() fp = open(os.path.join(folder, 'bind'), 'wt') fp.write(slot) fp.close() print('Successfully reset %s' % dev_path) sys.exit(0) except Exception as ex: print('Failed to reset device! Error: %s' % ex) sys.exit(-1) if 'pathpci' in option: reset_pci_usb_device(option2) if 'searchpci' in option: pci_usb_list = create_pci_list() for device in pci_usb_list: text = '%s %s' % (device['SVendor'], device['SDevice']) if option2 in text: reset_pci_usb_device(device['path']) print('Failed to find device!') sys.exit(-1) def reset_usb_device(dev_path): USBDEVFS_RESET = 21780 try: f = open(dev_path, 'w', os.O_WRONLY) fcntl.ioctl(f, USBDEVFS_RESET, 0) print('Successfully reset %s' % dev_path) sys.exit(0) except Exception as ex: print('Failed to reset device! Error: %s' % ex) sys.exit(-1) if 'path' in option: reset_usb_device(option2) if 'search' in option: usb_list = create_usb_list() for device in usb_list: text = '%s %s %s' % (device['description'], device['manufacturer'], device['device']) if option2 in text: reset_usb_device(device['path']) print('Failed to find device!') sys.exit(-1)
Linux. Переподключить все USB устройства
Иногда на компьютерах происходит беда с USB устройствами. К примеру, во время загрузки операционной системы они не могут начать работать, хотя и "видны" в системе. Лечится это просто - достаточно выдернуть и воткнуть заново проблемное устройство. Но есть и другой способ.
Представьте, что системный блок компьютера находится в недоступном месте. И вытащить устройство из USB порта невозможно. Тогда чтобы не перезагружать систему можно попробовать инициировать его заново. Для выполнения этой задачи необходимо создать исполняемый bash файл. И в нём оставить такой код, который будет переподключать все USB устройства:
Исполнять этот файл необходимо от имени администратора (root).
Обратите внимание, что клавиатура и мышка - это тоже USB устройства. Поэтому в процессе выполнения скрипта останетесь без них. Будьте готовы.
Публикации из этого раздела:
- Генератор паролей (онлайн) - .
- Пропадают контакты в Skype — /msnp24 - Буквально год назад перешёл с Windows на Linux. И постепенно начал узнавать много нового. К примеру.
- Linux. Создание SWAP файла - Файл/раздел подкачки (он же SWAP файл) используется для помощи оперативной памяти. В него отправляет.
- Linux долго загружается - Linux хоть и славится своим быстродействием по сравнению с Windows, но даже у него иногда случаются .
- LUKS. Автомонтирование при загрузке - Для автоматической расшифровки LUKS разделов и их монтирования можно использовать небольшой bash скр.
- Linux. Правильное монтирование разделов - В системах на Linux взаимодействие с смонтитрованными разделами происходит с помощью папок. То есть .
- Очистка файла подкачки (swap) в Linux - Порой не хватает оперативной памяти для всех задач. И в дело вступает файл подкачки (swap). К сожале.
- Русификация LibreOffice и другого ПО на Linux - Намного удобнее работать с русским интерфейсом. К сожалению, в некоторых программах на Linux "из кор.
Добавить комментарий Отменить ответ
Свежие записи
- WordPress. Удалить изображения ко всем постам
- GTK. Включить тёмную тему
- APT. Обновить только один пакет
- Debian. Минимальная установка KDE
- systemd-resolved. Кеширование DNS запросов
- LUKS. Автомонтирование при загрузке
- Android. Отключение автозапуска программ
- Mysql. Загрузка таблицы из CSV
- Linux. Показать изображение в консоли
- Linux. Запустить Firefox в консоли
- Docker. Изменить время внутри контейнера
- Как удалить любое приложение на Android
Востребованное
Рубрики
Комментарии
- Vlad к записи Linux и тачпад. Прикосновение для клика «tap to click»
- Константин к записи Отзыв о CS-Cart. Страшный сон для MySQL
- Maxsimus312 к записи Linux и тачпад. Прикосновение для клика «tap to click»
- Alex к записи Linux и тачпад. Прикосновение для клика «tap to click»
- Dmitry к записи Linux и тачпад. Прикосновение для клика «tap to click»
Отключение и подключение USB-устройства из консоли
Я счастливый обладатель хуаевейого GPRG/UMTS модема. Работает исправно. Однако, порой подвисает и пропадает из /dev/, подключение, соответственно, отваливается. Спасает физическое извлечение и подключение модема.
Поскольку USB порт на ноуте не бесконечен, интересуюсь: какими командами можно отключить и подключить устройство? Как вариант, включить и выключить питание на USB порте?
Сто раз обсуждалось, ищите по моим комментариям.
Спасибо большое. Мне удалось найти решение.
Однако мне кажется, отсылать грепить три с лишним сотни сообщений в поисках нужного — моветон.
>Я счастливый обладатель хуаевейого GPRG/UMTS модема.
Не стесняйтесь, вы всё верно прочитали.
> Спасибо большое. Мне удалось найти решение
Если не трудно, добавь в LOR Wiki пожалуйста. Или дай прямую ссылку, сам добавлю
>>Спасибо большое. Мне удалось найти решение.
Ну так опубликуй его здесь, чего ты ждешь-то?
Все решения принято публиковать, береги время других.
zhan@zLaptop:~$ cat /usr/sbin/kick_modem #!/bin/sh echo "Выключение питания" echo suspend > /sys/bus/usb/devices/1-9/power/level sleep 10 echo "Включение питания" echo on > /sys/bus/usb/devices/1-9/power/level
Если честно, скрипт исправно включает и выключает питание на устройстве. Однако выводит модем из ступора в среднем через раз, что опечаливает.
Может это связано с тем, что он лишь отключает питание, а сигнал остается?
Ведь есть же устройства, которым питание USB не нужно, но тем не менее есть реакция на plug-unplug.
Может, специалисты подскажут, нельзя ли скриптово эмулировать переподключение всех четырех контактов (если это вообще может отличаться от переподключения одного лишь питания).
Если не трудно, добавь в LOR Wiki пожалуйста.
Нет, сигнал тут не при чём. Возможно надо задержку побольше поставить. Пока, тфу-тфу, не зависал и не было возможности поэкспериментировать.
Хотя, возможно, я ошибаюсь. Сейчас проверил на мыши: при суспенде диод стал гореть тусклее, но по-прежнему горел.
Перезагружаем USB через терминал в Linux
Сегодня поговорим о том, как можно перезагрузить USB устройство с помощью терминала.
Использовать будем Ubuntu Server 22.04 LTS и USB модем от Huawei.
Для перезагрузки USB устройства первым шагом узнаем ProductID и VendorID нашего устройства, в данном случае USB модема. Для этого в терминале наберем следующую команду:
Вот такой ответ вывела у меня данная команда:
Bus 001 Device 003: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 002: ID 0627:0001 Adomax Technology Co., Ltd QEMU USB Tablet Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
- 12d1:14db – ProductID и VendorID нашего устройства.
- Bus 001 Device 003 – bus и номер устройства.
Далее воспользуемся usbreset командой, чтобы перезагрузить наше устройство. Синтаксис команды:
usbreset (option) Option: PPPP:VVVV - указываем ProductID и VendorID. BBB/DDD - Указываем bus и номер устройства. "Product" - Указываем имя продукта.
usbreset 12d1:1f01 Resetting HUAWEI_MOBILE . can't open [No such device]
usbreset 001/003 Resetting HUAWEI_MOBILE . ok
usbreset "HUAWEI_MOBILE" Resetting HUAWEI_MOBILE . ok
Если есть вопросы, то пишем в комментариях.
Также можете вступить в Телеграм канал, ВКонтакте или подписаться на Twitter. Ссылки в шапке страницы.
Заранее всем спасибо.
RSS
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Сегодня в статье настроим и русифицируем Ubuntu Server 16.04/18.04/20.04. Чтобы поддерживался русский язык, и перевод системы стал русским
Начиная с сентября 2017 года удостоверяющим центрам предписано обязательно проверять CAA-записи в DNS перед генерацией сертификата
В этой статье рассмотрим пример обновления Ubuntu Server 16.04 до Ubuntu Server 18.04 Все наши действия нам придется выполнять из Читать
В связи с последними блокировками IP-адресов Роскомнадзором, встала необходимость завести свой собственный VPN сервер. Если VPN у вас ещё не Читать
How to reconnect a logically disconnected USB device?
What is going on in the driver or in the hardware, and most importantly, (how) can the device be logically reconnected (without physically plugging it out and back in)?
Note that this question is not about mounting. In the “logically disconnected” state, the kernel believes there is nothing on the USB bus (and so of course there is no entry under /dev ).
9 Answers 9
It is sometimes possible to do a power cycle on branch of the USB bus where the device is plugged :
# echo suspend > /sys/bus/usb/devices/1-1/power/level # echo auto > /sys/bus/usb/devices/1-1/power/level
The 1-1 should be adjusted to your configuration. You can see to which part of the USB tree your device is plugged by running lsusb -t before ejecting it.
You can find detailed information on the linux-usb mailing-list, this thread for example.
Assuming dmesg reports the correct device ID ("usb 9-4: USB disconnect [. ]"), this does not work on latest Arch Linux. There is no path /sys/bus/usb/devices/9-4 afterwards.
1. dmesg: WARNING! power/level is deprecated; use power/control instead 2. superuser.com/questions/371068/…
Now check for Kernel. E.g. if it is connected to Port 2 of Front UIP then it would be 1-1.2 and if it is connected to Port 1 of Front UIP then it would be 1-1.1.
For Port 2 : To disconnect USB :
echo '1-1.2' | tee /sys/bus/usb/drivers/usb/unbind
echo '1-1.2' | tee /sys/bus/usb/drivers/usb/bind
Reset the device, or the hub it is connected to, and the device should reappear. Here is a small program to do that:
It works for most USB drives I've tried, but there are exceptions, like my Kingston DT 101 II 4GB, which fails INQUIRY and READ CAPACITY commands after reset, and remains unusable until power-cycled.
You can power-cycle the device without unplugging if it gets power from the port, and your USB hub supports per-port power control. Here is a small program to control the power:
Unfortunately, almost no USB hubs support this feature, and it's very difficult to find one that supports it. Manufacturers do not advertise it. Many hubs also lie about it, for example if you do "lsusb -v" you can see "Per-port power switching" advertised in "wHubCharacteristic", but in reality it does not work. The chipset may support it, but it was easier/cheaper for the manufacturer to connect port power pins directly to the power supply instead of going through the chipset.