Отключение питания USB-порта. Или отключите питание всей подсистемы USB

У меня есть лампочка 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 

2 Solutions collect form web for “Отключение питания USB-порта. Или отключите питание всей подсистемы USB”

См. Раздел Управление питанием USB (вкл. / Выкл.) С помощью linux , короткая версия, для более новых ядер «suspend» больше не работает:

 echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms" echo "auto" > "/sys/bus/usb/devices/usbX/power/control" 

Но он буквально не отключает питание, он сигнализирует об отключении устройства, это зависит от устройства для управления энергопотреблением и делает все необходимое.

У вас много деталей в официальной документации в ядре, там объясняются различные файлы в /sys/bus/usb/devices/.../power/ и как управлять устройствами и портами.

Для вещей, которые не являются настоящими USB-устройствами (появляется ли ваша лампочка usb в lsusb?), Вам не повезло, я попробовал себя с лампой usb и с gps-регистратором, который заряжает его аккумулятор и передает данные через usb, который показывает как cp210x usb к серийному, и ни одно из них не работает. Я могу «отключить» gps с помощью echo '5-4.6' > /sys/bus/usb/drivers/usb/unbind и снова подключить его с помощью echo '5-4.6' > /sys/bus/usb/drivers/usb/bind но зарядка аккумулятора всегда включена.

Но, похоже, некоторые хабы делают это правильно .

Вы можете использовать утилиту uhubctl – командной строки для управления мощностью USB на порт для совместимых концентраторов USB.

Он работает только с концентраторами, которые поддерживают переключение питания на каждом порту, но обратите внимание, что на многих современных материнских платах есть USB-хабы, которые поддерживают эту функцию.

Скомпилировать:

 git clone https://github.com/mvp/uhubctl cd uhubctl make 

Чтобы просмотреть статус всех концентраторов и портов, которые можно контролировать с помощью uhubctl:

 uhubctl 

Вам может потребоваться добавить -i чтобы просмотреть статус внутренних USB-концентраторов (они по умолчанию исключены).

Чтобы отключить питание порта 5 однопроцессорного концентратора:

 uhubctl -a 0 -p 5 

Чтобы включить питание для всех портов всех совместимых концентраторов:

 uhubctl -a 1 

Для выключения питания затем:

 uhubctl -a 2 -p 5 

Подробнее читайте здесь .

Отказ от ответственности – я автор uhubctl.

  • Управление USB-соединением / питание - только зарядка
  • Опрос для нажатия кнопки Bluetooth
  • Как я могу запросить устройство USB и знать, что он жив?
  • Как измерить потребление энергии на USB-устройстве?
  • Триггеры Udev не запускают вставку CF-карты в устройство чтения карт USB (больше)
  • Как перезагрузить USB-устройство после безопасного извлечения?
  • Передача файлов флэш-накопителя USB, кажется, несколько раз висит во время передачи файла
  • Перенаправление или запуск по событию ввода dev-узла
  • Устройство с USB-портом для хранения пользователей - как определить / как разрешить небезопасные отключения?
  • USB 3.0 камера распознается под живой загрузкой (попробуйте Ubuntu), но не с HDD
  • Alsa не обнаруживает USB-микрофон при загрузке системы
  • USB-мышь не работает
  • Interesting Posts

    Как получить pid подпроцесса из самого подпроцесса

    Поиск конфигурации пильного диска

    Восстановить образ диска от установки без рейда до RAID1

    Как установить более старую версию GNU make с помощью apt на Ubuntu 16.04?

    WGET – проверка подлинности root и всех дочерних папок

    CDROM не отображается на Lenovo G50

    Изолировать сеть хостов с помощью iptables

    Использование клавиш яркости / громкости в tty / виртуальной консоли?

    Могу ли я ограничить размер отложенной записи NFS?

    Есть ли один вкладыш, который может отображать отпечатки с открытым ключом с помощью authorized_keys в качестве входных данных?

    Отфильтровать запрос HTTP GET в wirehark?

    Как подключить диск к месту, которое не существует?

    Бэкэнд в настоящее время размонтирует

    Не удалось подключить шлюзы и другие Linux-боксы в одной сети

    IPv4 отправляется в автономном режиме несколько раз в час на безголовый удаленный сервер, IPv6 не затрагивается

    Linux и Unix - лучшая ОС в мире.