Отключить usb-контроллер linux

Обновлено: 02.07.2024

Если вы обнаружите, что одно из ваших USB-устройств в Windows 10 не работает, читайте дальше. Будь то USB-мышь, клавиатура, флэш-накопитель, принтер или какие-либо другие USB-устройства, это руководство должно решить вашу проблему.

Обратите внимание, что здесь есть 5 возможных решений. Вам может не понадобиться пробовать их все; просто начните с верхней части списка и продвигайтесь вниз.

Способ 1. Проверьте, не неисправно ли само устройство

Если USB-устройство работало до обновления до Windows 10, вряд ли оно неисправно. Но случаются совпадения. Конечно, возможно, ваше устройство просто перестало работать как раз в то время, когда вы обновляли Windows. Так что лучше полностью исключить эту возможность, прежде чем тратить время на устранение более сложных неполадок.

Чтобы проверить, неисправно ли USB-устройство, просто отключите его от сети ("Извлеките", если это USB-накопитель) и подключите его к другому компьютеру. Если работает, то с устройством все в порядке. Если это не так, то вы изолировали проблему! Вам просто нужно купить замену.

Способ 2. Проверьте блок питания (только для ноутбука)

Блок питания ноутбука подает питание на USB-порты. Если по какой-то причине это не удается сделать должным образом, устройства, подключенные к этим USB-портам, могут перестать работать. Иногда это можно исправить довольно просто:

1) Отключите блок питания и зарядное устройство от ноутбука

2) Перезагрузите ноутбук

3) Снова подключите USB-устройство к ноутбуку

4) Снова подключите блок питания

Способ 3. Проверьте настройки управления питанием

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

Чтобы исключить это как причину ваших проблем с USB, просто запретите Windows «управлять» питанием ваших USB-контроллеров и устройств:

1) Откройте Диспетчер устройств (введите «Диспетчер устройств» в поле поиска Windows)


2) Разверните ветку Контроллеры универсальной последовательной шины


3) Дважды щелкните первое устройство корневого концентратора USB в списке (если вы видите только одно устройство корневого концентратора USB, это нормально)


4) Перейдите на вкладку "Управление питанием"


5) Снимите флажок Разрешить компьютеру отключать это устройство для экономии энергии и нажмите OK .


6) Повторите шаги 3–5 для каждого устройства USB Root Hub в вашем списке контроллеров универсальной последовательной шины


Способ 4. Проверьте драйверы USB-устройства

Проблема с неработающими USB-портами, вероятно, вызвана проблемами с драйверами. Описанные выше шаги могут решить эту проблему, но если это не так или вы не уверены в том, что можете работать с драйверами вручную, вы можете сделать это автоматически с помощью Driver Easy.

Driver Easy автоматически распознает вашу систему и найдет для нее подходящие драйверы. Вам не нужно точно знать, какая система работает на вашем компьютере, вам не нужно рисковать загрузкой и установкой не того драйвера, и вам не нужно беспокоиться об ошибке при установке.

Вы можете автоматически обновлять драйверы с помощью БЕСПЛАТНОЙ или профессиональной версии Driver Easy. Но с Pro-версией это займет всего 2 клика (и вы получите полную поддержку и 30-дневную гарантию возврата денег):

1) Загрузите и установите Driver Easy.

2) Запустите Driver Easy и нажмите кнопку «Сканировать сейчас». Затем Driver Easy просканирует ваш компьютер и обнаружит проблемные драйверы.


3) Нажмите кнопку «Обновить» рядом с помеченным драйвером USB, чтобы автоматически загрузить и установить правильную версию этого драйвера (вы можете сделать это в БЕСПЛАТНОЙ версии).

Или нажмите «Обновить все», чтобы автоматически загрузить и установить правильную версию всех драйверов, которые отсутствуют или устарели в вашей системе (для этого требуется версия Pro — вам будет предложено обновить при нажатии кнопки Обновить все).


Способ 5. Проверьте USB-порты

Если ни один из вышеперечисленных способов не помог решить вашу проблему, возможно, ваши USB-порты повреждены. Чтобы выяснить это, вы можете отнести свой компьютер в ремонтную мастерскую и попросить их проверить. Если ваши USB-порты повреждены, ремонтник сможет заменить их довольно недорого.

Можно ли в Linux вручную включать/выключать питание от USB?

Есть внешний USB-вентилятор охлаждения (тот, который вы используете для охлаждения себя, а не ПК), и было бы неплохо иметь возможность управлять им с терминала, потому что я хочу расположить вентилятор где-нибудь подальше.

Я полагаю, что это также может быть полезно для множества других вещей, потому что есть много USB-игрушек. Может быть, очистители воздуха и т. д. (хотя я слышал, что они на самом деле не работают).


10 ответов 10

Примечание. Информация в этом ответе актуальна для старых ядер (до 2.6.32). См. ответ tlwhitec для получения информации о более новых ядрах.

(Возможно, вам потребуется изменить usb1 на usb n)



Вау, спасибо за это. Я думал, что мне нужно пройти через libUSB, несмотря ни на что. Любая идея, как получить имена подключенных устройств?

Разрешение отклонено, поскольку команда в форме 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 и выше:

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

Поэтому, если ваш вентилятор не является чем-то «интеллектуальным», что можно рассматривать как устройство и управлять им с помощью драйвера, вам, вероятно, не повезет с текущими ядрами.


Похоже, это приведет к тому, что USB-устройство будет постоянно отключаться. (?) Как мне восстановить питание после того, как это сработало? Моя цель — один раз перезагрузить устройство, а не постоянно менять его конфигурацию приостановки.

Чтобы возобновить работу приостановленного устройства, вы можете снова отключить "автоприостановку" с помощью команды echo "on" > "/sys/bus/usb/devices/usbX/power/control" , но я думаю, вам нужно понять первоначальную цель . Функция автоматической приостановки здесь предназначена только для того, чтобы позволить бездействующим устройствам переходить в состояние низкого энергопотребления (где оно может казаться выключенным) только для возобновления позже, когда это необходимо, либо хостом, либо каким-либо внешним событием. Это происходит (или должно происходить) автоматически. Сам порт на самом деле никогда не отключается. Действительно, читайте документы ;)

Я могу подтвердить, что он работает с ядрами > 3.10. Просто нужно убедиться, что «id» устройства, которое вы используете, правильный: dmesg | grep "usb" и используйте номер после "usb", например: usb 2-4.4: SerialNumber: A0848020 вы будете использовать: /sys/bus/usb/devices/2-4.4/power/. . Также убедитесь, что устройство не используется. Я создал скрипт, чтобы упростить этот процесс

Есть ли способ сохранить эту конфигурацию, чтобы при каждом подключении она не возвращалась к настройкам по умолчанию? У меня есть устройство, для которого мне нужно включить управление питанием, чтобы оно могло заряжаться.

PowerTOP от Intel позволяет переключать устройства, такие как периферийные USB-устройства, в режиме реального времени. Они называются «настраиваемыми».

  • Перейдите к разделу "Настройки".
  • Прокрутите вниз до своего устройства.
  • Нажмите Enter, чтобы переключить режим энергосбережения (хороший/плохой)

введите здесь описание изображения

Обратите внимание, что "Плохо" означает, что устройство всегда включено. При переключении на «Хорошо» устройство выключится по истечении предустановленного времени неактивного сохранения (по умолчанию 2000 мс).

Подробнее о том, как сделать эти изменения постоянными, см. в документации PowerTOP.
Он генерирует для вас сценарии конфигурации (почти так, как описано другими авторами в этой теме).

ПРИМЕЧАНИЕ. Эти сценарии не влияют на питание разъема USB (которое всегда включено).
Они отправляют протокол драйвера только для активации и деактивации устройства.

Если вы хотите контролировать питание контактов, вы можете использовать либо поддерживаемый интеллектуальный USB-концентратор, либо, что еще лучше, микроконтроллер.

Отлично! :D Я думаю, что это самый удобный способ сделать это (хотя на низком уровне он выполняет те же операции, что и в других ответах). Спасибо, и пусть ваш ответ достигнет вершины;)

Я нашел следующие решения, которые работают, по крайней мере, для правильно настроенного чипа USB-концентратора Terminus FE 1.1:

1.Чтобы отключить питание всех USB-портов хаба, вы можете отвязать хаб от ядра, используя:

чтобы снова включить питание - вы можете снова привязать его с помощью

2. Переключение питания на каждом порту по отдельности сложнее: я смог использовать hubpower для управления каждым портом, но у него есть и обратная сторона: hubpower сначала отключает usbdevfs, что приводит к отключению всех USB-устройств от системы, в как минимум на убунту:

С отключенным ioctl я смог отключить питание отдельного порта, не отсоединяя все устройства, но питание сразу же снова включается (вероятно, из-за того, что ядро ​​​​видит неинициализированное устройство), что приводит к тому, что USB-устройство просто выполняет «холодный перезапуск». что я вообще хотел сделать. Мой пропатченный концентратор здесь

Подтверждено, что записи привязки/отвязки работают с ядром Linux 2.6.34, набором микросхем ICH8 и Ubuntu 10.04.

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


В Linux вам нужно либо запустить его от имени пользователя root (под sudo), либо настроить разрешения устройства udev. Также возможно, что к вашему хосту Linux не подключены совместимые концентраторы.

Я попробовал это на концентраторе моего компьютера, и программа показывает, что питание порта отключено, но светодиод подключенного устройства все еще горит. Так что, видимо, в порту есть какая-то сила. (Версия 2.1.0)

Вкратце: я использовал USB-реле, чтобы разомкнуть/замкнуть VCC другого USB-кабеля.


подходит для Ubuntu


Это также единственное решение, которое помогло мне выключить планшет Wacom Intuos5 touch M, не отключая его от сети (на Fedora 28)

Причина, по которой люди задают такие вопросы, связана с ужасной – действительно «ЗЛО» – USB Auto-Suspend «функция».

Автоматическая приостановка отключает питание «незанятого» USB-устройства, и если драйвер устройства не поддерживает эту функцию должным образом, устройство может стать недоступным. Таким образом, включение/выключение USB-порта является признаком проблемы, а не проблемой самой по себе.

Я покажу вам, как ГЛОБАЛЬНО отключить автоматическую приостановку, избавив от необходимости вручную включать и выключать порты USB:

Короткий ответ:

Вам НЕ нужно редактировать "autosuspend_delay_ms" по отдельности: автоотключение USB можно отключить глобально и ПОСТОЯННО с помощью следующих команд:

ОДНАКО мое тестирование показывает, что настройка usbcore.autosuspend=-1 в /etc/default/grub, как показано ниже, может использоваться в качестве ГЛОБАЛЬНОГО переключателя для функции автоматической приостановки USB. Вам НЕ нужно редактировать отдельные файлы "autosuspend_delay_ms".

В том же документе, указанном выше, указано, что значение "0" ВКЛЮЧЕНО, а отрицательное значение ОТКЛЮЧЕНО:

В аннотированном снимке экрана Ubuntu 18.04 ниже, иллюстрирующем, как мои результаты были достигнуты (и воспроизводимы), обратите внимание, что по умолчанию установлено значение "0" (включено) в < em>autosuspend_delay_ms.

Затем обратите внимание, что ТОЛЬКО после установки usbcore.autosuspend=-1 в Grub эти значения теперь отрицательные (отключены) после перезагрузки. Это избавит меня от необходимости редактировать отдельные значения, и теперь я могу отключить автоматическую приостановку USB в сценарии.

screengrab: автоматически приостанавливать значения до и после глобального редактирования

Надеюсь, это сделает отключение автоприостановки USB немного проще и более доступным для сценариев.

Вы можете просто убедиться, что ваша веб-камера, обычно подключенная к внутренней шине USB, выключена.

В моем случае веб-камера моего ноутбука периодически выходит из строя. Это привело к зависанию моего ноутбука при выключении, пока ядро ​​пытается выключить устройство.

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

Определите порт

Первым шагом было определение порта камеры.

Вы можете просматривать журналы dmesg, просматривая все записи USB, пока не найдете веб-камеру, например,

Здесь вы можете видеть, что моя веб-камера была подключена к шине 1 — порту 1 на 6-м устройстве на этом порту, например. 1–1,6

Однако в Linux есть несколько команд и файловая система псевдо "sys", которые упрощают работу, например, вы можете использовать lsusb

Если мы пройдемся по этому дереву, то увидим, что шина 01. Порт 1 — это USB-концентратор, а порт 6 на концентраторе — это видеоустройство, которым является моя веб-камера… буквальная строка 1-1.6, которая мне понадобится, чтобы отключить порт веб-камеры.

Лучше всего просмотреть псевдофайловую систему sys, которая предоставляет информацию обо всех устройствах, подключенных к системе ядра.

Здесь мы видим, что файл /sys/bus/usb/devices/1-1.6/product содержит веб-камеру SC-13HDL11624N

Таким образом, в данном случае нам нужно USB-устройство (или порт) 1-1.6 .

Поскольку веб-камера подключена к внутреннему USB-концентратору, она всегда будет указана по одному и тому же адресу. Это полезно, поскольку означает, что я могу жестко закодировать 1-1.6 там, где мне это нужно, а не анализировать вывод команды. .

Отключите питание веб-камеры

Теперь, когда мы знаем номер USB-устройства, можно просто выключить камеру, используя файловую систему sys.

Записывая значения в «файлы» в файловой системе sys, вы можете влиять на устройства, которые представляет файл. Очевидно, что для этого вам нужно быть пользователем root или пользователем с разрешениями sudo.

В Ubuntu

Мы можем отправить команду USB-драйверу, чтобы отвязать порт,

Обязательно замените «1-1.6» на любой USB-порт, к которому подключена ваша веб-камера (см. выше).

Чтобы снова включить его,

Эта команда поместила имя USB-устройства «1-1.6» в специальный разъем, который действует как командный API для драйвера USB, другими словами, вместо того, чтобы напрямую управлять питанием устройства, мы просим драйвер USB сделайте это для нас.

Запускать при запуске

Теперь у меня есть контроль над портами USB. Я хочу отключить этот порт при запуске. Ubuntu использует демон cron anacron, который позволяет использовать специальный синтаксис @reboot для подключения команды к последовательности перезагрузки.

Простое редактирование корневого crontab

А затем добавьте следующее

Снова измените «1-1.6» на номер вашего USB-устройства.

И все. Мой ноутбук теперь может выключаться без зависаний.

Автор: Karl Roberts, 9 января 2017 г., 4:46 linux, ubuntu, usb, веб-камера


Для этого есть два способа. Таким образом, первый метод предназначен для ядер после 2.6.32, а второй — для более старых.

Чтобы просмотреть версию ядра, просто введите:

найдите свое USB-устройство, не важно, что это USB-флешка, Yubikey, USB-накопитель:

Который расположен в 2-1.1 (часть дерева, где находится устройство 5)
Первый метод (более новое ядро)

Чтобы отключить, просто эхо-адрес:

вот результат из системного журнала:

20 февраля 12:03:27 ядро ​​vgsms6: [1734.993667] cdc_ether 2 - 1.1: 1.0 eth2: отменить регистрацию 'cdc_ether' usb - 0000: 00: 1d.0 - 1.1, CDC Ethernet Device

К сожалению, это устройство все еще было видно в lsusb, поэтому я отключил там весь usb-концентратор (2-1), и вуаля, USB-устройство исчезло.

Чтобы включить его, повторите тот же адрес для «привязки» части, например:

Второй способ (старое ядро)
Вам нужно перейти к устройствам:

Адреса будут перечислены аналогично:

lrwxrwxrwx 1 root root 0 Feb 20 11 : 34 1 - 0 : 1.0 - > gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1a.0/usb1/1-0:1.0

lrwxrwxrwx 1 root root 0 Feb 20 11 : 34 1 - 1 - & gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1a.0/usb1/1-1

lrwxrwxrwx 1 root root 0 Feb 20 11 : 34 1 - 1 : 1.0 - > gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1a.0/usb1/1-1/1-1:1.0

lrwxrwxrwx 1 root root 0 Feb 20 11 : 34 2 - 0 : 1.0 - > gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1d.0/usb2/2-0:1.0

lrwxrwxrwx 1 root root 0 Feb 20 11 : 34 2 - 1 - & gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1d.0/usb2/2-1

lrwxrwxrwx 1 root root 0 Feb 20 12 : 34 2 - 1.1 - > gt ; . . / . . / . . /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1

lrwxrwxrwx 1 root root 0 Feb 20 12 : 34 2 - 1 : 1.0 - > gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0

lrwxrwxrwx 1 root root 0 Feb 20 12 : 34 2 - 1.1 : 1.0 - > gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0

lrwxrwxrwx 1 root root 0 Feb 20 12 : 34 2 - 1.1 : 1.1 - > gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1

lrwxrwxrwx 1 root root 0 Feb 20 12 : 34 2 - 1.5 -> gt ; . . / . . / . . /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5

lrwxrwxrwx 1 root root 0 Feb 20 12 : 34 2 - 1.5 : 1.0 - > gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1d.0/usb2/2-1/2-1,5/2-1,5:1,0

lrwxrwxrwx 1 root root 0 Feb 20 11 : 34 usb1 -> gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1a.0/usb1

lrwxrwxrwx 1 root root 0 Feb 20 11 : 34 usb2 -> gt ; . . / . . / . . /устройства/pci0000:00/0000:00:1d.0/usb2

В нашем примере перейдите к 2-1.1/power (полный путь /sys/bus/usb/devices2-1.1/power)

чтобы выключить устройство:

Поделиться:

Вот так:

Связанные

Комментарии (7)

~ $ sudo echo '1-1.2' > /sys/bus/usb/drivers/usb/unbind
-bash: /sys/bus/usb/drivers/usb/unbind: Отказано в доступе

Спасибо, наконец-то заработало! :)

Анонимно: ваша команда выполняет «echo ‘1-1.2’» под sudo, а затем снова пытается записать это в /sys/bus/usb/drivers/usb/unbind от имени обычного пользователя. Попробуйте это: echo ‘1-1.2″ | sudo tee /sys/bus/usb/drivers/usb/unbind

Вы также можете использовать переключаемый концентратор USB.

но это дороже :)

Умный способ оставить обратную ссылку.
Я поощряю проекты с открытым исходным кодом :)

Обычно бюджет зависит от требований. Для простого «неисправного» аварийного сброса USB-устройства я бы использовал свой способ (я не ожидал, что что-то сломается, не так ли?).

Но для повседневного планового включения/выключения я бы рассмотрел такое устройство.
Спасибо, что поделились своим продуктом.
Очень полезная штука, у нее должна быть более надежная коммутационная способность, и она более мощная, чем USB-порт сервера.

Вам следует подумать о том, чтобы сделать концентратор большего размера, так как кажется возможным использовать его в качестве источника питания для USB-устройств (сила тока 2 Ампер).
Например внешний usb 2.5 hdd уже занял бы 2 порта, оставив только один свободным.
Или сделайте управляемый через USB переключатель источника питания с реле, он идеально сочетается с этим USB-хабом :)

Читайте также: