Відключення живлення до порту usb. Або вимкніть живлення для всієї підсистеми usb


28

У мене є лампа usb, яку я спеціально придбав для того, щоб програмно вимкнути її в певний час, тому мені потрібно відключити живлення до його порту usb.

Я вважаю, що у мене є usb-hub у 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-hub.

Я також намагався слідувати цьому :

Але вихід 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

які синтаксичні помилки? у цьому випадку не потрібно цитувати прості рядки "призупинити", "відключено". якщо у вас є звичка цитувати, вам здорово, але в цьому випадку це не потрібно.
користувач84207

Я спробував розтягнути lsusb -tдзвінок, і не знайшов нічого корисного протягом часу, коли мені довелося налагодити його. Я, чесно кажучи, не встигаю зараз знайти помилки в lsub, і зараз навіть не можу відтворити його, тому це, мабуть, залежить від підключених пристроїв. Мені доведеться чекати, щоб повернутися додому, щоб спробувати відтворити його.
користувач84207

Відповіді:


20

Ви можете використовувати утиліту командного рядка uhubctl для управління живленням USB на порт для сумісних концентраторів USB.

Він працює лише на концентраторах, які підтримують перемикання живлення порту, але зауважте, що у багатьох сучасних материнських плат є USB-концентратори, які підтримують цю функцію.

Для складання:

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

Щоб перерахувати статус усіх концентраторів, їх місцезнаходження та порти, якими можна керувати uhubctl:

uhubctl

Щоб вимкнути живлення на порту 5 одного сумісного концентратора:

uhubctl -a 0 -p 5

Якщо у вас підключено більше одного сумісного концентратора, використовуйте -lдля вказівки його розташування:

uhubctl -a 0 -p 5 -l 3-1.2

Щоб увімкнути вимкнення живлення, а потім увімкніть:

uhubctl -a 2 -p 5

Зауважте, що концентратори USB 3.0 також підтримуються, і досить багато нових USB 3.0 концентраторів насправді працюють добре.

Детальніше читайте тут .

Розкриття інформації - я автор uhubctl.


Трохи більше інформації було б непогано. Тим більше, що ви автор, і це не типові приклади пакету, як ним користуватися, що робити, якщо які-небудь можливості / обмеження у нього є, ризики, якщо такі є, відповіді лише на посилання не бажані.
Захарій Брейді

2
Що ж, копія / вставлення всього файлу README мені не здається яскравою ідеєю. Це все пояснено.
mvp

Ні, ціле читання було б надмірним. Тільки, як можна використовувати програму для вирішення проблеми, поставленої у питанні. І якщо є певні застереження щодо конкретного випадку використання, не всієї програми. Вибачте, якщо мені не було зрозуміло в першому коментарі.
Захарій Брейді

1
FYI: Цей метод працює для сімейства контролерів PCIe-USB Renesas UPD720202, що належить до PCIe-USB. :) Спасибі.
Wossname

Дякуємо @Wossname. Ви не хочете додати його як новий випуск на сайті github.com/mvp/uhubctl/isissue ? Я оновлю список підтримуваних пристроїв.
mvp

20

Див. Розділ Керування джерелом живлення USB (увімкнення / вимкнення) за допомогою короткої версії Linux , для нових ядер "призупинення" більше не працює:

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але лігмент зарядки акумулятора завжди включений.

Але, схоже, деякі хаби роблять це правильно .


0

Це НЕ потрібно індивідуально редагувати « autosuspend_delay_ms файли».

Автозапуск USB може бути відключений ГЛОБАЛЬНО та ОСОБЛИВО за допомогою:

sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&usbcore.autosuspend=-1 /' /etc/default/grub

update-grub

systemctl reboot

На тестування запропонованого виправлення та перевірку його правильності потрібно лише кілька секунд.

Ubuntu 18,04 анотований скріншот нижче ілюструє його модифікацію , як вищеописані , що призводить до хосту перезавантаження з ВСЕ настройками USB autosuspend інвалідів:

Демонстрація Ubuntu 18.04 демонстрації глобального відключення через USB

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.