Tắt nguồn cho cổng usb. Hoặc tắt nguồn cho toàn bộ hệ thống con usb


28

Tôi có một đèn usb mà tôi đặc biệt mua để tắt nó theo chương trình tại một thời điểm nhất định, do đó tôi cần phải rút nguồn điện tới cổng usb của nó.

Tôi tin rằng tôi có một trung tâm usb tại usb6. Đèn được kết nối với một trong các cổng trong trung tâm này:

#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

Đây là những gì tôi đã thử:

Hai giải pháp ở đây , gợi ý đầu tiên:

echo disabled > /sys/bus/usb/devices/usb1/power/wakeup 
echo suspend > /sys/bus/usb/devices/usb1/power/level  # turn off

nhưng tôi nhận được write error: Invalid argumentkhi cố gắng viết thư cho /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

Giải pháp thứ hai:

sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'

tắt nguồn cho thiết bị trung tâm usb.

Tôi cũng đã cố gắng làm theo điều này :

Nhưng đầu ra của lsusb -tchỉ bị treo:

$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C

Điều này ngăn tôi sử dụng phương pháp này để có được phần '2-1.1' cho điều này:

echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind

Có một cách khác để có được thông tin này?

Ngoài ra, có cách nào để tắt nguồn cho toàn bộ hệ thống con usb không? Một cái gì đó như thế modprobe -r usb_etcnào?

Nhân của tôi là:

$uname -r
3.2.0-4-amd64

lỗi cú pháp nào? trong trường hợp này, không cần trích dẫn các chuỗi đơn giản 'đình chỉ', 'bị vô hiệu hóa'. nếu bạn có thói quen trích dẫn, rất tốt cho bạn, nhưng trong trường hợp này thì không cần thiết.
dùng84207

Tôi đã cố gắng thực hiện lsusb -tcuộc gọi và tôi không tìm thấy bất cứ điều gì hữu ích trong thời gian tôi phải gỡ lỗi nó. Tôi thực sự không có thời gian để tìm lỗi trong lsub và thậm chí tôi không thể tái tạo nó ngay bây giờ, vì vậy có lẽ nó phụ thuộc vào các thiết bị được cắm. Tôi sẽ phải đợi về nhà để thử tái tạo nó.
dùng84207

Câu trả lời:


20

Bạn có thể sử dụng uhubctl - tiện ích dòng lệnh để điều khiển nguồn USB trên mỗi cổng cho các hub USB tương thích.

Nó chỉ hoạt động trên các hub hỗ trợ chuyển đổi nguồn trên mỗi cổng, nhưng lưu ý rằng nhiều bo mạch chủ hiện đại có các hub USB hỗ trợ tính năng này.

Để biên dịch:

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

Để liệt kê trạng thái của tất cả các trung tâm, vị trí và cổng của chúng có thể được kiểm soát bởi uhubctl:

uhubctl

Để tắt nguồn trên cổng 5 của hub tương thích duy nhất:

uhubctl -a 0 -p 5

Nếu bạn có nhiều hơn một hub tương thích được kết nối, hãy sử dụng -lđể chỉ định vị trí trung tâm để kiểm soát nó:

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

Để tắt nguồn sau đó bật:

uhubctl -a 2 -p 5

Lưu ý rằng các hub USB 3.0 cũng được hỗ trợ và khá nhiều hub USB 3.0 mới thực sự hoạt động tốt.

Đọc thêm ở đây .

Tiết lộ - Tôi là tác giả của uhubctl.


Một chút thông tin sẽ tốt đẹp. Đặc biệt bởi vì bạn là tác giả và nó không phải là một ví dụ tiêu chuẩn về cách sử dụng nó, nếu có bất kỳ khả năng / giới hạn nào, thì rủi ro nếu có, các câu trả lời chỉ liên kết không được ưa thích.
Zachary Brady

2
Chà, sao chép / dán toàn bộ tập tin README dường như không phải là ý tưởng hay với tôi. Nó có tất cả hãy cẩn thận giải thích.
mvp

Không, toàn bộ readme sẽ là quá mức. Làm thế nào bạn có thể sử dụng chương trình để giải quyết vấn đề đặt ra trong câu hỏi. Và nếu có bất kỳ cảnh báo nào cho trường hợp sử dụng cụ thể đó, không phải toàn bộ ứng dụng. Xin lỗi nếu tôi không rõ ràng trong bình luận đầu tiên của tôi.
Zachary Brady

1
FYI: Phương pháp này không hoạt động đối với dòng bộ điều khiển máy chủ PCIe-USB của Renesas. :) Cảm ơn.
Wossname

Cảm ơn @Wossname. Bạn có phiền khi thêm nó dưới dạng vấn đề mới tại github.com/mvp/uhubctl/issues không? Tôi sẽ cập nhật danh sách các thiết bị được hỗ trợ.
mvp

20

Xem Kiểm soát nguồn cung cấp USB (bật / tắt) bằng linux , phiên bản ngắn, để biết các "hạt nhân" mới hơn không hoạt động nữa:

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

Nhưng nó không thực sự cắt điện, nó báo hiệu cho thiết bị tắt nguồn, tùy thuộc vào thiết bị để thực hiện quản lý năng lượng và thực hiện đúng.

Bạn có rất nhiều chi tiết trong tài liệu chính thức trong kernel, ở đó nó giải thích các tệp khác nhau /sys/bus/usb/devices/.../power/và cách quản lý các thiết bị và cổng.

Đối với những thứ không phải là thiết bị usb thực sự (đèn usb của bạn có hiển thị trong lsusb không?) Bạn không gặp may, tôi đã thử với đèn usb và với bộ ghi nhật ký sạc pin và truyền dữ liệu qua usb cho thấy lên như một usb cp210x để nối tiếp, và cũng không tắt nguồn. Tôi có thể "ngắt kết nối" gps với echo '5-4.6' > /sys/bus/usb/drivers/usb/unbindvà kết nối lại vớiecho '5-4.6' > /sys/bus/usb/drivers/usb/bind nhưng dây sạc pin luôn bật.

Nhưng có vẻ như một số trung tâm làm điều đó đúng .


0

Đó là KHÔNG cần thiết để cá nhân chỉnh sửa " autosuspend_delay_ms " tập tin.

USB autosuspend có thể bị vô hiệu hóa trên toàn cầuliên tục với:

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

update-grub

systemctl reboot

Chỉ mất vài giây để kiểm tra bản sửa lỗi được đề xuất và xác thực tính chính xác của nó.

Ảnh chụp màn hình chú thích Ubuntu 18.04 bên dưới minh họa việc sửa đổi nó như được mô tả ở trên, điều này dẫn đến việc khởi động lại máy chủ với TẤT CẢ cài đặt tự động gửi USB bị vô hiệu hóa:

Bản demo Ubuntu 18.04 trên toàn cầu vô hiệu hóa USB autosuspend

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.