Ligar / desligar portas USB

18

É possível ligar / desligar uma porta USB específica usando o terminal no Ubuntu?

lsusb exibe o seguinte resultado:

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 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 003: ID 2232:1020
Bus 002 Device 009: ID 0bc2:a013 Seagate RSS LLC
Bus 002 Device 003: ID 0a5c:219c Broadcom Corp.

A Seagate é minha unidade de disco rígido externa. Posso desligá-lo no terminal?

Tentei Controlar uma fonte de alimentação USB (on / off) com Linux . Mas estou confuso sobre o que deve ser substituído no lugar de usbX.

curious_coder
fonte

Respostas:

7

Todas as respostas anteriores falam sobre um mecanismo de suspensão USB , ou seja, um "desligamento lógico", nunca cortam fisicamente o VBUS + 5V da porta USB.

Apenas alguns hubs podem realmente cortar o VBUS, conforme descrito aqui .

A ferramenta hubpower pode fazer isso (se o hub suportar).

rustyx
fonte
7

Depois de encontrar o mesmo problema, descobri que os comandos deveriam ser inseridos de maneira diferente, para que "sudo" aplicasse os direitos adequadamente.

Use o comando "tee".

echo 0 | sudo tee /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms

aplicará direitos de root ao comando "tee", que gravará o 0 no arquivo especificado, substituindo qualquer coisa que esteja lá atualmente. Para acrescentar, use o comando tee com a opção -a.

para obter informações, consulte a página de manual do tee

JohnMoore
fonte
2
O teecomando terá o efeito colateral de também imprimir na tela. Se você quiser, dd of=/sys/bus/...gravará apenas no arquivo e em nenhum outro lugar.
Brandon Rhodes
4

Na verdade, usbXnada mais é do que os números das portas USB, onde Xdenota o número parecido 1ou 2assim por diante ... Por exemplo, usb1e usb2para as portas 1 e 2 . Em geral, um laptop pode ter três ou quatro portas USB com portas USB 2.0 e USB 3.0.

No Ubuntu, usb1, usb2... usbXsão os links para /sys/devices/pci000:00/*. Para entender bem, execute este comando:

ls -l /sys/bus/usb/devices/

Portanto, para ativar / desativar, as portas USB usbXserão substituídas por usb1quando você deseja ativar / desativar USB Port Number 1(ou consulte Stack Exchange):


Edit: Agradecemos a Stefan Denchev por dizer a maneira correta de reproduzir algum texto em um arquivo usando o sudo . (Verifique também o comentário dele.) Agora você não deve receber a mensagem de permissão negada .

sudo sh -c "echo '0' > /sys/bus/usb/devices/usb1/power/autosuspend_delay_ms"
sudo sh -c "echo 'auto' > /sys/bus/usb/devices/usb1/power/control"

Depois de ver o lsusbresultado, parece que o seu dispositivo Seagate está conectado e Port No. 2, portanto, você precisa desativar usb2. Então os comandos seriam:

sudo sh -c "echo '0' > /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms"
sudo sh -c "echo 'auto' > /sys/bus/usb/devices/usb2/power/control"
Saurav Kumar
fonte
Obrigado. Se eu tentar echo "0" > "/sys/bus/usb/devices/usb2/power/autosuspend_delay_ms"a saída ébash: /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms: Permission denied
curious_coder
então tente com sudover o que acontece ..
Saurav Kumar
Tentei. Ainda o mesmo erro.
Curious_coder
Na verdade, não tentei ativar / desativar nenhuma porta no Linux. Meu lema era esclarecer sobre o usbXproblema. Se você tiver muita clareza sobre os comandos que você pegou StackOverflow, apenas tente. De qualquer forma, agora também estou interessado em saber qual é o comando real para ativar / desativar as portas. Eu responderei em breve, quando funcionar para mim. Diga, então, desconecte o dispositivo e tente novamente. ou tente a primeira resposta dada em stackoverflow.
Saurav Kumar # 6/13
1
sudo sh -c "echo 'on' >> /sys/bus/usb/devices/usb4/power/control"
Ullrvnd
1

udisksctltem power-offsinalizador, que eu sugiro que você use em conjunto com unmount

De man udisksctl:

power-off
           Arranges for the drive to be safely removed and powered off. On the
           OS side this includes ensuring that no process is using the drive,
           then requesting that in-flight buffers and caches are committed to
           stable storage. The exact steps for powering off the drive depends
           on the drive itself and the interconnect used. For drives connected
           through USB, the effect is that the USB device will be deconfigured
           followed by disabling the upstream hub port it is connected to

Demo

Aqui estou eu desmontando o meu drive USB e depois desligando-o

testdir:$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 009: ID 154b:007a PNY 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 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

testdir:$ lsblk                                                                
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111.8G  0 disk 
└─sda1   8:1    0 111.8G  0 part /
sdb      8:16   1    30G  0 disk 
└─sdb1   8:17   1    30G  0 part /media/xieerqi/6A32C4555E1C5B4D
sr0     11:0    1  1024M  0 rom  

testdir:$ udisksctl unmount -b /dev/sdb1 && udisksctl power-off -b /dev/sdb1
Unmounted /dev/sdb1.

testdir:$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 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

testdir:$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111.8G  0 disk 
└─sda1   8:1    0 111.8G  0 part /
sr0     11:0    1  1024M  0 rom  

testdir:$ 
Sergiy Kolodyazhnyy
fonte