Linux restart usb port

How do I reset an USB device without unplugging it in Linux?

Every now and then there might come a need to reset a USB device, is there a way to perform the reset in software without unplugging the device itself and then pluggin it back in? More specifically I have a webcam which gets confused when playing too much with the settings in guvcapture and then needs a reset to get back on track.

5 Answers 5

usbutils includes usbreset.

Run it without any arguments to see usage and a list of devices. It requires superuser access to actually reset devices.

Usage: usbreset PPPP:VVVV - reset by product and vendor id usbreset BBB/DDD - reset by bus and device number usbreset "Product" - reset by product name 

This allows resetting individual devices which is an improvement over some answers that reset the entire bus. It might not resolve intermediary hub/bus issues, but it’s a lot less disruptive to only reset the desired device.

You could try Benjamin Close’s resetusb program to reset all devices — there are no binaries available, but compiling it is rather easy. Save the source code as resetusb.c , then run:

gcc -lusb resetusb.c -o resetusb 

You can now run the tool as resetusb . Alternatively, @unhammer points to Alan Stern’s single-device version (plus some hints on how to use it).

modprobe -vr ehci_hcd modprobe -v ehci_hcd 

(you could of course script this)

Some distributions may also have their own tools to restart the USB subsystem; Mandrake apparently has /etc/init.d/usb .

$ sudo modprobe -vr ehci_hcd results in modprobe: FATAL: Module ehci_hcd is builtin. on kubuntu trusty.

On my laptop with debian 8, ehci_hcd gives errors. However, rmmod ehci_pci && sleep 2 && modprobe ehci_pci works perfectly.

Let’s say I want to reset /dev/sdc .

# udevadm info -q all /dev/sdc | grep DEVPATH E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.4/2-1.4:1.0/host2/target2:0:0/2:0:0:0/block/sdc 

I take the 2-1.4 above (yours might just be 2-1 — my device is plugged into a hub) and do:

# echo 2-1.4 > /sys/bus/usb/drivers/usb/unbind # echo 2-1.4 > /sys/bus/usb/drivers/usb/bind 

I’ve made a one-liner(-ish) for that: DEV=»sdc»; USB=$(udevadm info -q all /dev/$DEV | grep DEVPATH | grep -o ‘/usb4*/[1-9,-]*’ | cut -d’/’ -f3); echo $USB > /sys/bus/usb/drivers/usb/unbind; echo $USB > /sys/bus/usb/drivers/usb/bind Make DEV the drive you want to reset, and run — it’ll extract the USB port number and unbind/bind it (untested).

You can restart the hardware abstraction layer: sudo /etc/init.d/hal restart

i think HAL is replaced by something else in the newest version of ubuntu.. so its depend of distrib..

I seriously doubt it would have worked anyway. HAL wasn’t a low-level abstraction layer like the Windows component of the same name.

I’ve created a Python script that simplifies the whole process:

Save the script below as reset_usb.py or clone this repo.

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 restart usb port] = 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 через терминал в Linux

linux-logo

Сегодня поговорим о том, как можно перезагрузить 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.

linux-logo

Сегодня в статье настроим и русифицируем Ubuntu Server 16.04/18.04/20.04. Чтобы поддерживался русский язык, и перевод системы стал русским

Читайте также:  Linux запрет обновления пакета

dns_bind9

Начиная с сентября 2017 года удостоверяющим центрам предписано обязательно проверять CAA-записи в DNS перед генерацией сертификата

linux-logo

В этой статье рассмотрим пример обновления Ubuntu Server 16.04 до Ubuntu Server 18.04 Все наши действия нам придется выполнять из Читать

В связи с последними блокировками IP-адресов Роскомнадзором, встала необходимость завести свой собственный VPN сервер. Если VPN у вас ещё не Читать

Источник

linux rescan usb devices

How can I tell what devices are connected to my USB Linux?

  1. $ lsusb.
  2. $ dmesg.
  3. $ dmesg | less.
  4. $ usb-devices.
  5. $ lsblk.
  6. $ sudo blkid.
  7. $ sudo fdisk -l.

How do you reset a USB device from the command line?

  1. Compile the program: $ cc usbreset.c -o usbreset.
  2. Get the Bus and Device ID of the USB device you want to reset: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO.
  3. Make our compiled program executable: $ chmod +x usbreset.

How do I refresh my USB?

  1. Reboot the computer. Or .
  2. Unplug, then re-plug, the physical device connected to the port. Or .
  3. Disable, then re-enable, the USB Root Hub device that the port is attached to.

Why is my USB not detected?

This can be caused by several different things such as a damaged or dead USB flash drive, outdated software and drivers, partition issues, wrong file system, and device conflicts. . If you're getting a USB Device not Recognized error, we have a solution for that too, so check out the link.

How do I fix an unresponsive USB port?

  1. Restart your computer. .
  2. Look for debris in the USB port. .
  3. Check for loose or broken internal connections. .
  4. Try a different USB port. .
  5. Swap to a different USB cable. .
  6. Plug your device into a different computer. .
  7. Try plugging in a different USB device. .
  8. Check the device manager (Windows).
Читайте также:  Отличия can от linux

How do I know if I have USB 3.0 Linux?

  1. Look at the output of lsusb. Note what the bus number is of the USB 2.0 and USB 3.0 ports. In the article, BUS 1 and BUS 2 are USB 2.0, and BUS 3 is USB 3.0.
  2. Plug a USB device into one of the ports.
  3. Use lsusb again. Note the bus number that the device is plugged into.

How do I find my USB serial port in Linux?

  1. Open terminal and type: ls /dev/tty* .
  2. Note the port number listed for /dev/ttyUSB* or /dev/ttyACM* . The port number is represented with * here.
  3. Use the listed port as the serial port in MATLAB ® . For example: /dev/ttyUSB0 .

Where is my USB mounted Linux?

Easiest way to get the path of the mounted USB is open Files, right-click on the USB in the sidebar and click properties. Concatentate the parent folder entry with the name of the USB (look at topbar for name). for example: /home/user/1234-ABCD .

How do I reset my USB ports Windows 10?

  1. Step 1: Open Device Manager. .
  2. Step 2: On Device Manager, find Universal Serial Bus controllers and expand it.
  3. Step 3: You will see a list of the USB controller. .
  4. Step 4: Restart your computer. .
  5. Step 1: Open Registry Editor.

How do I reconnect USB without unplugging?

  1. DevEject. DevEject is a simple software configured to replace "Safely Remove Hardware and Eject Media" in Windows. .
  2. USB Safely Remove. USB Safely Remove is an extended USB device management program. .
  3. Zentimo. Zentimo is the successor of USB Safely Remove . .
  4. Disable and re-enable USB Mass Storage Devide. .
  5. Uninstall USB Root Hub.

How can I fix my USB 3.0 port?

Update to the Latest BIOS, or Check USB 3.0 is Enabled in BIOS. In many cases, your motherboard will be responsible for software issues related to your USB 3.0 ports or any other ports on the motherboard. For this reason, updating to the latest BIOS may fix things.

Can USB ports go bad?

The implication certainly is that USB ports can go bad. My guess is that it's more 'dirt' related than anything else; the connectors are getting a little dirty over time since they are exposed to the elements. The software can get confused, certainly, but that's normally something you can clean up.

How do I force Windows to recognize a USB?

  1. Select Start»Control Panel and double-click the System icon.
  2. Select the Hardware tab and click the Device Manager button. .
  3. Double-click the Ports (COM & LPT) icon. .
  4. Double-click the Universal Serial Bus Controllers icon. .
  5. Click the Scan for Hardware Changes icon at the top of the Device Manager window.

How to Simulate a Middle-Click on a Laptop Touchpad in Windows 10

Touchpad

For Windows 10 PCs with a Precision Touchpad To do so, head to Settings > Devices > Touchpad. Scroll down and find the “Three-finger gestures” s.

How to Remove a Password From a PDF File on Your Mac

File

How to Remove Known Password from PDF on Mac with Adobe?1st Open the password protected PDF with Adobe Acrobat. If there is an open password, enter it.

How to Set Notification Priorities for Apps in Windows 10 Action Center

Notifications

Make your favorite app's notifications top priority, and you'll always see its new notifications at the top of action center. Go to Settings > Syst.

Fresh articles, interesting news and useful guides from the world of modern technologies. We know everything about computers and gadgets that you encounter every day

Источник

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