У меня есть USB-лампа, которую я специально купил, чтобы программно выключить ее в определенное время, поэтому мне нужно отключить питание USB-порта.
Я думаю, что у меня есть USB-хаб на USB6. Лампа подключена к одному из портов в этом концентраторе:
#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
Вот что я попробовал:
Два решения здесь , первый предлагает:
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
но я получаю write error: Invalid argument
при попытке написать /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
Второе решение:
sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'
который отключает питание USB-концентратора.
Я также пытался следовать этому :
Но вывод lsusb -t
просто зависает:
$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C
Что мешает мне использовать этот метод, чтобы получить часть '2-1.1' к этому:
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind
Есть ли альтернативный способ получения этой информации?
В качестве альтернативы, есть ли способ отключить питание всей подсистемы USB? Что то типа modprobe -r usb_etc
?
Мое ядро:
$uname -r
3.2.0-4-amd64
источник
lsusb -t
вызов и не нашел ничего полезного в то время, когда мне пришлось отлаживать его. У меня, честно говоря, сейчас нет времени, чтобы найти ошибки в lsub, и я даже не могу сейчас их воспроизвести, так что, вероятно, это зависит от подключенных устройств. Мне придется подождать, чтобы вернуться домой, чтобы попытаться воспроизведите это.Ответы:
Вы можете использовать утилиту командной строки uhubctl для управления питанием USB на порт для совместимых концентраторов USB.
Он работает только на концентраторах, которые поддерживают переключение питания на порт, но учтите, что многие современные материнские платы имеют концентраторы USB, которые поддерживают эту функцию.
Скомпилировать:
Чтобы вывести список состояний всех концентраторов, их местоположения и портов, которыми может управлять uhubctl:
Чтобы отключить питание порта 5 одного совместимого концентратора:
Если у вас подключено более одного совместимого концентратора, используйте
-l
для указания местоположения концентратора, чтобы управлять им:Чтобы выключить и включить питание:
Обратите внимание, что концентраторы USB 3.0 также поддерживаются, и довольно много новых концентраторов USB 3.0 действительно работают хорошо.
Узнайте больше здесь .
Раскрытие - я автор uhubctl.
источник
См. Управление питанием USB (вкл / выкл) с помощью linux , короткая версия, для более новых ядер «suspend» больше не работает:
Но он буквально не отключает питание, он сигнализирует о выключении устройства, это зависит от устройства, чтобы реализовать управление питанием и делать правильные вещи.
У вас есть много подробностей в официальной документации ядра, там объясняются различные файлы
/sys/bus/usb/devices/.../power/
и как управлять устройствами и портами.Для вещей, которые не являются реальными USB-устройствами (ваша USB-лампа отображается в lsusb?) Вам не повезло, я попробовал себя с USB-лампой и GPS-регистратором, который заряжает аккумулятор и передает данные через USB, который показывает как cp210x USB к последовательному порту, и ни один не делает poweroff. Я могу «отключить» GPS с помощью
echo '5-4.6' > /sys/bus/usb/drivers/usb/unbind
и повторно подключить его,echo '5-4.6' > /sys/bus/usb/drivers/usb/bind
но индикатор зарядки аккумулятора всегда включен.Но похоже, что некоторые хабы делают это правильно .
источник
Это НЕ нужно индивидуально редактировать « autosuspend_delay_ms файлы».
Автоподвеска USB может быть отключена ГЛОБАЛЬНО и ПРОСТОГО с помощью:
Требуется всего несколько секунд, чтобы проверить предложенное исправление и проверить его правильность.
Ubuntu 18,04 аннотированный скриншот ниже иллюстрирует его модификацию , как вышеописанные , что приводит к хосту перезагрузки с ВСЕ настройками USB autosuspend инвалидов:
источник