Tengo una lámpara usb que compré específicamente para apagarla mediante programación en un momento determinado, por lo que necesito quitar la alimentación de su puerto usb.
Creo que tengo un usb-hub en usb6. La lámpara está conectada a uno de los puertos en este concentrador:
#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
Esto es lo que he intentado:
Aquí hay dos soluciones , la primera sugiere:
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
pero write error: Invalid argument
cuando intento escribir a /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
La segunda solución:
sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'
que apaga el dispositivo usb-hub.
También estaba tratando de seguir esto :
Pero la salida de lsusb -t
simplemente se cuelga:
$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C
Lo que me impide usar este método para obtener la parte '2-1.1' para esto:
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind
¿Hay alguna forma alternativa de obtener esta información?
Alternativamente, ¿hay alguna forma de desconectar la alimentación de todo el subsistema usb? Algo como modprobe -r usb_etc
?
Mi núcleo es:
$uname -r
3.2.0-4-amd64
fuente
lsusb -t
llamada y no encontré nada útil en el tiempo que tuve que depurarla. Sinceramente, no tengo tiempo en este momento para encontrar errores en lsub, y ni siquiera puedo reproducirlo en este momento, por lo que probablemente dependa de los dispositivos que estén conectados. Tendré que esperar para llegar a casa para intentar reproducirloRespuestas:
Puede usar la utilidad de línea de comando uhubctl para controlar la alimentación USB por puerto para concentradores USB compatibles.
Funciona solo en concentradores que admiten conmutación de alimentación por puerto, pero tenga en cuenta que muchas placas base modernas tienen concentradores USB que admiten esta función.
Compilar:
Para enumerar el estado de todos los concentradores, sus ubicaciones y puertos que puede controlar uhubctl:
Para apagar el puerto 5 del concentrador único compatible:
Si tiene más de un concentrador compatible conectado, use
-l
para especificar la ubicación del concentrador para controlarlo:Para apagar y encender:
Tenga en cuenta que los concentradores USB 3.0 también son compatibles, y bastantes nuevos concentradores USB 3.0 realmente funcionan bien.
Lee más aquí .
Divulgación: soy el autor de uhubctl.
fuente
Consulte Control de una fuente de alimentación USB (activar / desactivar) con Linux , versión corta, para los núcleos más nuevos "suspender" ya no funciona:
Pero literalmente no corta la energía, indica al dispositivo que se apague, depende del dispositivo implementar la administración de energía y hacer lo correcto.
Tiene muchos detalles en la documentación oficial en el núcleo, allí explica los diversos archivos
/sys/bus/usb/devices/.../power/
y cómo administrar los dispositivos y puertos.Para cosas que no son dispositivos usb reales (¿su lámpara usb se muestra en lsusb?) Usted no tiene suerte, lo he probado con una lámpara usb y con un registrador gps que carga su batería y transfiere datos a través de usb que muestra como un usb cp210x a serie, y tampoco lo hace el apagado. Puedo "desconectar" el GPS
echo '5-4.6' > /sys/bus/usb/drivers/usb/unbind
y volver a conectarlo,echo '5-4.6' > /sys/bus/usb/drivers/usb/bind
pero la luz de carga de la batería siempre está encendida.Pero parece que algunos centros lo hacen correctamente .
fuente
NO es necesario editar individualmente los archivos " autosuspend_delay_ms ".
La suspensión automática de USB se puede deshabilitar GLOBALMENTE y PERSISTENTEMENTE con:
Toma solo unos segundos probar la solución propuesta y validar su corrección.
Una captura de pantalla anotada de Ubuntu 18.04 a continuación ilustra la modificación como se describió anteriormente, lo que resulta en el reinicio del host con TODAS las configuraciones de suspensión automática de USB deshabilitadas:
fuente