Отключение питания 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 

  • Почему я ограничен ~ 10-20 USB-устройствами?
  • Получение информации о низком уровне от USB-драйвера
  • USB-звук не работает при подключении во время загрузки
  • Как мне форматировать USB до написания ISO?
  • Какой драйвер для USB-накопителя я должен установить?
  • minicom показ офлайн
  • Как смоделировать соединение USB-накопителя с qemu?
  • Не удается загрузить с usb
  • 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.

    Interesting Posts

    Сценарий Bash для отображения вновь введенных переменных env

    Каковы некоторые из вещей, которые может сделать ROOT, которые могли бы уничтожить компьютер

    Панели LX загадочно после 6 перезапуска

    Как ssh в ubuntu (настроено в виртуальном боксе) при выключенном

    Невозможно изменить / удалить файлы через долю samba

    Raspbian: проблема с перенаправлением вывода в скрипте udev

    Как использовать SCSUDO для запуска скриптов с позиционными параметрами?

    Содержимое папки списка во время команды cd

    Solaris использует генератор последовательности в начале каждой новой строки

    Могу ли я изменить тип терминала, который используется для входа через SSH?

    добавление к удаленному файлу через SSH приводит к линейному расширению

    Могу ли я настроить терминал XFCE, чтобы открыть все новые терминалы в виде вкладок одного окна?

    apache2: Не удалось открыть файл конфигурации /etc/apache2/apache2.conf: Ошибка ввода / вывода

    Текст обтекания и отступов с использованием coreutils

    что означает управление доступом Xserver

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