Можно ли в Linux включать / выключать источники питания от USB вручную?
Есть этот внешний USB-вентилятор (тот, который вы используете для охлаждения себя, а не ПК), и было бы неплохо иметь возможность управлять им с терминала, потому что я хочу расположить вентилятор где-то далеко.
Я полагаю, что это также может быть полезно для множества других вещей, потому что есть много игрушек USB. Может быть, очистители воздуха и т. Д. (Я слышал, что они на самом деле не работают).
power/level
устарел; используйтеpower/control
вместо этого . (power/wakeup
все в порядке.) Кроме того, он принимает только «auto» и «on», а не «suspend» больше. «Авто» достаточно умный, и если питание не отключается во время простоя, это ошибка устройства. В любом случае, вы не можете выключить питание вручную. Более подробно см ответа ниже по tlwhitec и док в ядре: kernel.org/doc/Documentation/usb/power-management.txtОтветы:
Заметка. Информация в этом ответе относится к более старым ядрам (до 2.6.32). Смотрите ответ tlwhitec для информации о более новых ядрах.
(Вам может понадобиться изменить usb1 на usb n )
Источник: Документация / usb / power-management.txt.gz
источник
sudo foo > bar
анализируется как непосредственный выводbar
, а затем запускаетсяfoo
с использованиемsudo
. Перенаправление не происходит, потому что это происходит до того, как вы получите root-доступ. Решение состоит в том, чтобы использоватьsudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup'
и так далее: получить root, запустить новый ад, чтобы выполнить перенаправление, затем вывести что-то в дескриптор перенаправленного файла.Согласно документам , в ядре 2.6.32 произошли некоторые изменения в управлении питанием USB , которые, похоже, установились в 2.6.38 . Теперь вам нужно дождаться простоя устройства , которое определяется конкретным драйвером устройства. Драйвер должен поддерживать его, иначе устройство никогда не достигнет этого состояния. К сожалению, теперь у пользователя нет шансов форсировать это. Однако, если вам повезло, и ваше устройство может бездействовать, то чтобы отключить это, вам нужно:
или, для ядер около 2.6.38 и выше:
Это буквально означает « приостановить работу» в тот момент, когда устройство бездействует.
Так что, если ваш поклонник не является чем-то «интеллектуальным», который можно рассматривать как устройство и которым управляет драйвер, вам вряд ли повезет с нынешними ядрами.
источник
echo "on" > "/sys/bus/usb/devices/usbX/power/control"
, но я думаю, что вам нужно понять первоначальную цель. Функция автоматической приостановки здесь предназначена только для того, чтобы позволить бездействующим устройствам переходить в состояние пониженного энергопотребления (где оно может казаться выключенным), и возобновляться позже, когда это необходимо, либо хостом, либо каким-либо внешним событием. Это происходит (или должно происходить) автоматически. Сам порт на самом деле никогда не отключается. Действительно, прочитайте документы ;)dmesg | grep "usb"
и использовать номер после того, как «USB», например:usb 2-4.4: SerialNumber: A0848020
вы будете использовать:/sys/bus/usb/devices/2-4.4/power/...
. Также убедитесь, что устройство не используется. Я создал скрипт, чтобы упростить этот процессЯ нашел эти решения, которые по крайней мере работают для правильно сконфигурированного чипа-концентратора Terminus FE 1.1 USB:
1.Чтобы отключить питание всех портов USB концентратора, вы можете отсоединить концентратор от ядра, используя:
чтобы снова включить питание - вы можете связать его обратно, используя
2. Переключение питания на каждом порту в отдельности более сложное: я смог использовать hubpower для управления каждым портом - но у него есть и обратная сторона: hubpower сначала отключает usbdevfs, что приводит к отключению всех USB-устройств от системы, по крайней мере, в ubuntu :
С этим
ioctl
отключенным я смог отключить питание отдельного порта, не отключая все устройства, но питание сразу же включается (вероятно, из-за того, что ядро видит неинициализированное устройство), что заставляет USB-устройство просто выполнить «холодный перезапуск», что я в общем хотел сделать. Мой исправленный Hubpower здесьисточник
PowerTOP от Intel позволяет переключать устройства, такие как USB-периферия, в режиме реального времени. Они называются перестраиваемыми.
Обратите внимание, что Bad означает, что устройство всегда включено. Переключение на Good выключит устройство по истечении заданного времени неактивного сохранения (по умолчанию 2000 мс).
Посмотрите документы PowerTOP для деталей о том, как сделать эти изменения постоянными.
Он генерирует скрипты конфигурации для вас (в значительной степени, как описано другими авторами в этой теме).
ПРИМЕЧАНИЕ. Эти сценарии не влияют на питание контактов USB (которое всегда включено).
Они только отправляют протокол драйвера для активации и деактивации устройства.
Если вы хотите контролировать питание контактов, вы можете использовать либо поддерживаемый интеллектуальный USB-концентратор, либо, что еще лучше, микроконтроллер .
источник
Вы можете использовать мой инструмент uhubctl для управления питанием USB на порт для совместимых концентраторов USB.
источник
Я хотел сделать это, и с моим оборудованием USB я не мог. Я написал хакерский способ, как это сделать здесь:
http://pintant.cat/2012/05/12/power-off-usb-device/ .
Коротко говоря: я использовал USB-реле для открытия / закрытия V CC другого USB-кабеля ...
источник
работает на Ubuntu
источник
Питание USB 5v всегда включено (даже когда компьютер выключен, на некоторых компьютерах и на некоторых портах.) Вам, вероятно, потребуется запрограммировать Arduino с помощью какого-либо коммутатора и управлять им через библиотеку последовательного интерфейса от USB, подключенного к компьютер.
Другими словами, комбинация этого учебного руководства и этого учебного пособия по связи через последовательную библиотеку с Arduino подключена через USB.
источник
Причина , почему люди размещать такие вопросы, как это связано с dreaded- в самом деле « ЗЛО „- USB Auto-Приостановить“ функция ».
Автоматическая приостановка отключает питание «незанятого» USB-устройства, и если драйвер устройства не поддерживает эту функцию правильно, устройство может стать недоступным. Таким образом, включение / выключение USB-порта является симптомом проблемы, а не самой проблемой.
Я покажу вам, как ГЛОБАЛЬНО отключить авто-приостановку, избавляя от необходимости вручную включать и выключать порты USB:
Короткий ответ:
Вам НЕ нужно редактировать « autosuspend_delay_ms » по отдельности: USB autosuspend можно отключить глобально и ПРОСТО, используя следующие команды:
В конце «Длинного ответа» следует скриншот из Ubuntu 18.04, показывающий, как были достигнуты мои результаты.
Длинный ответ:
Это правда, что в документации по ядру управления питанием USB указано, что autosuspend не рекомендуется использовать и вместо нее используется autosuspend_delay_ms, которая используется для отключения autosuspend USB:
ОДНАКО мое тестирование показало, что настройка
usbcore.autosuspend=-1
в / etc / default / grub, как показано ниже, может использоваться в качестве GLOBAL- переключателя для функции автоподключения USB - вам НЕ нужно редактировать отдельные файлы " autosuspend_delay_ms ".В том же документе, ссылка на который приведена выше, указано, что значение «0» ВКЛЮЧЕНО, а отрицательное значение ОТКЛЮЧЕНО :
На аннотированном скриншоте Ubuntu 18.04 ниже, иллюстрирующем, как мои результаты были достигнуты (и воспроизводимы), пожалуйста, отметьте, что по умолчанию «0» ( включено ) в autosuspend_delay_ms .
Затем обратите внимание, что после ТОЛЬКО настройки
usbcore.autosuspend=-1
в Grub, эти значения теперь отрицательны ( отключены ) после перезагрузки. Это избавит меня от необходимости редактировать отдельные значения и теперь может отключить автоматическое отключение USB.Надеюсь, что это делает отключение USB-автоподвески немного проще и удобнее для написания сценариев.
источник
У меня возникла проблема при подключении телефона Android, я не мог зарядить свой телефон, потому что выключатель питания включился, а затем выключился ... PowerTop позволил мне найти этот параметр и был полезен для устранения проблемы (автоматическое значение вызывало проблему):
источник