USB 复位 usbrst

https://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line

  1. Log in Sign up

By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and our Terms of Service.
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It only takes a minute to sign up.
Sign up to join this community
USB - 图1
Anybody can ask a question
USB - 图2
Anybody can answer
USB - 图3
The best answers are voted up and rise to the top
USB - 图4

  1. Home
    1. Questions
    2. Tags
    3. Users
    4. Jobs
    5. Unanswered

How do you reset a USB device from the command line?
Ask Question
Asked 10 years ago
Active 1 year, 4 months ago
Viewed 439k times
180
Is it possible to reset the connection of a USB device, without physically disconnecting/connecting from the PC?
Specifically, my device is a digital camera. I’m using gphoto2, but lately I get “device read errors”, so I’d like to try to do a software-reset of the connection.
From what I can tell, there are no kernel modules being loaded for the camera. The only one that looks related is usbhid.
command-line usb
share improve this question
asked Aug 1 ‘10 at 19:46
USB - 图5
cmcginty
4,89066 gold badges2727 silver badges3131 bronze badges

  • Which version of Ubuntu are you using? – User Aug 1 ‘10 at 20:15
  • i tried both solutions by Li Lo and ssokolow, all i get is permission denied, nomatter if i use the usbreset code or the command line “echo 0 > …” i use sudo, also my usb devices are owned by root but i can use them without admin rights(cameras..) – user290672 Jun 8 ‘14 at 16:40
  • 1

If you are getting read errors, you might have some data corruption. If your camera uses an external memory card (such as MicroSD), it might be wise to connect it to the computer and run fsck. – TSJNachos117 Jun 8 ‘14 at 18:47
add a comment
16 Answers
ActiveOldestVotes
129
Save the following as usbreset.c
/ usbreset — send a USB port reset to a USB device /

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <fcntl.h>
  4. #include <errno.h>
  5. #include <sys/ioctl.h>
  6. #include <linux/usbdevice_fs.h>
  7. int main(int argc, char **argv)
  8. {
  9. const char *filename;
  10. int fd;
  11. int rc;
  12. if (argc != 2) {
  13. fprintf(stderr, "Usage: usbreset device-filename\n");
  14. return 1;
  15. }
  16. filename = argv[1];
  17. fd = open(filename, O_WRONLY);
  18. if (fd < 0) {
  19. perror("Error opening output file");
  20. return 1;
  21. }
  22. printf("Resetting USB device %s\n", filename);
  23. rc = ioctl(fd, USBDEVFS_RESET, 0);
  24. if (rc < 0) {
  25. perror("Error in ioctl");
  26. return 1;
  27. }
  28. printf("Reset successful\n");
  29. close(fd);
  30. return 0;
  31. }

The run the following commands in terminal:

  1. Compile the program:

$ cc usbreset.c -o usbreset

  1. Get the Bus and Device ID of the USB device you want to reset:

$ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO

  1. Make our compiled program executable:

$ chmod +x usbreset

  1. Execute the program with sudo privilege; make necessary substitution for and ids as found by running the lsusb command:

$ sudo ./usbreset /dev/bus/usb/002/003


Source of above program: http://marc.info/?l=linux-usb&m=121459435621262&w=2
share improve this answer
edited Oct 20 ‘13 at 22:07
image.jpeg
Aditya
11.9k1414 gold badges5858 silver badges9090 bronze badges
answered Aug 2 ‘10 at 2:27
image.jpeg
Li Lo
13.2k44 gold badges3232 silver badges3939 bronze badges

  • 3

This works with ubuntu 13.10. The device ID can vary. TO get it for the mouse I have wrapped above code in few shell commands echo $(lsusb | grep Mouse) mouse=$( lsusb | grep Mouse | perl -nE “/\D+(\d+)\D+(\d+).+/; print qq(\$1/\$2)”) sudo /path/to/c-program/usbreset /dev/bus/usb/$mouse – knb Dec 22 ‘13 at 11:04

  • 1

my external drive seems to become undetectable (I have to hard reconnect the usb cable); it is a usb2.0 connected on a usb3.0 desktop PC port; when I run usbreset /dev/bus/usb/011/001 that is one of the 2 usb 3.0 root hubs at lsusb, it errors: “Error in ioctl: Is a directory”, any ideia? I tried on both usb 3.0 hubs – Aquarius Power Oct 30 ‘14 at 3:34

  • 1

If anyone reading this have a (usb) mouse freeze after logging in on Ubuntu 16.04 (with dmesg filled by “input irq status -75”) , i can confirm that this is the only solution that worked for me. Thank you – Agustin Baez May 2 ‘16 at 12:31

  • 1

@ Aquarius, I also get the same error “Error in ioctl: Is a directory”. Is it resolved ? – ransh Feb 12 ‘17 at 13:21

  • 1

See my answer here askubuntu.com/a/988297/558070 that uses the same method of reset as this answer but also allows simplified listing of and searching for devices. – mcarans Dec 21 ‘17 at 10:32
show 3 more comments
66
I haven’t found myself in your specific circumstances before, so I’m not sure if it’ll do enough, but the simplest way I’ve found to reset a USB device is this command: (No external apps necessary)
sudo sh -c “echo 0 > /sys/bus/usb/devices/1-4.6/authorized” sudo sh -c “echo 1 > /sys/bus/usb/devices/1-4.6/authorized”
That’s the actual one I use to reset my Kinect since libfreenect seems to have no API for putting it back to sleep. It’s on my Gentoo box, but the kernel should be new enough to use the same path structure for sysfs.
Yours obviously wouldn’t be 1-4.6 but you can either pull that device path from your kernel log (dmesg) or you can use something like lsusb to get the vendor and product IDs and then use a quick command like this to list how the paths relate to different vendor/product ID pairs:
for X in /sys/bus/usb/devices/; do echo “$X” cat “$X/idVendor” 2>/dev/null cat “$X/idProduct” 2>/dev/null echo done
share improve this answer
edited Jun 4 ‘16 at 12:50
USB - 图8
muru
159k2727 gold badges369369 silver badges597597 bronze badges
answered Sep 13 ‘11 at 6:56
image.jpeg
ssokolow
*1,218
1111 silver badges1919 bronze badges

  • sh: 1: cannot create /sys/bus/usb/devices/1-3.1:1.0/authorized: Directory nonexistent – Nicolas May 31 ‘12 at 3:22
  • 11

Thank you worked great! Maybe you should also mention to perform a echo 1 > /sys/bus/usb/devices/whatever/authorized inside a script to re-enable the device as soon as it has been disabled. I did it on both my mouse and usb keyboard and I ended up with a completely deaf system :)– Avio Apr 28 ‘13 at 8:43

  • 1

It’s extremely strange if it automatically re-set the value to 1 as setting it to 0 is telling the system you don’t want the device to be “authorized” and therefore inaccessible. – Tim Tisdall Oct 18 ‘13 at 19:45

  • 3

A note for anyone who tries to switch to the | sudo tee … approach to privileged /sys writes: That breaks badly if you don’t already have your sudo credentials cached. sudo sh -c “…” works as expected when sudo needs to prompt for a password. – ssokolow Jun 5 ‘16 at 10:40

  • 2

find /sys/bus/usb/devices//authorized -exec sh -c ‘echo 0 > ${0}; echo 1 > ${0}’ {} \; worked like charm for me. ty for pointing at the authorized files. – Marc Bredt Mar 5 ‘18 at 10:46
show 6 more comments
57
This will reset all of USB1/2/3 attached ports[1]:
for i in /sys/bus/pci/drivers/[uoex]hci_hcd/
:; do [ -e “$i” ] || continue echo “${i##/}” > “${i%/}/unbind” echo “${i##/}” > “${i%/*}/bind” done
I believe this will solve your problem. If you do not want to reset all of the USB endpoints, you can use appropriate device ID from /sys/bus/pci/drivers/ehci_hcd


Notes: [1]: the hcihcd kernel drivers typically control the USB ports. ohci_hcd and uhci_hcdare for USB1.1 ports, ehci_hcd is for USB2 ports and xhci_hcd is for USB3 ports. (see [https://en.wikipedia.org/wiki/Host_controller_interface(USB,Firewire)](https://en.wikipedia.org/wiki/Host_controller_interface(USB,_Firewire)))
share improve this answer
edited Jul 31 ‘18 at 18:25
USB - 图10
fresskoma
10344 bronze badges
answered May 4 ‘13 at 11:02
image.jpeg
Tamás Tapsonyi
*581
44 silver badges22 bronze badges

Although I’ve received the following message: ls: cannot access /sys/bus/pci/drivers/ehci_hcd/: No such file or directory this has resolved the issue, the mouse has started working immediately. +1– Attila Fulop Oct 10 ‘14 at 6:16

  • 2

@Otheus OHCI and UHCI are the USB 1.1 host standards, EHCI is the USB 2.0 host standard, and XHCI is the USB 3.0 host standard. – ssokolow Jul 20 ‘16 at 19:02

  • 4

This is a beautiful solution. However, on some later Kernels and other nix distributions, you will find that you need to substitute hci_hcd with *hci-pci, as the hci_hcd driver is already compiled into the Kernel. – not2qubit Mar 1 ‘17 at 17:14

  • 2

On a Banana Pi, there apparently is no PCI bus, I had to use the following: for i in /sys/bus/usb/drivers//:; do – Martin Hansen Jun 29 ‘17 at 9:14
[show *6
more comments](https://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line#)
11
I needed to automate this in a python script, so I adapted LiLo’s extremely helpful answer to the following:

  1. #!/usr/bin/env python
  2. import os
  3. import sys
  4. from subprocess import Popen, PIPE
  5. import fcntl
  6. driver = sys.argv[-1]
  7. print "resetting driver:", driver
  8. USBDEVFS_RESET= 21780
  9. try:
  10. lsusb_out = Popen("lsusb | grep -i %s"%driver, shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().split()
  11. bus = lsusb_out[1]
  12. device = lsusb_out[3][:-1]
  13. f = open("/dev/bus/usb/%s/%s"%(bus, device), 'w', os.O_WRONLY)
  14. fcntl.ioctl(f, USBDEVFS_RESET, 0)
  15. except Exception, msg:
  16. print "failed to reset device:", msg

In my case it was the cp210x driver (which I could tell from lsmod | grep usbserial), so you could save the above snippet as reset_usb.py and then do this:
sudo python reset_usb.py cp210x
This might also be helpful if you don’t already have a c compiler setup on your system, but you do have python.
share improve this answer
edited Nov 9 ‘16 at 18:37
USB - 图12
David Foerster
31.5k1313 gold badges7676 silver badges127127 bronze badges
answered Mar 2 ‘15 at 20:38
image.jpeg
Peter
35133 silver badges77 bronze badges

  • worked for me on a Raspberry – webo80 Jun 23 ‘16 at 14:36
  • 1

A few more words on your solution please. For example, something about the constant USBDEVFS_RESET. Is it always the same for all systems? – not2qubit Feb 28 ‘17 at 7:25

  • @not2qubit USBDEVFS_RESET is the same for all systems. For MIPS it is 536892692. – yegorich Apr 21 ‘17 at 9:09
  • Newer versions of lsusb seem to need the -t argument (tree mode) to show the driver info that this script is expecting, but the script then needs some updates to parse the different output lines this generates – Cheetah Oct 19 ‘17 at 18:56
  • See my answer here askubuntu.com/a/988297/558070 for a much improved version of this script. – mcaransDec 21 ‘17 at 10:30

add a comment
10
I’ve created a Python script that simplifies the whole process based on answers here.
Save the script below as reset_usb.py or clone this repo.
Usage:

  1. python reset_usb.py help # Show this help
  2. sudo python reset_usb.py list # List all USB devices
  3. sudo python reset_usb.py path /dev/bus/usb/XXX/YYY # Reset USB device using path /dev/bus/usb/XXX/YYY
  4. 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
  5. sudo python reset_usb.py listpci # List all PCI USB devices
  6. 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
  7. 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
  8. Script:
  9. #!/usr/bin/env python
  10. import os
  11. import sys
  12. from subprocess import Popen, PIPE
  13. import fcntl
  14. instructions = '''
  15. Usage: python reset_usb.py help : Show this help
  16. sudo python reset_usb.py list : List all USB devices
  17. sudo python reset_usb.py path /dev/bus/usb/XXX/YYY : Reset USB device using path /dev/bus/usb/XXX/YYY
  18. 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
  19. sudo python reset_usb.py listpci : List all PCI USB devices
  20. sudo python reset_usb.py pathpci /sys/bus/pci/drivers/.../XXXX:XX:XX.X : Reset PCI USB device using path
  21. 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
  22. '''
  23. if len(sys.argv) < 2:
  24. print(instructions)
  25. sys.exit(0)
  26. option = sys.argv[1].lower()
  27. if 'help' in option:
  28. print(instructions)
  29. sys.exit(0)
  30. def create_pci_list():
  31. pci_usb_list = list()
  32. try:
  33. lspci_out = Popen('lspci -Dvmm', shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().decode('utf-8')
  34. pci_devices = lspci_out.split('%s%s' % (os.linesep, os.linesep))
  35. for pci_device in pci_devices:
  36. device_dict = dict()
  37. categories = pci_device.split(os.linesep)
  38. for category in categories:
  39. key, value = category.split('\t')
  40. device_dict[key[:-1]] = value.strip()
  41. if 'USB' not in device_dict['Class']:
  42. continue
  43. for root, dirs, files in os.walk('/sys/bus/pci/drivers/'):
  44. slot = device_dict['Slot']
  45. if slot in dirs:
  46. device_dict['path'] = os.path.join(root, slot)
  47. break
  48. pci_usb_list.append(device_dict)
  49. except Exception as ex:
  50. print('Failed to list pci devices! Error: %s' % ex)
  51. sys.exit(-1)
  52. return pci_usb_list
  53. def create_usb_list():
  54. device_list = list()
  55. try:
  56. lsusb_out = Popen('lsusb -v', shell=True, bufsize=64, stdin=PIPE, stdout=PIPE, close_fds=True).stdout.read().strip().decode('utf-8')
  57. usb_devices = lsusb_out.split('%s%s' % (os.linesep, os.linesep))
  58. for device_categories in usb_devices:
  59. if not device_categories:
  60. continue
  61. categories = device_categories.split(os.linesep)
  62. device_stuff = categories[0].strip().split()
  63. bus = device_stuff[1]
  64. device = device_stuff[3][:-1]
  65. device_dict = {'bus': bus, 'device': device}
  66. device_info = ' '.join(device_stuff[6:])
  67. device_dict['description'] = device_info
  68. for category in categories:
  69. if not category:
  70. continue
  71. categoryinfo = category.strip().split()
  72. if categoryinfo[0] == 'iManufacturer':
  73. manufacturer_info = ' '.join(categoryinfo[2:])
  74. device_dict['manufacturer'] = manufacturer_info
  75. if categoryinfo[0] == 'iProduct':
  76. device_info = ' '.join(categoryinfo[2:])
  77. device_dict['device'] = device_info
  78. path = '/dev/bus/usb/%s/%s' % (bus, device)
  79. device_dict['path'] = path
  80. device_list.append(device_dict)
  81. except Exception as ex:
  82. print('Failed to list usb devices! Error: %s' % ex)
  83. sys.exit(-1)
  84. return device_list
  85. if 'listpci' in option:
  86. pci_usb_list = create_pci_list()
  87. for device in pci_usb_list:
  88. print('path=%s' % device['path'])
  89. print(' manufacturer=%s' % device['SVendor'])
  90. print(' device=%s' % device['SDevice'])
  91. print(' search string=%s %s' % (device['SVendor'], device['SDevice']))
  92. sys.exit(0)
  93. if 'list' in option:
  94. usb_list = create_usb_list()
  95. for device in usb_list:
  96. print('path=%s' % device['path'])
  97. print(' description=%s' % device['description'])
  98. print(' manufacturer=%s' % device['manufacturer'])
  99. print(' device=%s' % device['device'])
  100. print(' search string=%s %s %s' % (device['description'], device['manufacturer'], device['device']))
  101. sys.exit(0)
  102. if len(sys.argv) < 3:
  103. print(instructions)
  104. sys.exit(0)
  105. option2 = sys.argv[2]
  106. print('Resetting device: %s' % option2)
  107. # 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
  108. def reset_pci_usb_device(dev_path):
  109. folder, slot = os.path.split(dev_path)
  110. try:
  111. fp = open(os.path.join(folder, 'unbind'), 'wt')
  112. fp.write(slot)
  113. fp.close()
  114. fp = open(os.path.join(folder, 'bind'), 'wt')
  115. fp.write(slot)
  116. fp.close()
  117. print('Successfully reset %s' % dev_path)
  118. sys.exit(0)
  119. except Exception as ex:
  120. print('Failed to reset device! Error: %s' % ex)
  121. sys.exit(-1)
  122. if 'pathpci' in option:
  123. reset_pci_usb_device(option2)
  124. if 'searchpci' in option:
  125. pci_usb_list = create_pci_list()
  126. for device in pci_usb_list:
  127. text = '%s %s' % (device['SVendor'], device['SDevice'])
  128. if option2 in text:
  129. reset_pci_usb_device(device['path'])
  130. print('Failed to find device!')
  131. sys.exit(-1)
  132. def reset_usb_device(dev_path):
  133. USBDEVFS_RESET = 21780
  134. try:
  135. f = open(dev_path, 'w', os.O_WRONLY)
  136. fcntl.ioctl(f, USBDEVFS_RESET, 0)
  137. print('Successfully reset %s' % dev_path)
  138. sys.exit(0)
  139. except Exception as ex:
  140. print('Failed to reset device! Error: %s' % ex)
  141. sys.exit(-1)
  142. if 'path' in option:
  143. reset_usb_device(option2)
  144. if 'search' in option:
  145. usb_list = create_usb_list()
  146. for device in usb_list:
  147. text = '%s %s %s' % (device['description'], device['manufacturer'], device['device'])
  148. if option2 in text:
  149. reset_usb_device(device['path'])
  150. print('Failed to find device!')
  151. sys.exit(-1)

share improve this answer
edited Mar 15 ‘19 at 22:47
image.jpeg
Pablo Bianchi
6,12233 gold badges3434 silver badges6363 bronze badges
answered Dec 21 ‘17 at 10:15
image.jpeg
mcarans
81511 gold badge66 silver badges1717 bronze badges

  • this is the best answer to this question. – kapad Apr 5 ‘19 at 7:47

add a comment
5
Quickest way to reset will be to reset the USB controller itself. Doing so will enforce udev to unregister the device on disconnection, and register is back once you enable it.
echo -n “0000:00:1a.0” | tee /sys/bus/pci/drivers/ehci_hcd/unbind echo -n “0000:00:1d.0” | tee /sys/bus/pci/drivers/ehci_hcd/unbind echo -n “0000:00:1a.0” | tee /sys/bus/pci/drivers/ehci_hcd/bind echo -n “0000:00:1d.0” | tee /sys/bus/pci/drivers/ehci_hcd/bind
This should work for most PC environment. However, if you are using some custom hardware you can simply iterate through the device names. With this method you don’t need to find out the device name by lsusb. You can incorporate in a automated script as well.
share improve this answer
answered Nov 24 ‘14 at 19:34
image.jpeg
chandank
28955 silver badges1212 bronze badges

  • 1

You need to run these commands as root/sudo, and it will not work on all systems (on some, you’ll need to replace ehci_hcd with ehci-pci. More info on this solution (perhaps where it came from?):davidjb.com/blog/2012/06/…Lambart Nov 5 ‘15 at 17:43
add a comment
4
I’m using kind of sledgehammer by reloading the modules. This is my usb_reset.sh script:
#!/bin/bash # USB drivers rmmod xhci_pci rmmod ehci_pci # uncomment if you have firewire #rmmod ohci_pci modprobe xhci_pci modprobe ehci_pci # uncomment if you have firewire #modprobe ohci_pci
And this is my systemd service file /usr/lib/systemd/system/usbreset.service which runs usb_reset.sh after my diplay manager has started:
[Unit] Description=usbreset Service After=gdm.service Wants=gdm.service [Service] Type=oneshot ExecStart=/path/to/usb_reset.sh
share improve this answer
edited Jan 16 ‘16 at 9:21
answered Jan 9 ‘16 at 10:18
USB - 图17
Ulrich-Lorenz Schlüter
63255 silver badges1010 bronze badges

  • Using the listpci option of my script here: askubuntu.com/a/988297/558070 will help identify which USB module to reload (eg. xhci_pci, ehci_pci). – mcarans Jan 24 ‘18 at 15:14
  • 5

Unfortunately on my system these kernel modules are not separate form the kernel, so this won’t work: rmmod: ERROR: Module xhci_pci is builtin. – unfa Jun 28 ‘18 at 13:00
add a comment
4
As the special case of the question is a communication problem of gphoto2 with a camera on USB, there is an option in gphoto2 to reset its USB connection:
gphoto2 —reset
Maybe this option didn’t exist in 2010 when the question was asked.
share improve this answer
edited Aug 31 ‘16 at 18:49
answered Aug 31 ‘16 at 13:19
USB - 图18
mviereck
19966 bronze badges
add a comment
3
I made a python script which will reset a particular USB device based on the device number. You can find out the device number from command lsusb.
for example:
$ lsusb Bus 002 Device 004: ID 046d:c312 Logitech, Inc. DeLuxe 250 Keyboard
In this string 004 is the device number

  1. import os
  2. import argparse
  3. import subprocess
  4. path='/sys/bus/usb/devices/'
  5. def runbash(cmd):
  6. p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
  7. out = p.stdout.read().strip()
  8. return out
  9. def reset_device(dev_num):
  10. sub_dirs = []
  11. for root, dirs, files in os.walk(path):
  12. for name in dirs:
  13. sub_dirs.append(os.path.join(root, name))
  14. dev_found = 0
  15. for sub_dir in sub_dirs:
  16. if True == os.path.isfile(sub_dir+'/devnum'):
  17. fd = open(sub_dir+'/devnum','r')
  18. line = fd.readline()
  19. if int(dev_num) == int(line):
  20. print ('Your device is at: '+sub_dir)
  21. dev_found = 1
  22. break
  23. fd.close()
  24. if dev_found == 1:
  25. reset_file = sub_dir+'/authorized'
  26. runbash('echo 0 > '+reset_file)
  27. runbash('echo 1 > '+reset_file)
  28. print ('Device reset successful')
  29. else:
  30. print ("No such device")
  31. def main():
  32. parser = argparse.ArgumentParser()
  33. parser.add_argument('-d', '--devnum', dest='devnum')
  34. args = parser.parse_args()
  35. if args.devnum is None:
  36. print('Usage:usb_reset.py -d <device_number> \nThe device number can be obtained from lsusb command result')
  37. return
  38. reset_device(args.devnum)
  39. if __name__=='__main__':
  40. main()

share improve this answer
edited Dec 19 ‘16 at 22:05
USB - 图19
Jonathon Reinhart
10333 bronze badges
answered Sep 7 ‘16 at 11:42
image.jpeg
Raghu
3111 bronze badge

add a comment
2
Here is script that will only reset a matching product/vendor ID.
#!/bin/bash set -euo pipefail IFS=$’\n\t’ VENDOR=”045e” PRODUCT=”0719” for DIR in $(find /sys/bus/usb/devices/ -maxdepth 1 -type l); do if [[ -f $DIR/idVendor && -f $DIR/idProduct && $(cat $DIR/idVendor) == $VENDOR && $(cat $DIR/idProduct) == $PRODUCT ]]; then echo 0 > $DIR/authorized sleep 0.5 echo 1 > $DIR/authorized fi done
share improve this answer
edited Nov 21 ‘17 at 11:32
USB - 图21
derHugo
2,76244 gold badges2222 silver badges4141 bronze badges
answered Apr 30 ‘17 at 3:50
USB - 图22
cmcginty
4,89066 gold badges2727 silver badges3131 bronze badges

  • 1

I found your script is useful. But what should I do if the $DIR disappears and device is not visible? – Eugen Konkov Oct 13 ‘17 at 7:36
add a comment
1
Did somebody order a sledgehammer? This is pieced together from various other answers here.
#!/bin/bash # Root required if (( UID )); then exec sudo “$0” “$@” fi cd /sys/bus/pci/drivers function reinit {( local d=”$1” test -e “$d” || return rmmod “$d” cd “$d” for i in $(ls | grep :); do echo “$i” > unbind done sleep 1 for i in $(ls | grep :); do echo “$i” > bind done modprobe “$d” )} for d in ?hci_???; do echo “ - $d” reinit “$d” done
share improve this answer
edited Nov 21 ‘17 at 11:32
USB - 图23
derHugo
2,76244 gold badges2222 silver badges4141 bronze badges
answered Jun 28 ‘16 at 14:08
USB - 图24
Mark K Cowan
17688 bronze badges

  • Mark, have you found that the unbinding is really necessary or is it here just to be on the safe side? – ndemou Nov 10 ‘16 at 14:27
  • This is a sledgehammer, it probably does a lot of unnecessary things – Mark K Cowan Nov 10 ‘16 at 14:37
  • @MarkKCowan , How do you use it? What are the command arguments needed/expected? – not2qubit Feb 28 ‘17 at 7:15
  • 1

@not2qubit: No command-line arguments required. The $@ in the sudo proxy is just a force of habbit, having it prevents bugs if I later decide to add arguments (and forget to update the sudo proxy). – Mark K Cowan Nov 21 ‘17 at 14:54

  • 1

@MarkKCowan Doh! Sorry mate! Oh yes of curse! I should not be commenting on this site while sleepy. Upvoted! – not2qubit Nov 21 ‘17 at 16:29
show 2 more comments
1
Sometimes I want to perform this operation on a particular device, as identified by VID (vendor id) and PID (product id). This is a script I’ve found useful for this purpose, that uses the nifty libusb library.
First run:
sudo apt-get install libusb-dev
Then, this c++ file’s resetDeviceConnection should perform this task, of resetting a device connection as identified by vid and pid.
#include int resetDeviceConnection(UINT_16 vid, UINT_16 pid){ /Open libusb/ int resetStatus = 0; libusb_context context; libusb_init(&context); libusb_device_handle dev_handle = libusb_open_device_with_vid_pid(context,vid,pid); if (dev_handle == NULL){ printf(“usb resetting unsuccessful! No matching device found, or error encountered!\n”); resetStatus = 1; } else{ /reset the device, if one was found/ resetStatus = libusb_reset_device(dev_handle); } /exit libusb/ libusb_exit(context); return resetStatus; }
(stolen from my personal TIL catalog:https://github.com/Marviel/TIL/blob/master/unix_tools/Reset_specific_USB_Device.md)
share improve this answer
edited Nov 21 ‘17 at 11:32
USB - 图25
derHugo
2,76244 gold badges2222 silver badges4141 bronze badges
answered Dec 29 ‘16 at 13:53
USB - 图26
Marviel
1111 bronze badge

  • 3

Please can you show how this script is run. – George Udosen Dec 29 ‘16 at 14:28

  • Sure thing, let me update. – Marviel Dec 29 ‘16 at 20:31
  • 1

@Marviel, we’re still waiting for an update… – not2qubit Feb 28 ‘17 at 7:18

  • needs downvote as useless – Eugen Konkov Oct 13 ‘17 at 7:36

add a comment
1
i made a simple bash script for reset particular USB device.
#!/bin/bash #type lsusb to find “vendor” and “product” ID in terminal set -euo pipefail IFS=$’\n\t’ #edit the below two lines of vendor and product values using lsusb result dev=$(lsusb -t | grep usbdevicename | grep ‘If 1’ | cut -d’ ‘ -f13|cut -d”,” -f1) #VENDOR=05a3 #PRODUCT=9230 VENDOR=$(lsusb -s $dev | cut -d’ ‘ -f6 | cut -d: -f1) PRODUCT=$(lsusb -s $dev | cut -d’ ‘ -f6 | cut -d: -f2) for DIR in $(find /sys/bus/usb/devices/ -maxdepth 1 -type l); do if [[ -f $DIR/idVendor && -f $DIR/idProduct && $(cat $DIR/idVendor) == $VENDOR && $(cat $DIR/idProduct) == $PRODUCT ]]; then echo 0 > $DIR/authorized sleep 0.5 echo 1 > $DIR/authorized fi done
share improve this answer
edited Jan 21 ‘19 at 12:26
USB - 图27
Olorin
2,9581111 silver badges2626 bronze badges
answered Jan 21 ‘19 at 11:58
image.jpeg
Thoht
2144 bronze badges
add a comment
0
Try this, it’s a software unplug (Eject).
Sometimes doesn’t work simply unbind device for some devices.
Example:
I want to remove or eject my “Genius NetScroll 120”.
Then i first Check my attached usb device
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 003: ID 03f0:231d Hewlett-Packard Bus 001 Device 004: ID 138a:0007 Validity Sensors, Inc. VFS451 Fingerprint Reader Bus 001 Device 005: ID 04f2:b163 Chicony Electronics Co., Ltd Bus 002 Device 009: ID 0458:003a KYE Systems Corp. (Mouse Systems) NetScroll+ Mini Traveler / Genius NetScroll 120 <——This my Mouse! XDDD
Ok, i found my mouse, it’s has a Bus 002, Device 009, idVendor 0458 and idProduct 003a, so this is a reference device info about the mouse.
This is important, the Bus number is the begin name path to device and i will check the product Id and Vendor to ensure the correct device to remove.
$ ls /sys/bus/usb/drivers/usb/ 1-1/ 1-1.1/ 1-1.3/ 1-1.5/ 2-1/ 2-1.3/ bind uevent unbind usb1/ usb2/
Pay atention on the folders, check the begining with folder number 2, i will check this one because my Bus is 002, and one by one i have check each folder containing the correct idVendor and idProduct about my mouse info.
In this case, i will retrieve the info with this command:
cat /sys/bus/usb/drivers/usb/2-1.3/idVendor 0458 cat /sys/bus/usb/drivers/usb/2-1.3/idProduct 003a
Ok, the path /sys/bus/usb/drivers/usb/2-1.3/ match with my info mouse! XDDD.
It’s time to remove the device!
su -c “echo 1 > /sys/bus/usb/drivers/usb/2-1.3/remove”
Plug again the usb device and it’s work again!
share improve this answer
answered Jan 31 ‘14 at 11:15
image.jpeg
user242078
1

  • 10

What if you can’t plug it in again? (for example it’s an internal sdcard reader) – aleb Jun 29 ‘14 at 20:57
add a comment
0
If you know your device name, this python script will work:
#!/usr/bin/python “”” USB Reset Call as “usbreset.py “ With devicefilepath like “/dev/bus/usb/busnumber/devicenumber” “”” import fcntl, sys, os USBDEVFS_RESET = ord(‘U’) << (4*2) | 20 def main(): fd = os.open(sys.argv[1], os.O_WRONLY) if fd < 0: sys.exit(1) fcntl.ioctl(fd, USBDEVFS_RESET, 0) os.close(fd) sys.exit(0) # end main if __name == ‘__main‘: main()
share improve this answer
edited Nov 21 ‘17 at 11:42
USB - 图30
derHugo
2,76244 gold badges2222 silver badges4141 bronze badges
answered Aug 4 ‘17 at 14:35
image.jpeg
Clay
10111 bronze badge
add a comment
-1
Perhaps this works for a camera, too:
Following revived a starved USB 3.0 HDD on a 3.4.42 (kernel.org) Linux on my side. dmesg told, that it was timing out commands after 360s (sorry, I cannot copy the syslog here, not connected networks) and the drive hung completely. Processes accessing the device were blocked in the kernel, unkillable. NFS hung, ZFS hung, dd hung.
After doing this, everything worked again. dmesg told just a single line about the USB device found.
I really have no idea what following does in detail. But it worked.
The following example output is from Debian Squeeze with 2.6.32-5-686 kernel, so I think it works for 2.6 and above:
$ ls -al /dev/sdb brw-rw—-T 1 root floppy 8, 16 Jun 3 20:24 /dev/sdb $ ls -al /sys/dev/block/8:16/device/rescan —w———- 1 root root 4096 Jun 6 01:46 /sys/dev/block/8:16/device/rescan $ echo 1 > /sys/dev/block/8:16/device/rescan
If this does not work, perhaps somebody else can figure out how to send a real reset to a device.
share improve this answer
answered Jun 6 ‘13 at 0:08
image.jpeg
Tino
49444 silver badges88 bronze badges

  • To the downvoter: Why? If you are unhappy with some wording, you can always suggest an edit. Also: Please check, which answers were here at the time this was posted. Please do not compare with the versions of the others as seen today, compare with the versions of the others as seen back then! Thank you very much. – Tino Feb 2 at 16:30

add a comment
Highly active question. Earn 10 reputation in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
Not the answer you’re looking for? Browse other questions tagged command-line usb or ask your own question.
The Overflow Blog

Featured on Meta

Looking for a job?
USB - 图33

  • SRE Lead

Mox BankHong Kong
RELOCATIONVISA SPONSORSHIP
amazon-web-servicesdocker
USB - 图34

  • System Reliability Engineer (SRE) - Market Data - Hong Kong

Bloomberg LPHong Kong
RELOCATIONVISA SPONSORSHIP
pythonsre
USB - 图35

  • SRE Analysts

Mox BankHong Kong
RELOCATIONVISA SPONSORSHIP
cloudjava
USB - 图36

  • Site Reliability Engineer - Remote

NumbrsNo office location
REMOTE
gokubernetes
USB - 图37

  • C++ Software Developer

Daksh TradingHong Kong Island, Hong Kong
$70K - $90KRELOCATIONVISA SPONSORSHIP
c++linux
USB - 图38

  • Senior Software Engineer - Ticker Plant - Hong Kong

Bloomberg LPHong Kong
RELOCATIONVISA SPONSORSHIP
c++linux
USB - 图39

  • Backend Architect (m/f/d)

SimScaleMünchen, Germany
REMOTE
gojava
USB - 图40

  • Security Engineer - Remote

NumbrsNo office location
REMOTE
gojava
View more jobs on Stack Overflow
Linked
2
Startup script to unmount and re-mount a USB device
1
Reset CDMA USB Modem without unplug/replug
12
How do I prevent Notifications and Icon Popups when Phone Connected to USB?
15
Dual booting: every time Windows boots, it increases the scrolling speed of the mouse on Ubuntu
3
How to unmount MTP USB device from command line
1
USB ports will not recognize flash drive
1
Canon LIDE 110: should reconnect USB for each scan
1
How to Reset a USB device after improper shutdown(device no longer visible) without unplugging
1
How can I reset usb port after over current draw?
2
fprint timing out on login 16.04 LTS
See more linked questions
Related
Hot Network Questions

more hot questions
Question feed
ASK UBUNTU

COMPANY

STACK EXCHANGE
NETWORK

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2020.7.29.37299
Ubuntu and Canonical are registered trademarks of Canonical Ltd.

Ask Ubuntu requires external JavaScript from another domain, which is blocked or failed to load. Retry using another source.
**

usb 带宽测试

https://youyou-tech.com/2019/08/22/%E5%A6%82%E4%BD%95%E5%9C%A8Linux%E4%B8%8A%E6%9F%A5%E8%AF%A2USB%E8%AE%BE%E5%A4%87%E7%9A%84%E5%B8%A6%E5%AE%BD%E4%BD%BF/
sudo apt install cmake git libboost-dev libpcap-dev libboost-thread-dev libboost-system-dev
在本地系统上使用Git 克隆Usbtop仓库:
usbtop检测工具
Symbol: USB_MON [=n] │
│ Type : tristate │
│ Prompt: USB Monitor │
│ Location: │
│ -> Device Drivers │
│ (1) -> USB support (USB_SUPPORT [=y]) │
│ Defined at drivers/usb/mon/Kconfig:5 │
│ Depends on: USB_SUPPORT [=y] && USB [=y]
USB Monitor