- Системное администрирование и мониторинг Linux/Windows серверов и видео CDN
- Статьи по настройке и администрированию Windows/Linux систем
- Включение/выключение питания USB устройств из консоли
- Управление источником питания USB (вкл / выкл) в Linux
- Короткий ответ:
- Длинный ответ:
- В ядре Linux обнаружили смешной баг, отключающий USB-устройства
- Управление питанием USB (отключение/включение)
- Нашёл
- как узнать « номер устройства» ?
Системное администрирование и мониторинг Linux/Windows серверов и видео CDN
Статьи по настройке и администрированию Windows/Linux систем
- Полезное
- Карта сайта
- Мой сайт-визитка
- Рубрики
- Linux
- VoIP
- Безопасность
- Видеопотоки
- Системы виртуализации
- Системы мониторинга
- Windows
- Интересное
- Сеть и Интернет
- Linux
- Мета
- Войти
- RSS Feed
Включение/выключение питания USB устройств из консоли
Иногда бывают ситуации, когда нужно отключить USB флешку, сделать настройку какой-то программы и потом опять подключить для нормальной работы. Но что делать если эти действия нужно сделать на удаленном сервере, к которому у нас нет физического доступа. Можно обратиться в службу поддержки, но можно и сделать все своими силами «не отходя от кассы». Расскажу как это делается.
Допустим, наша флешка уже втыкнута в USB-порт. Первым делом нужно проверить так ли это.
Как видим, USB-флешка находиться на шине Bus 001. Следовательно нам нужно найти в /sys/bus/usb/devices/ соответствующее USB устройство и выключить питание.
Чтобы копаться в системных устройствах нужны права суперпользователя.
По скольку мы знаем, что наша USB флешка на физической шине с номером 1. Следовательно, нужно отключить питание устройства 1-6, так как именно оно отвечает за первую шину.
Приведенная выше команда, отключит питание устройства на лету. Проверим теперь, так ли это.
Как видим — устройство отключено.
После внесения нужных изменений, подключаем питание USB устройства.
Источник
Управление источником питания USB (вкл / выкл) в Linux
Можно ли в Linux включать / выключать источники питания от USB вручную?
Есть этот внешний USB-вентилятор (тот, который вы используете для охлаждения себя, а не ПК), и было бы неплохо иметь возможность управлять им с терминала, потому что я хочу расположить вентилятор где-то далеко.
Я полагаю, что это также может быть полезно для множества других вещей, потому что есть много игрушек USB. Может быть, очистители воздуха и т. Д. (Я слышал, что они на самом деле не работают).
Заметка. Информация в этом ответе относится к более старым ядрам (до 2.6.32). Смотрите ответ tlwhitec для информации о более новых ядрах.
(Вам может понадобиться изменить usb1 на usb n )
Источник: Документация / usb / power-management.txt.gz
Согласно документам , в ядре 2.6.32 произошли некоторые изменения в управлении питанием USB , которые, похоже, установились в 2.6.38 . Теперь вам нужно дождаться простоя устройства , которое определяется конкретным драйвером устройства. Драйвер должен поддерживать его, иначе устройство никогда не достигнет этого состояния. К сожалению, теперь у пользователя нет шансов форсировать это. Однако, если вам повезло, и ваше устройство может бездействовать, то чтобы отключить это, вам нужно:
или, для ядер около 2.6.38 и выше:
Это буквально означает « приостановить работу» в тот момент, когда устройство бездействует.
Так что, если ваш поклонник не является чем-то «интеллектуальным», который можно рассматривать как устройство и которым управляет драйвер, вам вряд ли повезет с нынешними ядрами.
Я нашел эти решения, которые по крайней мере работают для правильно сконфигурированного чипа-концентратора Terminus FE 1.1 USB:
1.Чтобы отключить питание всех портов USB концентратора, вы можете отсоединить концентратор от ядра, используя:
чтобы снова включить питание — вы можете связать его обратно, используя
2. Переключение питания на каждом порту в отдельности более сложное: я смог использовать hubpower для управления каждым портом — но у него есть и обратная сторона: hubpower сначала отключает usbdevfs, что приводит к отключению всех USB-устройств от системы, по крайней мере, в ubuntu :
С этим ioctl отключенным я смог отключить питание отдельного порта, не отключая все устройства, но питание сразу же включается (вероятно, из-за того, что ядро видит неинициализированное устройство), что заставляет USB-устройство просто выполнить «холодный перезапуск», что я в общем хотел сделать. Мой исправленный Hubpower здесь
PowerTOP от Intel позволяет переключать устройства, такие как USB-периферия, в режиме реального времени. Они называются перестраиваемыми.
- Перейдите на «Tunables».
- Прокрутите вниз до вашего устройства.
- Нажмите Enter, чтобы переключить режим энергосбережения ( хорошо / плохо )
Обратите внимание, что Bad означает, что устройство всегда включено. Переключение на Good выключит устройство по истечении заданного времени неактивного сохранения (по умолчанию 2000 мс).
Посмотрите документы PowerTOP для деталей о том, как сделать эти изменения постоянными.
Он генерирует скрипты конфигурации для вас (в значительной степени, как описано другими авторами в этой теме).
ПРИМЕЧАНИЕ. Эти сценарии не влияют на питание контактов USB (которое всегда включено).
Они только отправляют протокол драйвера для активации и деактивации устройства.
Если вы хотите контролировать питание контактов, вы можете использовать либо поддерживаемый интеллектуальный USB-концентратор, либо, что еще лучше, микроконтроллер .
Вы можете использовать мой инструмент uhubctl для управления питанием USB на порт для совместимых концентраторов USB.
Я хотел сделать это, и с моим оборудованием USB я не мог. Я написал хакерский способ, как это сделать здесь:
Коротко говоря: я использовал 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-автоподвески немного проще и удобнее для написания сценариев.
Источник
В ядре Linux обнаружили смешной баг, отключающий USB-устройства
Один из разработчиков ядра Linux Сара Шарп из компании Intel посыпает голову пеплом: за восемь лет работы над стеком Linux USB они неоднократно сталкивались с ситуацией, когда USB-устройство внезапно отключалось после выхода из режима ожидания при включенной функции auto-suspend. Все это время проблему списывали на китайских производителей дешевых флэшек, мышек и клавиатур. Обсуждалась даже идея внедрить «черный список» моделей таких устройств прямо в ядро, чтобы для них не активировался режим энергосбережения. От идеи отказались только когда стало ясно, что список будет слишком большим: так много было USB-устройств, которые вели себя некорректно.
Сейчас выяснилось, что сбои не всегда были аппаратными.
В коде хост-контроллера Intel xHCI (drivers/usb/core/hub.c) есть строчка с лаконичным комментарием «TRSMRCY = 10 msec». В соответствии с пунктом 7.1.7.7 спецификаций USB 2.0, система USB System Software должна обеспечить время в 10 миллисекунд для восстановления работы устройства, в течение которых не отправлять на него никаких запросов. В ядро Linux просто вставили таймаут 10 мс. Но специалисты по аппаратному обеспечению сейчас обратили внимание разработчиков ядра Linux, что в таблице 7-14 спецификаций USB 2.0 указано, что таймаут должен быть минимум 10 миллисекунд, а не максимум. Это означает, что устройство может восстанавливаться дольше, чем сейчас установлено в строке TRSMRCY в Linux USB. В таких случаях при попытке обратиться к нему может возникнуть ошибка передачи данных — тогда операционная система считает устройство отключенным.
Тесты показали, что выход устройства из спящего режима никогда не занимает больше 17 мс, но в 8% случаев превышает 10 мс. Для исправления бага достаточно увеличить значение таймаута с 10 до 20 мс, после чего все USB-устройства начнут нормально работать. Сара Шарп уже подготовила патч.
Разработчики говорят, что больше всего от бага страдают пользователи ChromeOS, потому что эта система очень агрессивно использует режим энергосбережения для USB, активируя auto-suspend для всех внутренних USB-устройств, включая WiFi и Bluetooth.
(c) x
UDP: Посоны, расходимся
I guess the xHCI hardware engineers just assumed software would always wait for the interrupt from the port status change event, rather than using a simple 10 ms timer. I bet they didn’t even realize that that the transition took longer than 10ms, because Windows waited for the port status change event.
Источник
Управление питанием USB (отключение/включение)
Собственно в преддверии того что я опять пошел учится я выполнил свое давнее желание и засунул внутрь своего EeePc 1000H 3G модем. Хотел подцепить к не используемым mini PCIe, но один из них не был распаян на самой материнке а от второго модем отказался работать ( как впрочем и другие usb устройства ) вследствие чего я решился пожертвовать одним из распаянных usb портов. Уже когда закончил встал вопрос о питании, а точнее расходе аккумулятора. Ведь даже когда я не использую 3G — модем работает.
Собственно как можно программно ( bash сойдет но можно и GUI ) отключить питание одного порта или контроллера?
Интернеты почитал но ничего конкретного не нашел.
P.S. знаю что сказал много лишнего.
Ищи по форуму, мнократно было, например, [как в винде] отключение usb девайса
В вики ЛОРа добавляли управление питанием юсб устройств.
Нашёл
echo suspend > /sys/bus/usb /devices/« номер устройства »/power/level
echo on > /sys/bus/usb /devices/« номер устройства» /power/level
От себя добавлю: ядро должно быть собрано с опцией CONFIG_USB_SUSPEND
как узнать « номер устройства» ?
[ 121.923467] exe (2799): /proc/2799/oom_adj is deprecated, please use /proc/2799/oom_score_adj instead. [ 164.214887] usb 2-1: USB disconnect, device number 2 [ 164.214890] usb 2-1.1: USB disconnect, device number 5 [ 164.215963] sierra ttyUSB0: Sierra USB modem converter now disconnected from ttyUSB0 [ 164.216077] sierra ttyUSB1: Sierra USB modem converter now disconnected from ttyUSB1 [ 164.216138] sierra ttyUSB2: Sierra USB modem converter now disconnected from ttyUSB2 [ 164.216151] sierra 2-1.1:1.0: device disconnected [ 172.502081] usb 2-1: new high speed USB device number 6 using ehci_hcd [ 172.617733] usb 2-1: New USB device found, idVendor=05e3, idProduct=0608 [ 172.617739] usb 2-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0 [ 172.617744] usb 2-1: Product: USB2.0 Hub [ 172.618677] hub 2-1:1.0: USB hub found [ 172.618952] hub 2-1:1.0: 4 ports detected [ 173.824386] usb 2-1.1: new full speed USB device number 7 using ehci_hcd [ 173.901358] usb 2-1.1: New USB device found, idVendor=1199, idProduct=0120 [ 173.901365] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 173.901370] usb 2-1.1: Product: Sierra Wireless AC595U Device [ 173.901374] usb 2-1.1: Manufacturer: Sierra Wireless, Incorporated [ 173.902157] sierra 2-1.1:1.0: Sierra USB modem converter detected [ 173.902470] usb 2-1.1: Sierra USB modem converter now attached to ttyUSB0 [ 173.902579] usb 2-1.1: Sierra USB modem converter now attached to ttyUSB1 [ 173.902685] usb 2-1.1: Sierra USB modem converter now attached to ttyUSB2 [ 194.582860] usb 2-1: clear tt 1 (9072) error -71 [ 194.591812] usb 2-1: clear tt 1 (9072) error -71 [ 194.599834] usb 2-1: clear tt 1 (9072) error -71
Посмотри, по какому порту цепляется gnome-ppp или kppp. У модемов обычно 3 порта, для фейкового сидирома, карты памяти и собственно модема. У zte /dev/ttyUSB2, huawei /dev/tty/USB0.
Lorcode лучше используй в следующий раз.
# echo suspend > /sys/bus/usb/devices/usb1/1-2/power/level -bash: echo: ошибка записи: Недопустимый аргумент
Вот так он меня посылает, параметры on и auto проходят на ура
Не могу проверить, ноут навернулся. С оперы мини писал. Остаётся проверить, собрано ли ядро с поддержкой usb suspend.
>Re: отключить питание на USB программно
посмотрел конфиг ядра. CONFIG_PM is not set
find /sys/bus/usb/devices/*-*/power/ -name level
zgrep CONFIG_USB_SUSPEND /proc/config.gz
В этом треде мегабакс много интересных наводок давал. Там камрад бился, пока в биосе управление юсб устройствами не отрубил.
Может адрес устройства не тот, вот тут хороший совет. Кстати, у автора топика такая же ошибка записи.
find /sys/bus/usb/devices/*-*/power/ -name level Находит 3 штуки, посылаю suspend и off, все та же ошибка.
/proc/config.gz нету такого файла.
по линку прошелся, поставил powertop, из него стало известно что мопед весит на usb 2-2 и жрет оно 15% от всего энергопотребления в выключенном состоянии, в включенном немного больше — 16%
Итак usb найден нужный, осталось его выключить и включить. Куда еще можно копать? повторюсь on и auto проходят успешно
UPD. бук кушает от 8,6 до 12 Ватт в час при серфинге и выключенной вафле ( серфинге от мопеда ), и около 12-15 Ватт при серфе через wifi, мопед то работает.
Сейчас от родных 55,3Wh осталось только 34Wh на батареи, т.е. около 2,2 часа работы от батареи, что весьма мало. заказал новую расширенную батарею на 130Wh но все равно модем нужно выключить >_>
Сегодня буду играться с антеной модема ( т.к. сигнал упал чутка из за корпуса )
Если я правильно понял, ядро не собрано с CONFIG_USB_SUSPEND. Тогда понятно, почему не срабатывает. Что за дистрибутив-то? У дебианоподобных можно ядро от liquorix поставить, чтобы не собирать.
Источник