¿Es posible encender / apagar las fuentes de alimentación de USB manualmente con Linux?
Existe este ventilador de enfriamiento USB externo (del tipo que usa para enfriarse, no la PC), y sería bueno poder controlarlo desde el terminal, porque quiero colocar el ventilador en algún lugar lejos.
Supongo que esto también podría ser útil para una variedad de otras cosas, porque hay muchos juguetes USB por ahí. Tal vez purificadores de aire, etc. (Escuché que realmente no funcionan).
power/level
está en desuso ahora; utilizarpower/control
en su lugar . (power/wakeup
está bien.) Además, solo acepta "auto" y "on", no "suspender" más. "auto" es lo suficientemente inteligente, y si la alimentación no se apaga mientras está inactiva, es culpa del dispositivo. De todos modos, no puede apagar la alimentación manualmente. Para obtener más información, consulte la respuesta a continuación de tlwhitec y el documento del kernel: kernel.org/doc/Documentation/usb/power-management.txtRespuestas:
Nota. La información en esta respuesta es relevante para los núcleos más antiguos (hasta 2.6.32). Consulte la respuesta de tlwhitec para obtener información sobre los núcleos más nuevos.
(Puede que necesite cambiar usb1 a usb n )
Fuente: Documentation / usb / power-management.txt.gz
fuente
sudo foo > bar
se analiza como directo a la salida ybar
luego se ejecutafoo
usandosudo
. La redirección falla porque ocurre antes de obtener acceso de root. La solución es usarsudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup'
, y así sucesivamente: obtener root, ejecutar un nuevo infierno para realizar una redirección, luego generar algo en el descriptor de archivo redirigido.Según los documentos , hubo varios cambios en la administración de energía USB desde los núcleos 2.6.32 , que parecen establecerse en 2.6.38 . Ahora tendrá que esperar a que el dispositivo quede inactivo , que se rige por el controlador del dispositivo en particular. El controlador debe admitirlo; de lo contrario, el dispositivo nunca alcanzará este estado. Desafortunadamente, ahora el usuario no tiene oportunidad de forzar esto. Sin embargo, si tienes suerte y tu dispositivo puede estar inactivo, entonces para apagar esto necesitas:
o, para núcleos alrededor de 2.6.38 y superiores:
Esto significa literalmente, suspender en el momento en que el dispositivo queda inactivo.
Entonces, a menos que su ventilador sea algo "inteligente" que pueda ser visto como un dispositivo y controlado por un controlador, probablemente no tendrá mucha suerte en los núcleos actuales.
fuente
echo "on" > "/sys/bus/usb/devices/usbX/power/control"
, pero creo que necesita comprender el propósito original. La función de suspensión automática está aquí simplemente para permitir que los dispositivos inactivos entren en un estado de baja potencia (donde podría parecer apagado), solo para que se reanude más tarde cuando sea necesario, ya sea por el host o algún evento externo. Eso sucede (o debería suceder) automáticamente. El puerto en sí nunca está realmente apagado. Realmente, lea los documentos ;)dmesg | grep "usb"
y utilizar el número después de "USB", por ejemplo:usb 2-4.4: SerialNumber: A0848020
que va a utilizar:/sys/bus/usb/devices/2-4.4/power/...
. Además, asegúrese de que el dispositivo no esté en uso. Creé un script para simplificar este procesoHe encontrado estas soluciones que al menos funcionan para el chip de hub USB Terminus FE 1.1 configurado correctamente:
1.Para apagar todos los puertos USB de un concentrador, puede desvincular el concentrador del núcleo utilizando:
para volver a encender la alimentación, puede volver a vincularla usando
2.Cambiar la potencia en cada puerto individualmente es más complicado: pude usar el concentrador para controlar cada puerto, pero viene con un inconveniente: el concentrador desconecta primero los usbdevfs, lo que hace que todos los dispositivos USB se desconecten del sistema, al menos en ubuntu :
Con esto
ioctl
desactivado, pude apagar la alimentación del puerto individual sin desconectar todos los dispositivos, pero la energía vuelve a encenderse inmediatamente (probablemente debido a que el kernel vio un dispositivo no inicializado) lo que hace que el dispositivo USB solo haga un "reinicio en frío", que es lo que En general quería hacer. Mi parche de poder está aquífuente
PowerTOP de Intel le permite alternar dispositivos como periféricos usb en tiempo real. Estos se llaman 'sintonizables'.
Tenga en cuenta que Malo significa que el dispositivo siempre está encendido. Cambiando a bueno cambiar se apagará el dispositivo después del tiempo de ahorro inactivo predeterminado (el valor predeterminado es 2000 ms).
Consulte los documentos de PowerTOP para obtener detalles sobre cómo hacer que estos cambios sean permanentes.
Genera los scripts de configuración para usted (más o menos como lo describen otros carteles en este hilo).
NOTA: Estas secuencias de comandos no afectan la alimentación del pin USB (que siempre está activado).
Estos solo envían el protocolo del controlador para activar y desactivar un dispositivo.
Si desea controlar la alimentación del pin, puede usar un concentrador USB inteligente compatible o, mejor aún, un microcontrolador .
fuente
Puede usar mi herramienta uhubctl para controlar la alimentación USB por puerto para concentradores USB compatibles.
fuente
Quería hacer esto, y con mi hardware USB no pude. Escribí una manera hacky cómo hacerlo aquí:
http://pintant.cat/2012/05/12/power-off-usb-device/ .
De manera breve: utilicé un relé USB para abrir / cerrar el V CC de otro cable USB ...
fuente
funciona para ubuntu
fuente
La alimentación USB 5v siempre está encendida (incluso cuando la computadora está apagada, en algunas computadoras y en algunos puertos). Probablemente necesite programar un Arduino con algún tipo de interruptor y controlarlo a través de la biblioteca en serie desde el USB conectado al computadora.
En otras palabras, una combinación de este tutorial de cambio y este tutorial sobre la comunicación a través de Serial libary a Arduino conectado a través de USB.
fuente
La razón por la cual la gente publica preguntas como esta se debe a la temida " EVIL " - USB "Auto-Suspend" feature ".
La suspensión automática reduce la potencia de un dispositivo USB "inactivo" y, a menos que el controlador del dispositivo admita esta función correctamente, el dispositivo puede volverse no contactable. Por lo tanto, encender / apagar un puerto USB es un síntoma del problema, no el problema en sí mismo.
Te mostraré cómo GLOBALMENTE deshabilitar la suspensión automática, negando la necesidad de activar y desactivar manualmente los puertos USB:
Respuesta corta:
NO necesita editar " autosuspend_delay_ms " individualmente: la suspensión automática de USB puede deshabilitarse global y PERSISTENTEMENTE usando los siguientes comandos:
Una captura de pantalla de Ubuntu 18.04 sigue al final de la "Respuesta larga" que ilustra cómo se lograron mis resultados.
Respuesta larga:
Es cierto que la documentación del kernel de administración de energía USB indica que la suspensión automática se debe dejar de usar y en su lugar " autosuspend_delay_ms " se usa para desactivar la suspensión automática de USB:
SIN EMBARGO, mis pruebas revelan que la configuración
usbcore.autosuspend=-1
en / etc / default / grub, como se muestra a continuación, se puede usar como una palanca GLOBAL para la funcionalidad de autosuspend USB; NO es necesario editar " autosuspend_delay_ms " individuales archivos ".El mismo documento vinculado anteriormente establece que un valor de "0" está HABILITADO y un valor negativo está DESHABILITADO :
En la captura de pantalla de Ubuntu 18.04 anotada a continuación que ilustra cómo se lograron mis resultados (y reproducibles), observe que el valor predeterminado es "0" ( habilitado ) en autosuspend_delay_ms .
Luego, tenga en cuenta que después de SOLO configurar
usbcore.autosuspend=-1
en Grub, estos valores ahora son negativos ( deshabilitados ) después del reinicio. Esto me ahorrará la molestia de editar valores individuales y ahora puede deshabilitar la secuencia de comandos para desactivar la suspensión automática de USB.Espero que esto haga que deshabilitar la suspensión automática de USB sea un poco más fácil y más programable.
fuente
Tuve un problema al conectar mi teléfono Android, no pude cargarlo porque el interruptor de encendido se encendió y luego se apagó ... PowerTop me permitió encontrar esta configuración y fue útil para solucionar el problema (el valor automático estaba causando problemas):
fuente