¿Hay alguna manera de apagar un dispositivo USB usando un software?

11

¿Hay alguna manera de que pueda apagar un dispositivo USB (específico) completamente usando el software de una máquina Linux?

Quiero usar esto para apagar (para que el LED esté apagado) una memoria USB (única).

¿Conoces algún método para lograr esto? Por ejemplo, ¿usando / sys / bus / usb o similar?

Daniel Jour
fuente
Si. Simplemente desmonte el dispositivo.
iglvzx
1
No, eso no ayuda. También existe la posibilidad de que no haya particiones utilizables (que se puedan montar) en el dispositivo.
Daniel Jour
Para una unidad flash, la única forma de extraer el disco es echo 1 > /sys/block/sd<letter[s]>/device/delete... (expulsar podría estar haciendo eso ...) PODRÍA resultar en que el dispositivo (suave) se "apague" ... (Si funciona para discos, no funcionará para dispositivos que no sean de disco ...)
Gert van den Berg

Respuestas:

10

Si su máquina ejecuta kernel antiguo, puede emitir echo suspend > /sys/bus/usb/devices/X-X/power/levelpara forzar la suspensión del dispositivo.

Sin embargo, desde 2.6.32 esto ya no es posible:

Podemos clasificar los eventos de administración de energía en dos clases amplias: externa e interna. Los eventos externos son aquellos activados por algún agente fuera de la pila USB: suspensión / reanudación del sistema (activada por el espacio de usuario), reanudación dinámica manual (también activada por el espacio de usuario) y activación remota (activada por el dispositivo). Los eventos internos son aquellos activados dentro de la pila USB : autosuspend y autoresume. Tenga en cuenta que todos los eventos de suspensión dinámica son internos ; Los agentes externos no pueden emitir suspensiones dinámicas.

power/control

    This file contains one of two words: "on" or "auto".
    You can write those words to the file to change the
    device's setting.

    "on" means that the device should be resumed and
    autosuspend is not allowed.  (Of course, system
    suspends are still allowed.)

    "auto" is the normal state in which the kernel is
    allowed to autosuspend and autoresume the device.

    (In kernels up to 2.6.32, you could also specify
    "suspend", meaning that the device should remain
    suspended and autoresume was not allowed.  This
    setting is no longer supported.

(de http://www.kernel.org/doc/Documentation/usb/power-management.txt )

Supongo que lo mejor que puede hacer es desvincular el dispositivo del controlador , para que no haya actividad en él, y luego configurar el dispositivo para que se suspenda automáticamente lo antes posible ( echo auto > /sys/bus/usb/devices/X-X/power/control && echo 0 > /sys/bus/usb/devices/X-X/power/autosuspend_delay_ms).

Sin embargo, hasta donde entiendo las especificaciones USB , incluso si suspende el dispositivo, quedará algo de puerto de alimentación, por lo que podría ser imposible deshabilitar el led si está alimentado por un esquema 'tonto' (es decir, conectado directamente a + 5V y GND patas).

una tierra
fuente
Estoy marcando esto como la respuesta aceptada porque pude desvincular el dispositivo de su controlador y configurar la suspensión automática, lo que hace que el dispositivo se apague. Desafortunadamente, las memorias USB específicas (o: sus LED) están conectadas directamente a + 5V y GND, y por lo tanto no pueden apagarse.
Daniel Jour
3

Usar el comando de expulsión debería funcionar.

Corre eject /dev/<devicename>y debería apagarse.

soandos
fuente
Desafortunadamente, esto no funciona para mi prueba aquí :(
Daniel Jour
2
Lo que no es sorprendente si su memoria USB no es una unidad de CD, disquete, cinta o SCSI. ejectsolo funciona con estos.
Dmitry Grigoryev