MyTetra Share
Делитесь знаниями!
Как переподключить все USB-устройства в Linux
Время создания: 24.04.2023 13:28
Автор: Xintrea
Текстовые метки: linux, usb, сбросить, подключить, переподключить, зависло, зависание
Раздел: Компьютер - Linux - Драйвера и устройства
Запись: xintrea/mytetra_syncro/master/base/1682332096w7nm98qffg/text.html на raw.github.com

Драйвера ядра в Linux, отвечающие за USB-стек и обслуживание USB-устройств постоянно изменяются и дорабатываются. Это приводит к тому, что даже в стабильном дистрибутиве Linux в коде ядра может оказаться недотестированный код, который с некоторыми устройствами работает нестабильно. И поэтому такие устройства могут время от времени "отваливаться".


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


Для этого можно использовать следующий bash-скрипт, запускаемый от пользователя root:



#!/bin/bash


for port in $(lspci | grep USB | cut -d' ' -f1); do

echo -n "0000:${port}"| sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind;

sleep 3;

echo -n "0000:${port}" | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind;

sleep 4;

done



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


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


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования