16

Is there a way that I can power off a (specific) USB device completely using software from a Linux machine?

I want to use this to power off (so that the LED is off) a (single) USB stick.

Do you know any method to achieve this? E.g. using /sys/bus/usb or the like?

3
  • Yes. Simply unmount the device.
    – iglvzx
    Dec 23, 2011 at 19:02
  • 1
    No, that doesn't help. There is also the possibility that there are no usable partitions (which could be mounted) on the stick. Dec 24, 2011 at 0:25
  • For a flash drive, the one way to remove the disk is echo 1 > /sys/block/sd<letter[s]>/device/delete... (eject might be doing that...) It MIGHT result in the device being (soft) "powered off"... (If it works for disks, it won't work for non-disk devices..) Jun 22, 2018 at 14:45

2 Answers 2

14

If your machine runs old kernel, you could issue echo suspend > /sys/bus/usb/devices/X-X/power/level to force suspension of device.

However, since 2.6.32 this is no longer possible:

We can categorize power management events in two broad classes: external and internal. External events are those triggered by some agent outside the USB stack: system suspend/resume (triggered by userspace), manual dynamic resume (also triggered by userspace), and remote wakeup (triggered by the device). Internal events are those triggered within the USB stack: autosuspend and autoresume. Note that all dynamic suspend events are internal; external agents are not allowed to issue dynamic suspends.

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.

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

I guess the best thing you can do is to unbind device from driver, so there would be no activity on it, and then configure the device to autosuspend as soon as possible (echo auto > /sys/bus/usb/devices/X-X/power/control && echo 0 > /sys/bus/usb/devices/X-X/power/autosuspend_delay_ms).

However, as far as I understand USB specs, even if you suspend the device, some power on port will remain, so it might be impossible to disable led if it is powered by 'dumb' scheme (i.e. directly connected to +5V and GND pins).

2
  • I'm marking this a the accepted answer because I was able to unbind the device from its driver and configure autosuspend, which leads to the device shuting down. Unfortunately, the targeted USB sticks (or: their LEDs) are directly connected to +5V and GND, and therefore cannot be powered down. Jan 21, 2013 at 4:13
  • even if you suspend the device, some power on port will remain Yeah it doesn't cut power at all. It just stops signalling on the D+/D- lines.
    – endolith
    Feb 1, 2022 at 17:24
3

Using the eject command should work.

Run eject /dev/<devicename> and it should power down.

2
  • Unfortunately, this doesn't work for my test stick here :( Dec 24, 2011 at 0:25
  • 3
    Which is not surprising if your USB stick is not a CD, Floppy, Tape or SCSI drive. eject only works with these. Jan 19, 2016 at 15:56

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .