Eu tenho uma lâmpada USB que comprei especificamente para desligá-la programaticamente em um determinado momento; portanto, preciso remover a energia da sua porta USB.
Eu acredito que tenho um hub usb em usb6. A lâmpada está conectada a uma das portas neste hub:
#myhost$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 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 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
...
Bus 008 Device 006: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub
Aqui está o que eu tentei:
Duas soluções estão aqui , a primeira sugere:
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
mas recebo write error: Invalid argument
ao tentar escrever para /sys/bus/usb/devices/usb1/power/level
:
$sudo bash -c 'echo disabled > /sys/bus/usb/devices/usb6/power/wakeup'
$echo suspend|sudo tee /sys/bus/usb/devices/usb6/power/level suspend
tee: /sys/bus/usb/devices/usb6/power/level: Invalid argument
$sudo bash -c 'echo suspend> /sys/bus/usb/devices/usb6/power/level'bash: line 0: echo: write error: Invalid argument
A segunda solução:
sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'
que desliga a energia do dispositivo hub USB.
Eu também estava tentando seguir isso :
Mas a saída de lsusb -t
apenas trava:
$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C
O que me impede de usar esse método para obter a parte '2-1.1':
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind
Existe uma maneira alternativa de obter essas informações?
Como alternativa, existe uma maneira de desligar a energia de todo o subsistema usb? Algo como modprobe -r usb_etc
?
Meu kernel é:
$uname -r
3.2.0-4-amd64
fonte
lsusb -t
chamada e não encontrei nada útil dentro do tempo necessário para depurá-la. Sinceramente, não tenho tempo agora para encontrar bugs no lsub e nem consigo reproduzi-lo agora, então provavelmente depende dos dispositivos que estão conectados. Vou ter que esperar para chegar em casa e tentar reproduzi-lo.Respostas:
Você pode usar o uhubctl - utilitário de linha de comando para controlar a energia USB por porta para hubs USB compatíveis.
Funciona apenas em hubs que suportam comutação de energia por porta, mas observe que muitas placas-mãe modernas possuem hubs USB que suportam esse recurso.
Compilar:
Para listar o status de todos os hubs, seus locais e portas que podem ser controlados pelo uhubctl:
Para desligar a porta 5 do hub compatível único:
Se você tiver mais de um hub compatível conectado, use
-l
para especificar o local do hub para controlá-lo:Para ativar e desativar a energia:
Observe que os hubs USB 3.0 também são suportados, e alguns novos hubs USB 3.0 realmente funcionam bem.
Leia mais aqui .
Divulgação - Eu sou o autor de uhubctl.
fonte
Consulte Controlar uma fonte de alimentação USB (on / off) com linux , versão curta, para saber mais sobre kernels "suspend" não funciona mais:
Mas isso literalmente não reduz a energia, sinaliza o dispositivo para desligar, cabe ao dispositivo implementar o gerenciamento de energia e fazer a coisa certa.
Você tem muitos detalhes na documentação oficial do kernel. Lá, ele explica os vários arquivos
/sys/bus/usb/devices/.../power/
e como gerenciar os dispositivos e portas.Para coisas que não são dispositivos USB reais (sua lâmpada USB aparece em LSUSB?), Você pode ter azar, tentei usar uma lâmpada USB e um registrador GPS que carrega sua bateria e transfere dados através de USB que mostra up como um usb cp210x para serial, e nem poweroff. Eu posso "desconectar" o GPS
echo '5-4.6' > /sys/bus/usb/drivers/usb/unbind
e reconectá-lo comecho '5-4.6' > /sys/bus/usb/drivers/usb/bind
mas a luz de carregamento da bateria está sempre ligada.Mas parece que alguns hubs fazem isso corretamente .
fonte
NÃO é necessário editar individualmente os arquivos " autosuspend_delay_ms ".
A suspensão automática de USB pode ser desativada GLOBALMENTE e PERSISTENTEMENTE com:
Leva apenas alguns segundos para testar a correção proposta e validar sua 'correção.
Uma captura de tela anotada do Ubuntu 18.04 abaixo ilustra a modificação conforme descrito acima, que resulta na reinicialização do host com TODAS as configurações de suspensão automática de USB desabilitadas:
fonte