Сброс USB-модема CDMA без выключения / повтора [dубликат]

Если вы отредактируете файл / etc / default / grub и измените строку:

GRUB_CMDLINE_LINUX=""

на

GRUB_CMDLINE_LINUX="acpi_backlight=vendor"

, а затем запустите

sudo update-grub

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

142
задан 2 August 2010 в 00:46

92 ответа

Сохраните следующее как usbreset.c

/* usbreset -- send a USB port reset to a USB device */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Запустите следующие команды в терминале:

Скомпилируйте программу: $ cc usbreset.c -o usbreset Получите идентификатор шины и устройства USB-устройство, которое вы хотите сбросить: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO Сделайте нашу скомпилированную исполняемую программу: $ chmod +x usbreset Выполните программу с правами sudo; сделать необходимую замену для идентификаторов <Bus> и <Device>, найденных при запуске команды lsusb: $ sudo ./usbreset /dev/bus/usb/002/003

Источник вышеуказанной программы: http: // marc. ? Информация о / л = Linux-USB & амп; м = 121459435621262 & Amp; W = 2

97
ответ дан 25 July 2018 в 17:04
  • 1
    Я получил такие ошибки: ./usbreset: команда не найден Dan 11.04 Natty – user 13 September 2011 в 09:33
  • 2
    Спасибо огромное! Это поможет мне получить намного больше жизни от моего умирающего Intellimouse. – Randall Ma 15 December 2013 в 06:55
  • 3
    Это работает с ubuntu 13.10. Идентификатор устройства может отличаться. Чтобы получить его для мыши, я обернул код выше в нескольких командах оболочки 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 22 December 2013 в 17:04
  • 4
    Если кто-нибудь, кто читает это, запустится (usb) после входа в систему на Ubuntu 16.04 (с dmesg, заполненным «input irq status -75»), я могу подтвердить, что это единственное решение, которое сработало для меня. спасибо – Agustin Baez 2 May 2016 в 15:31
  • 5
    @ Водолей, я также получаю ту же ошибку & quot; Ошибка в ioctl: есть каталог & quot ;. Это разрешено? – ransh 12 February 2017 в 17:21

Сохраните следующее как usbreset.c

/* usbreset -- send a USB port reset to a USB device */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Запустите следующие команды в терминале:

Скомпилируйте программу: $ cc usbreset.c -o usbreset Получите идентификатор шины и устройства USB-устройство, которое вы хотите сбросить: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO Сделайте нашу скомпилированную исполняемую программу: $ chmod +x usbreset Выполните программу с правами sudo; сделать необходимую замену для идентификаторов <Bus> и <Device>, найденных при запуске команды lsusb: $ sudo ./usbreset /dev/bus/usb/002/003

Источник вышеуказанной программы: http: // marc. ? Информация о / л = Linux-USB & амп; м = 121459435621262 & Amp; W = 2

98
ответ дан 1 August 2018 в 23:31

Сохраните следующее как usbreset.c

/* usbreset -- send a USB port reset to a USB device */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Запустите следующие команды в терминале:

Скомпилируйте программу: $ cc usbreset.c -o usbreset Получите идентификатор шины и устройства USB-устройство, которое вы хотите сбросить: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO Сделайте нашу скомпилированную исполняемую программу: $ chmod +x usbreset Выполните программу с правами sudo; сделать необходимую замену для идентификаторов <Bus> и <Device>, найденных при запуске команды lsusb: $ sudo ./usbreset /dev/bus/usb/002/003

Источник вышеуказанной программы: http: // marc. ? Информация о / л = Linux-USB & амп; м = 121459435621262 & Amp; W = 2

98
ответ дан 4 August 2018 в 15:03

Сохраните следующее как usbreset.c

/* usbreset -- send a USB port reset to a USB device */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Запустите следующие команды в терминале:

Скомпилируйте программу: $ cc usbreset.c -o usbreset Получите идентификатор шины и устройства USB-устройство, которое вы хотите сбросить: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO Сделайте нашу скомпилированную исполняемую программу: $ chmod +x usbreset Выполните программу с правами sudo; сделать необходимую замену для идентификаторов <Bus> и <Device>, найденных при запуске команды lsusb: $ sudo ./usbreset /dev/bus/usb/002/003

Источник вышеуказанной программы: http: // marc. ? Информация о / л = Linux-USB & амп; м = 121459435621262 & Amp; W = 2

98
ответ дан 5 August 2018 в 23:25

Сохраните следующее как usbreset.c

/* usbreset -- send a USB port reset to a USB device */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Запустите следующие команды в терминале:

Скомпилируйте программу: $ cc usbreset.c -o usbreset Получите идентификатор шины и устройства USB-устройство, которое вы хотите сбросить: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO Сделайте нашу скомпилированную исполняемую программу: $ chmod +x usbreset Выполните программу с правами sudo; сделать необходимую замену для идентификаторов <Bus> и <Device>, найденных при запуске команды lsusb: $ sudo ./usbreset /dev/bus/usb/002/003

Источник вышеуказанной программы: http: // marc. ? Информация о / л = Linux-USB & амп; м = 121459435621262 & Amp; W = 2

98
ответ дан 7 August 2018 в 16:48

Сохраните следующее как usbreset.c

/* usbreset -- send a USB port reset to a USB device */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Запустите следующие команды в терминале:

Скомпилируйте программу: $ cc usbreset.c -o usbreset Получите идентификатор шины и устройства USB-устройство, которое вы хотите сбросить: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO Сделайте нашу скомпилированную исполняемую программу: $ chmod +x usbreset Выполните программу с правами sudo; сделать необходимую замену для идентификаторов <Bus> и <Device>, найденных при запуске команды lsusb: $ sudo ./usbreset /dev/bus/usb/002/003

Источник вышеуказанной программы: http: // marc. ? Информация о / л = Linux-USB & амп; м = 121459435621262 & Amp; W = 2

98
ответ дан 10 August 2018 в 05:56

Сохраните следующее как usbreset.c

/* usbreset -- send a USB port reset to a USB device */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/ioctl.h> #include <linux/usbdevice_fs.h> int main(int argc, char **argv) { const char *filename; int fd; int rc; if (argc != 2) { fprintf(stderr, "Usage: usbreset device-filename\n"); return 1; } filename = argv[1]; fd = open(filename, O_WRONLY); if (fd < 0) { perror("Error opening output file"); return 1; } printf("Resetting USB device %s\n", filename); rc = ioctl(fd, USBDEVFS_RESET, 0); if (rc < 0) { perror("Error in ioctl"); return 1; } printf("Reset successful\n"); close(fd); return 0; }

Запустите следующие команды в терминале:

Скомпилируйте программу: $ cc usbreset.c -o usbreset Получите идентификатор шины и устройства USB-устройство, которое вы хотите сбросить: $ lsusb Bus 002 Device 003: ID 0fe9:9010 DVICO Сделайте нашу скомпилированную исполняемую программу: $ chmod +x usbreset Выполните программу с правами sudo; сделать необходимую замену для идентификаторов <Bus> и <Device>, найденных при запуске команды lsusb: $ sudo ./usbreset /dev/bus/usb/002/003

Источник вышеуказанной программы: http: // marc. ? Информация о / л = Linux-USB & амп; м = 121459435621262 & Amp; W = 2

98
ответ дан 15 August 2018 в 17:39
  • 1
    Я получил такие ошибки: ./usbreset: команда не найден Dan 11.04 Natty – user 13 September 2011 в 09:33
  • 2
    Спасибо огромное! Это поможет мне получить намного больше жизни от моего умирающего Intellimouse. – Randall Ma 15 December 2013 в 06:55
  • 3
    Это работает с ubuntu 13.10. Идентификатор устройства может отличаться. Чтобы получить его для мыши, я обернул код выше в нескольких командах оболочки 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 22 December 2013 в 17:04
  • 4
    Если кто-нибудь, кто читает это, запустится (usb) после входа в систему на Ubuntu 16.04 (с dmesg, заполненным «input irq status -75»), я могу подтвердить, что это единственное решение, которое сработало для меня. спасибо – Agustin Baez 2 May 2016 в 15:31
  • 5
    @ Водолей, я также получаю ту же ошибку & quot; Ошибка в ioctl: есть каталог & quot ;. Это разрешено? – ransh 12 February 2017 в 17:21

Самый быстрый способ сброса - сброс самого USB-контроллера. Это приведет к тому, что udev отменит регистрацию устройства при отключении, и регистрация вернется после его включения.

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

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

3
ответ дан 25 July 2018 в 17:04
  • 1
    Вам нужно запустить эти команды как root / sudo, и он не будет работать на всех системах (для некоторых вам нужно будет заменить ehci_hcd на ehci-pci. Дополнительная информация об этом решении (возможно, откуда оно взялось?) : davidjb.com/blog/2012/06/… – Lambart 5 November 2015 в 21:43

Мне нужно было автоматизировать это в сценарии python, поэтому я применил чрезвычайно полезный ответ LiLo на следующее:

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

В моем случае это был драйвер cp210x (который я мог бы сказать из lsmod | grep usbserial), поэтому вы можете сохранить приведенный выше фрагмент как reset_usb.py, а затем сделать это:

sudo python reset_usb.py cp210x

Это также может быть полезно, если у вас еще нет настройки компилятора в вашей системе, но вы имеют python.

9
ответ дан 25 July 2018 в 17:04
  • 1
    вы считаете, что это может сработать для пробуждения хранилища usb ? – Aquarius Power 30 June 2014 в 10:53
  • 2
    Хотя я получил следующее сообщение: ls: cannot access /sys/bus/pci/drivers/ehci_hcd/: No such file or directory это решило проблему, мышь начала работать немедленно. +1 – Attila Fulop 10 October 2014 в 11:16
  • 3
    можно ли добавить проверку, чтобы пропустить установленные USB-накопители? – eadmaster 1 November 2015 в 14:32
  • 4
    работал на меня на малине – webo80 23 June 2016 в 17:36
  • 5
    @Otheus OHCI и UHCI - это стандарты хоста USB 1.1, EHCI - это стандарт USB 2.0, а XHCI - стандарт хоста USB 3.0. – ssokolow 20 July 2016 в 22:02
  • 6
    Еще несколько слов о вашем решении, пожалуйста. Например, что-то о константе USBDEVFS_RESET. Всегда ли это одинаково для всех систем? – not2qubit 28 February 2017 в 11:25
  • 7
    Это прекрасное решение. Однако в некоторых более поздних ядрах и других дистрибутивах * nix вы обнаружите, что вам нужно заменить *hci_hcd на *hci-pci, так как драйвер hci_hcd уже скомпилирован в ядро. – not2qubit 1 March 2017 в 21:14
  • 8
    @ not2qubit USBDEVFS_RESET одинаково для всех систем. Для MIPS это 536892692. – yegorich 21 April 2017 в 12:09
  • 9
    Новые версии lsusb, похоже, нуждаются в аргументе -t (в древовидном режиме), чтобы отображать информацию о драйвере, которую ожидает этот сценарий, но сценарий затем нуждается в некоторых обновлениях для анализа различных выходных строк, которые это генерирует – Cheetah 19 October 2017 в 21:56
  • 10
    См. Мой ответ здесь askubuntu.com/a/988297/558070 для значительно улучшенной версии этого скрипта. – mcarans 21 December 2017 в 14:30

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

#!/usr/bin/python """ USB Reset Call as "usbreset.py <device_file_path>" With device_file_path like "/dev/bus/usb/bus_number/device_number" """ 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()
0
ответ дан 25 July 2018 в 17:04
  • 1
    Марк, ты обнаружил, что неотвязывание действительно необходимо или оно здесь просто для того, чтобы быть в безопасности? – ndemou 10 November 2016 в 18:27
  • 2
    Это кувалда, это, вероятно, делает много ненужных вещей – Mark K Cowan 10 November 2016 в 18:37
  • 3
    Пожалуйста, вы можете показать, как выполняется этот скрипт . – George Udosen 29 December 2016 в 18:28
  • 4
    Конечно, позвольте мне обновиться. – Marviel 30 December 2016 в 00:31
  • 5
    @MarkKCowan, как вы его используете? Каковы требуемые / ожидаемые аргументы команды? – not2qubit 28 February 2017 в 11:15
  • 6
    @Marviel, мы все еще ждем обновления ... – not2qubit 28 February 2017 в 11:18
  • 7
    Я нашел ваш скрипт полезным. Но что делать, если $DIR исчезает, а устройство не видно? – Eugen Konkov 13 October 2017 в 10:36
  • 8
    нуждается в downvote как бесполезный – Eugen Konkov 13 October 2017 в 10:36
  • 9
    @ not2qubit: аргументов командной строки не требуется. [F1] в sudo proxy - это просто сила habbit, поскольку она предотвращает ошибки, если позже я решила добавить аргументы (и забыть обновить sudo proxy). – Mark K Cowan 21 November 2017 в 18:54
  • 10
    @MarkKCowan Doh! Извини друг! О да проклятие! Я не должен комментировать этот сайт во время сонливости. Upvoted! – not2qubit 21 November 2017 в 20:29

Я создал скрипт python, который сбросит конкретное USB-устройство на основе номера устройства. Вы можете узнать номер устройства из команды lsusb.

, например:

$ lsusb Bus 002 Device 004: ID 046d:c312 Logitech, Inc. DeLuxe 250 Keyboard

В этой строке 004 указан номер устройства

import os import argparse import subprocess path='/sys/bus/usb/devices/' def runbash(cmd): p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) out = p.stdout.read().strip() return out def reset_device(dev_num): sub_dirs = [] for root, dirs, files in os.walk(path): for name in dirs: sub_dirs.append(os.path.join(root, name)) dev_found = 0 for sub_dir in sub_dirs: if True == os.path.isfile(sub_dir+'/devnum'): fd = open(sub_dir+'/devnum','r') line = fd.readline() if int(dev_num) == int(line): print ('Your device is at: '+sub_dir) dev_found = 1 break fd.close() if dev_found == 1: reset_file = sub_dir+'/authorized' runbash('echo 0 > '+reset_file) runbash('echo 1 > '+reset_file) print ('Device reset successful') else: print ("No such device") def main(): parser = argparse.ArgumentParser() parser.add_argument('-d', '--devnum', dest='devnum') args = parser.parse_args() if args.devnum is None: print('Usage:usb_reset.py -d <device_number> \nThe device number can be obtained from lsusb command result') return reset_device(args.devnum) if __name__=='__main__': main()
2
ответ дан 25 July 2018 в 17:04

Возможно, это руководство поможет вам:

Если вас задевает ошибка, которая не позволяет монтировать USB-устройства в Ubuntu Lucid Lynx, проблема вызвана гибким модулем. Отключите его:

sudo modprobe -r floppy

После перезагрузки модуль, вероятно, перезагрузится.

-2
ответ дан 25 July 2018 в 17:04

Я создал сценарий Python, который упрощает весь процесс на основе ответов здесь.

Сохраните сценарий ниже как reset_usb.py или клонируйте это репо: https://github.com/mcarans/ resetusb /.

Использование:

python reset_usb.py help: Показать эту справку

sudo python reset_usb.py list: Список всех USB-устройств

sudo python reset_usb.py path / dev / bus / usb / XXX / YYY: Сброс устройства USB с использованием пути / dev / bus / usb / XXX / YYY

sudo python reset_usb.py search "search термины ": поиск устройства USB с использованием условий поиска в строке поиска, возвращаемых списком, и сбойное сопоставление устройства

sudo python reset_usb.py listpci: список всех USB-устройств PCI

sudo python reset_usb.py pathpci /sys/bus/pci/drivers/.../XXXX:XX:XX.X: Сброс устройства PCI USB с использованием пути /sys/bus/pci/drivers/.../XXXX:XX:XX. X

sudo python reset_usb.py searchpci «условия поиска»: поиск устройства PCI USB с использованием условий поиска в строке поиска, возвращаемых listpci, и сброс соответствия ng 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_dict[key[:-1]] = 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 = {'bus': bus, 'device': device} 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)
2
ответ дан 25 July 2018 в 17:04

Раньше я не находил себя в ваших конкретных обстоятельствах, поэтому я не уверен, что это будет сделано достаточно, но самым простым способом, который я нашел для сброса USB-устройства, является эта команда: (Никаких внешних приложений не требуется )

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"

Это фактический, который я использую для сброса моего Kinect, поскольку libfreenect, похоже, не имеет API для повторного сна. Он находится в моем ящике Gentoo, но ядро ​​должно быть достаточно новым, чтобы использовать ту же структуру пути для sysfs.

Очевидно, что это не будет 1-4.6, но вы можете либо вытащить этот путь устройства из своего журнала ядра (dmesg), или вы можете использовать что-то вроде lsusb, чтобы получить идентификаторы поставщика и продукта, а затем использовать быструю команду, подобную этой, чтобы указать, как пути связаны с разными парами идентификаторов поставщиков / продуктов:

for X in /sys/bus/usb/devices/*; do echo "$X" cat "$X/idVendor" 2>/dev/null cat "$X/idProduct" 2>/dev/null echo done
46
ответ дан 25 July 2018 в 17:04
  • 1
    sh: 1: невозможно создать /sys/bus/usb/devices/1-3.1:1.0/authorized: Directory nonexistent – Nicolas Marchildon 31 May 2012 в 08:22
  • 2
    Похоже, они изменили компоновку файловой системы usbfs. Я попытаюсь понять, что новый способ делать вещи на Ubuntu, когда я не так сонлив. – ssokolow 2 June 2012 в 20:46
  • 3
    Спасибо, ты отлично поработал! Возможно, вы также должны упомянуть, чтобы выполнить echo 1 > /sys/bus/usb/devices/whatever/authorized внутри скрипта для повторного включения устройства, как только он был отключен. Я сделал это как на моей мыши, так и на клавиатуре usb, и я закончил с полностью глухой системой :) – Avio 28 April 2013 в 13:43
  • 4
    В прошлый раз, когда я использовал его, что-то в системе сбросило бы его до 1 секунды или двух позже, без необходимости делать это вручную. – ssokolow 30 April 2013 в 01:33
  • 5
    Заметка для тех, кто пытается переключиться на | sudo tee ... подход к привилегированным /sys, пишет: Это сильно ломается, если у вас еще нет ваших учетных данных sudo. sudo sh -c "..." работает так, как ожидается, когда sudo нужно запросить пароль. – ssokolow 5 June 2016 в 13:40

Поскольку особый случай вопроса - проблема связи gphoto2 с камерой на USB, в gphoto2 есть опция для сброса его USB-соединения:

gphoto2 --reset

Возможно, этот параметр не был существует в 2010 году, когда был задан вопрос.

3
ответ дан 25 July 2018 в 17:04

Возможно, это работает и для камеры:

После оживления голодного USB 3.0 жесткого диска на 3.4.42 (kernel.org) Linux на моей стороне. dmesg сказал, что он отключил команды после 360-х (извините, я не могу скопировать syslog здесь, не подключенные сети), и диск полностью висел. Процессы, обращающиеся к устройству, были заблокированы в ядре, что было неудобно. NFS висела, ZFS висела, dd висела.

После этого все снова работало. dmesg рассказал только одну строку о найденном устройстве USB.

Я действительно не знаю, что следует делать в деталях. Но это сработало.

Следующий пример выводится из Debian Squeeze с ядром 2.6.32-5-686, поэтому я думаю, что он работает для версии 2.6 и выше:

$ 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

Если это не работает , возможно, кто-то еще может понять, как отправить реальный сброс на устройство.

0
ответ дан 25 July 2018 в 17:04

Я использую кувалду, перезаряжая модули. Это мой скрипт usb_reset.sh:

#!/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

И это мой служебный файл systemd /usr/lib/systemd/system/usbreset.service, который запускает usb_reset.sh после запуска моего диспетчера diplay: [ ! d1] [Unit] Description=usbreset Service After=gdm.service Wants=gdm.service [Service] Type=oneshot ExecStart=/path/to/usb_reset.sh

4
ответ дан 25 July 2018 в 17:04
  • 1
    Используя параметр listpci моего сценария здесь: askubuntu.com/a/988297/558070 поможет определить, какой USB-модуль перезагружается (например, xhci_pci, ehci_pci). – mcarans 24 January 2018 в 19:14
  • 2
    К сожалению, в моей системе эти модули ядра не являются отдельной формой ядра, поэтому это не сработает: rmmod: ERROR: Module xhci_pci is builtin. – unfa 28 June 2018 в 16:00

Попробуйте это, это программное обеспечение отключается (Eject).

Иногда не работает, просто отключайте устройство для некоторых устройств.

Пример:

I хочу удалить или выбросить мой «Genius NetScroll 120».

Затем я сначала проверил мое подключенное устройство USB

$ 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**

Хорошо, я нашел свою мышь, у нее есть Bus 002, устройство 009, idVendor 0458 и idProduct 003A, так это информация Опорное устройство о мыши.

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

$ 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/

Оплатить по папкам, проверить начало с папкой номер 2, я проверю это, потому что моя шина 002, и один за другим у меня есть чек в каждой папке, содержащей правильный idVendor и idProduct, о моей информации о мыши.

В этом случае я извлечу информацию с помощью этой команды:

cat /sys/bus/usb/drivers/usb/2-1.3/idVendor 0458 cat /sys/bus/usb/drivers/usb/2-1.3/idProduct 003a

Хорошо, путь / sys / bus / usb / drivers / usb / 2-1.3 / матч с моей информационной мышью! XDDD.

Пришло время удалить устройство!

su -c "echo 1 > /sys/bus/usb/drivers/usb/2-1.3/remove"

Подключите USB-устройство снова и снова!

0
ответ дан 25 July 2018 в 17:04
  • 1
    Что делать, если вы не можете подключить его снова? (например, это внутренний SD-считыватель) – aleb 30 June 2014 в 01:57

Самый быстрый способ сброса - сброс самого USB-контроллера. Это приведет к тому, что udev отменит регистрацию устройства при отключении, и регистрация вернется после его включения.

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

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

3
ответ дан 1 August 2018 в 23:31

Мне нужно было автоматизировать это в сценарии python, поэтому я применил чрезвычайно полезный ответ LiLo на следующее:

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

В моем случае это был драйвер cp210x (который я мог бы сказать из lsmod | grep usbserial), поэтому вы можете сохранить приведенный выше фрагмент как reset_usb.py, а затем сделать это:

sudo python reset_usb.py cp210x

Это также может быть полезно, если у вас еще нет настройки компилятора в вашей системе, но вы имеют python.

9
ответ дан 1 August 2018 в 23:31

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

#!/usr/bin/python """ USB Reset Call as "usbreset.py <device_file_path>" With device_file_path like "/dev/bus/usb/bus_number/device_number" """ 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()
2
ответ дан 1 August 2018 в 23:31

Сброс всех подключенных портов USB1 / 2/3 [1]:

for i in /sys/bus/pci/drivers/[uoex]hci_hcd/*:*; do [ -e "$i" ] || continue echo "${i##*/}" > "${i%/*}/unbind" echo "${i##*/}" > "${i%/*}/bind" done

Я считаю, что это решит вашу проблему. Если вы не хотите сбросить все конечные точки USB, вы можете использовать соответствующий идентификатор устройства из /sys/bus/pci/drivers/ehci_hcd

Примечания: [1]: драйверы ядра *hci_hcd обычно управляйте портами USB. ohci_hcd и uhci_hcd предназначены для портов USB1.1, ehci_hcd для портов USB2, а xhci_hcd - для портов USB3. (см. https://en.wikipedia.org/wiki/Host_controller_interface_(USB,_Firewire))

35
ответ дан 1 August 2018 в 23:31

Я создал скрипт python, который сбросит конкретное USB-устройство на основе номера устройства. Вы можете узнать номер устройства из команды lsusb.

, например:

$ lsusb Bus 002 Device 004: ID 046d:c312 Logitech, Inc. DeLuxe 250 Keyboard

В этой строке 004 указан номер устройства

import os import argparse import subprocess path='/sys/bus/usb/devices/' def runbash(cmd): p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) out = p.stdout.read().strip() return out def reset_device(dev_num): sub_dirs = [] for root, dirs, files in os.walk(path): for name in dirs: sub_dirs.append(os.path.join(root, name)) dev_found = 0 for sub_dir in sub_dirs: if True == os.path.isfile(sub_dir+'/devnum'): fd = open(sub_dir+'/devnum','r') line = fd.readline() if int(dev_num) == int(line): print ('Your device is at: '+sub_dir) dev_found = 1 break fd.close() if dev_found == 1: reset_file = sub_dir+'/authorized' runbash('echo 0 > '+reset_file) runbash('echo 1 > '+reset_file) print ('Device reset successful') else: print ("No such device") def main(): parser = argparse.ArgumentParser() parser.add_argument('-d', '--devnum', dest='devnum') args = parser.parse_args() if args.devnum is None: print('Usage:usb_reset.py -d <device_number> \nThe device number can be obtained from lsusb command result') return reset_device(args.devnum) if __name__=='__main__': main()
2
ответ дан 1 August 2018 в 23:31

Возможно, это руководство поможет вам:

Если вас задевает ошибка, которая не позволяет монтировать USB-устройства в Ubuntu Lucid Lynx, проблема вызвана гибким модулем. Отключите его:

sudo modprobe -r floppy

После перезагрузки модуль, вероятно, перезагрузится.

-2
ответ дан 1 August 2018 в 23:31

Я создал сценарий Python, который упрощает весь процесс на основе ответов здесь.

Сохраните сценарий ниже как reset_usb.py или клонируйте это репо: https://github.com/mcarans/ resetusb /.

Использование:

python reset_usb.py help: Показать эту справку

sudo python reset_usb.py list: Список всех USB-устройств

sudo python reset_usb.py path / dev / bus / usb / XXX / YYY: Сброс устройства USB с использованием пути / dev / bus / usb / XXX / YYY

sudo python reset_usb.py search "search термины ": поиск устройства USB с использованием условий поиска в строке поиска, возвращаемых списком, и сбойное сопоставление устройства

sudo python reset_usb.py listpci: список всех USB-устройств PCI

sudo python reset_usb.py pathpci /sys/bus/pci/drivers/.../XXXX:XX:XX.X: Сброс устройства PCI USB с использованием пути /sys/bus/pci/drivers/.../XXXX:XX:XX. X

sudo python reset_usb.py searchpci «условия поиска»: поиск устройства PCI USB с использованием условий поиска в строке поиска, возвращаемых listpci, и сброс соответствия ng 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_dict[key[:-1]] = 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 = {'bus': bus, 'device': device} 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)
2
ответ дан 1 August 2018 в 23:31

Раньше я не находил себя в ваших конкретных обстоятельствах, поэтому я не уверен, что это будет сделано достаточно, но самым простым способом, который я нашел для сброса USB-устройства, является эта команда: (Никаких внешних приложений не требуется )

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"

Это фактический, который я использую для сброса моего Kinect, поскольку libfreenect, похоже, не имеет API для повторного сна. Он находится в моем ящике Gentoo, но ядро ​​должно быть достаточно новым, чтобы использовать ту же структуру пути для sysfs.

Очевидно, что это не будет 1-4.6, но вы можете либо вытащить этот путь устройства из своего журнала ядра (dmesg), или вы можете использовать что-то вроде lsusb, чтобы получить идентификаторы поставщика и продукта, а затем использовать быструю команду, подобную этой, чтобы указать, как пути связаны с разными парами идентификаторов поставщиков / продуктов:

for X in /sys/bus/usb/devices/*; do echo "$X" cat "$X/idVendor" 2>/dev/null cat "$X/idProduct" 2>/dev/null echo done
46
ответ дан 1 August 2018 в 23:31

Поскольку особый случай вопроса - проблема связи gphoto2 с камерой на USB, в gphoto2 есть опция для сброса его USB-соединения:

gphoto2 --reset

Возможно, этот параметр не был существует в 2010 году, когда был задан вопрос.

3
ответ дан 1 August 2018 в 23:31

Возможно, это работает и для камеры:

После оживления голодного USB 3.0 жесткого диска на 3.4.42 (kernel.org) Linux на моей стороне. dmesg сказал, что он отключил команды после 360-х (извините, я не могу скопировать syslog здесь, не подключенные сети), и диск полностью висел. Процессы, обращающиеся к устройству, были заблокированы в ядре, что было неудобно. NFS висела, ZFS висела, dd висела.

После этого все снова работало. dmesg рассказал только одну строку о найденном устройстве USB.

Я действительно не знаю, что следует делать в деталях. Но это сработало.

Следующий пример выводится из Debian Squeeze с ядром 2.6.32-5-686, поэтому я думаю, что он работает для версии 2.6 и выше:

$ 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

Если это не работает , возможно, кто-то еще может понять, как отправить реальный сброс на устройство.

0
ответ дан 1 August 2018 в 23:31

Я использую кувалду, перезаряжая модули. Это мой скрипт usb_reset.sh:

#!/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

И это мой служебный файл systemd /usr/lib/systemd/system/usbreset.service, который запускает usb_reset.sh после запуска моего диспетчера diplay: [ ! d1] [Unit] Description=usbreset Service After=gdm.service Wants=gdm.service [Service] Type=oneshot ExecStart=/path/to/usb_reset.sh

4
ответ дан 1 August 2018 в 23:31

Попробуйте это, это программное обеспечение отключается (Eject).

Иногда не работает, просто отключайте устройство для некоторых устройств.

Пример:

I хочу удалить или выбросить мой «Genius NetScroll 120».

Затем я сначала проверил мое подключенное устройство USB

$ 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**

Хорошо, я нашел свою мышь, у нее есть Bus 002, устройство 009, idVendor 0458 и idProduct 003A, так это информация Опорное устройство о мыши.

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

$ 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/

Оплатить по папкам, проверить начало с папкой номер 2, я проверю это, потому что моя шина 002, и один за другим у меня есть чек в каждой папке, содержащей правильный idVendor и idProduct, о моей информации о мыши.

В этом случае я извлечу информацию с помощью этой команды:

cat /sys/bus/usb/drivers/usb/2-1.3/idVendor 0458 cat /sys/bus/usb/drivers/usb/2-1.3/idProduct 003a

Хорошо, путь / sys / bus / usb / drivers / usb / 2-1.3 / матч с моей информационной мышью! XDDD.

Пришло время удалить устройство!

su -c "echo 1 > /sys/bus/usb/drivers/usb/2-1.3/remove"

Подключите USB-устройство снова и снова!

0
ответ дан 1 August 2018 в 23:31

Другие вопросы по тегам:

Похожие вопросы: