Как программно «перевоткнуть» usb-устройство в linux?
Например извлечь без посторонней помощи флешку, или перезапустить зависший китайский kvm удленитель офисного сервера.
Думаю каждый из нас задавался этим вопросом.
Поможет нам в этом sysfs и пара несложных комманд.
Нелишним будет отметить, что такая возможность появилась в ядре, начиная с 2.6.13.
Для начала нужно узнать адрес нашего usb устройства с помощью утилиты из пакета ubsutils:
# lsusb Bus 002 Device 006: ID 046d:c328 Logitech, Inc. Bus 002 Device 007: ID 1bcf:0005 Sunplus Innovation Technology Inc. Optical Mouse Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
возмем для примера мышь Bus 002 Device 007, 7-е устройство во 2-ом порту usb,
# ls -d /sys/bus/usb/devices/2-*.7 /sys/bus/usb/devices/2-1.7
получили адрес 2-1.7
Теперь зная адрес устройства можем его извлечь
echo -n "2-1.7" > /sys/bus/usb/drivers/usb/unbind
После того, как мышь успешно была извлечена и все лампочки в ней погасли,
можем снова ввести ее в строй
echo -n "2-1.7" > /sys/bus/usb/drivers/usb/bind
После чего, мышка вновь приветствует нас своими светодиодами.