GNU/Linux >> Tutoriales Linux >  >> Linux

Apagar la alimentación al puerto USB. ¿O apagar todo el subsistema USB?

Tengo una lámpara USB que compré específicamente para apagarla mediante programación en un momento determinado, por lo que necesito desconectar la alimentación de su puerto USB.

Creo que tengo un concentrador usb en usb6. La lámpara está conectada a uno de los puertos de 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 probado:

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 obtengo write error: Invalid argument al intentar escribir en /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 de concentrador USB.

También estaba tratando de seguir esto:

Pero la salida de lsusb -t simplemente 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' de 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 cortar 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

Respuesta aceptada:

Podrías usar mi herramienta uhubctl – utilidad de línea de comandos para controlar la alimentación USB por puerto para concentradores USB compatibles.

Solo funciona en concentradores compatibles con la conmutación de alimentación por puerto, pero tenga en cuenta que muchas placas base modernas tienen concentradores USB compatibles con esta función.

Para compilar:

git clone https://github.com/mvp/uhubctl
cd uhubctl
make

Para instalar en todo el sistema como /usr/sbin/uhubctl :

sudo make install

Para enumerar el estado de todos los concentradores, sus ubicaciones y puertos que pueden ser controlados por uhubctl:

sudo uhubctl

(puede evitar usar sudo si configura los permisos USB de udev).

Relacionado:¿Por qué eliminar un archivo en una memoria USB no libera espacio?

Para apagar el puerto 5 de un solo concentrador compatible:

sudo uhubctl -a 0 -p 5

Si tiene más de un concentrador compatible conectado, use -l para especificar la ubicación del concentrador para controlarlo:

sudo uhubctl -a 0 -p 5 -l 3-1.2

Para alternar entre apagado y encendido:

sudo uhubctl -a 2 -p 5

Tenga en cuenta que los concentradores USB 3.0 también son compatibles, y bastantes nuevos concentradores USB 3.0 funcionan bien.

Lea más aquí.


Linux
  1. ¿Cómo encontrar la velocidad del concentrador USB?

  2. Linux USB:¿encender y apagar la alimentación?

  3. ¿Cómo apagar la pantalla con acceso directo en Linux?

  4. USB Type-C, ¿cómo se controla la dirección de entrega de energía?

  5. ¿Cómo puedo clonar todo mi sistema operativo en una memoria USB de arranque?

3 formas de apagar Debian

Cómo desactivar la exploración de directorios en Apache y Nginx

¿Cómo se comprueba cuánta energía puede entregar un puerto USB?

Cómo desactivar la administración de energía inalámbrica de forma permanente

¿Cuándo desactivar TCP SACK?

Desactivar el modo interactivo del comando cp (copiar) (cp:¿sobrescribir?)