Есть ли способ выключить USB-устройство с помощью программного обеспечения?

11

Есть ли способ полностью отключить (определенное) USB-устройство с помощью программного обеспечения с компьютера с Linux?

Я хочу использовать это, чтобы выключить (чтобы светодиод не горит) (одну) флешку.

Знаете ли вы какой-нибудь метод для достижения этой цели? Например, используя / sys / bus / usb или тому подобное?

Даниэль Жур
источник
Да. Просто отключите устройство.
iglvzx
1
Нет, это не помогает. Существует также вероятность того, что на флешке нет пригодных для использования перегородок (которые можно было бы установить).
Даниэль Жур
Для флеш-накопителя единственным способом извлечь диск является echo 1 > /sys/block/sd<letter[s]>/device/delete... (возможно, это происходит с помощью eject ...) МОЖЕТ привести к тому, что устройство (софт) будет "выключено" ... (Если это работает для дисков, это не будет работать для недисковых устройств ..)
Герт ван ден Берг,

Ответы:

10

Если ваша машина работает со старым ядром, вы можете echo suspend > /sys/bus/usb/devices/X-X/power/levelвызвать принудительное приостановление работы устройства.

Однако, начиная с 2.6.32, это больше невозможно:

Мы можем классифицировать события управления питанием в два широких класса: внешний и внутренний. Внешние события - это события, запускаемые каким-либо агентом за пределами стека USB: приостановка / возобновление работы системы (инициированное пользовательским пространством), динамическое возобновление вручную (также инициируемое пользовательским пространством) и удаленное включение (запускаемое устройством). Внутренние события - это те события, которые запускаются в стеке USB : autosuspend и autoresume. Обратите внимание, что все события динамического приостановления являются внутренними ; внешние агенты не могут выдавать динамические приостановки.

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.

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

Я думаю, что лучшее, что вы можете сделать, это отсоединить устройство от драйвера , чтобы на нем не было никаких действий, а затем настроить устройство на автоматическую приостановку как можно скорее ( echo auto > /sys/bus/usb/devices/X-X/power/control && echo 0 > /sys/bus/usb/devices/X-X/power/autosuspend_delay_ms).

Тем не менее, насколько я понимаю, спецификации USB , даже если вы приостановите устройство, некоторое питание на порту останется, поэтому может быть невозможно отключить светодиод, если он питается по «тупой» схеме (то есть напрямую подключен к + 5V и GND). штифты).

земля
источник
Я отмечаю это как принятый ответ, потому что мне удалось отсоединить устройство от его драйвера и настроить автоподключение, что приводит к выключению устройства. К сожалению, целевые USB-накопители (или: их светодиоды) напрямую подключены к + 5 В и GND и поэтому не могут быть отключены.
Даниэль Жур
3

Использование команды eject должно работать.

Запустите eject /dev/<devicename>и он должен выключиться.

soandos
источник
К сожалению, это не работает для моего тестового набора здесь :(
Даниэль Жур
2
Что неудивительно, если ваша флешка не является дисководом для компакт-дисков, дискет, магнитных лент или SCSI. ejectработает только с этим.
Дмитрий Григорьев