É possível ligar / desligar as fontes de alimentação do USB manualmente com o Linux?
Existe essa ventoinha de refrigeração USB externa (do tipo que você usa para se refrescar, não o PC), e seria bom poder controlá-la a partir do terminal, porque quero posicionar a ventoinha em algum lugar distante.
Suponho que isso também possa ser útil para uma variedade de outras coisas, porque há muitos brinquedos USB por aí. Talvez purificadores de ar, etc. (ouvi dizer que eles realmente não funcionam).
power/level
está obsoleto agora; use empower/control
vez disso . (power/wakeup
está ok.) Além disso, ele aceita apenas "auto" e "on", não "suspende" mais. "auto" é inteligente o suficiente e, se a energia não for desligada enquanto estiver ociosa, a culpa é do dispositivo. De qualquer forma, você não pode desligar manualmente. Para mais, veja a resposta abaixo por tlwhitec e doc do kernel: kernel.org/doc/Documentation/usb/power-management.txtRespostas:
Nota. As informações nesta resposta são relevantes para os kernels mais antigos (até 2.6.32). Veja a resposta de tlwhitec para obter informações sobre os kernels mais recentes.
(Pode ser necessário alterar usb1 para usb n )
Fonte: Documentação / usb / power-management.txt.gz
fonte
sudo foo > bar
é analisado como direciona a saída parabar
, em seguida, executefoo
usandosudo
. O redirecionamento falha porque acontece antes de você obter acesso root. A solução é usarsudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup'
, e assim por diante: obter raiz, executar um novo inferno para executar um redirecionamento e, em seguida, gerar algo no descritor de arquivo redirecionado.De acordo com documentos , houve várias alterações no gerenciamento de energia USB dos kernels 2.6.32 , que parecem se estabelecer em 2.6.38 . Agora você precisará aguardar o dispositivo ficar ocioso , que é controlado pelo driver de dispositivo específico. O driver precisa suportá-lo, caso contrário, o dispositivo nunca chegará a esse estado. Infelizmente, agora o usuário não tem chance de forçar isso. No entanto, se você tiver sorte e seu dispositivo ficar inativo, para desativar isso, você deve:
ou, para kernels em torno de 2.6.38 e superior:
Isso significa literalmente, suspenda no momento em que o dispositivo ficar inativo.
Portanto, a menos que seu ventilador seja algo "inteligente" que possa ser visto como um dispositivo e controlado por um motorista, você provavelmente não terá muita sorte nos kernels atuais.
fonte
echo "on" > "/sys/bus/usb/devices/usbX/power/control"
, mas acho que você precisa entender o objetivo original. O recurso de suspensão automática está aqui apenas para permitir que os dispositivos inativos entrem em um estado de baixa energia (onde pode parecer desligado), apenas para serem retomados mais tarde, quando necessário, pelo host ou por algum evento externo. Isso acontece (ou deveria acontecer) automaticamente. A porta em si nunca é realmente desligada. Realmente, não ler os docs ;)dmesg | grep "usb"
e usar o número depois de "USB", por exemplo:usb 2-4.4: SerialNumber: A0848020
você vai usar:/sys/bus/usb/devices/2-4.4/power/...
. Além disso, verifique se o dispositivo não está em uso. Eu criei um script para simplificar este processoEncontrei estas soluções que funcionam pelo menos para o chip hub Terminus FE 1.1 USB configurado corretamente:
1.Para desligar todas as portas USB de um hub, você pode desvincular o hub do kernel usando:
para ligar novamente - você pode ligá-lo novamente usando
2.Alterar o poder de cada porta individualmente é mais complicado: eu era capaz de usar o poder do hub para controlar cada porta - mas ele tem uma desvantagem: o poder do hub primeiro desconecta o usbdevfs, o que faz com que todos os dispositivos USB se desconectem do sistema, pelo menos no ubuntu :
Com isso
ioctl
desativado, eu era capaz de desligar a energia de portas individuais sem desconectar todos os dispositivos - mas a energia é ligada imediatamente (provavelmente devido ao kernel que vê um dispositivo não inicializado), o que faz com que o dispositivo USB faça uma "reinicialização a frio", que é o que eu geralmente queria fazer. Meu hubpower remendado está aquifonte
O PowerTOP da Intel permite alternar dispositivos como periféricos USB em tempo real. Estes são chamados de 'ajustáveis'.
Observe que Bad significa que o dispositivo está sempre ligado. Alternando para Bom desligará o dispositivo após o tempo de economia inativo predefinido (o padrão é 2000ms).
Consulte os documentos do PowerTOP para obter detalhes sobre como tornar essas alterações permanentes.
Ele gera os scripts de configuração para você (praticamente como descrito por outros pôsteres neste tópico).
NOTA: Esses scripts não afetam a alimentação do pino USB (que está sempre ativado).
Eles enviam apenas o protocolo do driver para ativar e desativar um dispositivo.
Se você deseja controlar a energia dos pinos, pode usar um hub USB inteligente compatível ou, melhor ainda, um microcontrolador .
fonte
Você pode usar minha ferramenta uhubctl para controlar a energia USB por porta para hubs USB compatíveis.
fonte
Eu queria fazer isso e, com o meu hardware USB, não consegui. Eu escrevi uma maneira hacky como fazê-lo aqui:
http://pintant.cat/2012/05/12/power-off-usb-device/ .
De uma forma resumida: usei um relé USB para abrir / fechar o V CC de outro cabo USB ...
fonte
trabalha para ubuntu
fonte
A energia USB 5v está sempre ligada (mesmo quando o computador está desligado, em alguns computadores e em algumas portas). Você provavelmente precisará programar um Arduino com algum tipo de comutador e controlá-lo através da biblioteca Serial da USB conectada ao computador.
Em outras palavras, uma combinação deste tutorial de chave e deste tutorial sobre comunicação via biblioteca serial ao Arduino é conectada via USB.
fonte
A razão pela qual as pessoas postam perguntas como essa deve-se ao temido - de fato " EVIL " - recurso "Suspensão automática de USB ".
A suspensão automática reduz a energia de um dispositivo USB "inativo" e, a menos que o driver do dispositivo ofereça suporte a esse recurso corretamente, o dispositivo pode ficar incontestável. Portanto, ligar / desligar uma porta USB é um sintoma do problema, não o problema em si.
Vou mostrar-lhe como desativar GLOBALMENTE a suspensão automática, negando a necessidade de ativar e desativar manualmente as portas USB:
Resposta curta:
NÃO é necessário editar " autosuspend_delay_ms " individualmente: o USB autosuspend pode ser desativado globalmente e PERSISTENTEMENTE usando os seguintes comandos:
Uma captura de tela do Ubuntu 18.04 segue no final da "Resposta longa", ilustrando como meus resultados foram alcançados.
Resposta longa:
É verdade que a documentação do kernel do USB Power Management declara suspensão automática e está em seu lugar " autosuspend_delay_ms " usado para desativar a suspensão automática USB:
No entanto, meus testes revelam que a configuração
usbcore.autosuspend=-1
em / etc / default / grub como abaixo pode ser usada como uma alternância GLOBAL para a funcionalidade de suspensão automática de USB - você NÃO precisa editar " autosuspend_delay_ms " individual arquivos " .O mesmo documento vinculado acima afirma que um valor de "0" é ATIVADO e um valor negativo é DESATIVADO :
Na captura de tela anotada do Ubuntu 18.04 abaixo, ilustrando como meus resultados foram alcançados (e reproduzíveis), observe que o padrão é "0" ( ativado ) em autosuspend_delay_ms .
Observe que, após a configuração ONLY
usbcore.autosuspend=-1
no Grub, esses valores agora são negativos ( desabilitados ) após a reinicialização. Isso vai me poupar o trabalho de editar valores individuais e agora pode gerar um script para desativar a suspensão automática de USB.Espero que isso torne a desativação da suspensão automática de USB um pouco mais fácil e mais programável.
fonte
Ocorreu um problema ao conectar o meu telefone Android, não pude carregar o telefone porque o interruptor liga e desliga ... O PowerTop me permitiu encontrar essa configuração e foi útil para corrigir o problema (o valor automático estava causando um problema):
fonte