Eu escrevi um script para mostrar como eu faria isso:
#!/bin/bash
port="1-1.1" # as shown by lsusb -t: {bus}-{port}(.{subport})
bind_usb() {
echo "$1" >/sys/bus/usb/drivers/usb/bind
}
unbind_usb() {
echo "$1" >/sys/bus/usb/drivers/usb/unbind
}
unbind_usb "$port"
# sleep 1 # enable delay here
bind_usb "$port"
Primeiro, você precisa obter o número de barramento e porta da porta usb em questão. Você pode fazer isso com lsusb
e qualquer dispositivo que reconheça na saída de lsusb
, eu uso um pendrive Sandisk aqui:
$ lsusb
Bus 001 Device 005: ID 04f2:b39a Chicony Electronics Co., Ltd
Bus 001 Device 112: ID 8087:07dc Intel Corp.
Bus 001 Device 019: ID 04d9:1603 Holtek Semiconductor, Inc. Keyboard
Bus 001 Device 018: ID 0424:2504 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 022: ID 0781:5567 SanDisk Corp. Cruzer Blade
Bus 001 Device 002: ID 8087:8000 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
|__ Port 1: Dev 22, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 18, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 19, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 1: Dev 19, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 7: Dev 112, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 7: Dev 112, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 8: Dev 5, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 8: Dev 5, If 0, Class=Video, Driver=uvcvideo, 480M
Da saída de lsusb
, você obtém o número de barramento e dispositivo do dispositivo e, em seguida, pesquisa este dispositivo na saída de lsusb -t
para obter o número de barramento e porta (às vezes com subportos). A sintaxe é:
1-2.3 # for Bus 1 Port 2 Subport 3 – strip leading zeroes!
Use isso como port
no script. Agora você só precisa torná-lo executável com chmod +x /path/to/script
e executá-lo com permissões de root :
sudo /path/to/script
Eu não precisei de um para meu pendrive, mas pode ser necessário adicionar um atraso entre desvincular e vincular novamente. É para isso que o comentário de sleep 1
line é para: você pode testar os valores, por exemplo, sleep 0.5
por meio segundo.
Note que esta abordagem mostra como desabilitar e habilitar novamente uma certa porta USB , se você quiser que um dispositivo específico seja livre e religado novamente, você terá que use a mesma porta USB para isso funcionar. Poderíamos pensar em uma maneira de analisar a saída de lsusb
para obter dinamicamente o barramento e o número da porta de um dispositivo específico toda vez que o script for chamado, isso permitiria que você usasse qualquer porta USB, mas acho que seria um exagero aqui.
Sugestões tiradas de este artigo do blog linux.com .