Włącz / wyłącz porty USB

18

Czy jest możliwe włączenie / wyłączenie określonego portu USB za pomocą terminala w Ubuntu?

lsusb wyświetla następujący wynik:

Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 2232:1020
Bus 002 Device 009: ID 0bc2:a013 Seagate RSS LLC
Bus 002 Device 003: ID 0a5c:219c Broadcom Corp.

Seagate to mój zewnętrzny dysk twardy. Czy mogę wyłączyć zasilanie w terminalu?

Próbowałem sterować zasilaczem USB (włączanie / wyłączanie) w systemie Linux . Ale jestem zdezorientowany co do tego, co należy zastąpić zamiast usbX.

ciekawy_koder
źródło

Odpowiedzi:

8

Wszystkie poprzednie odpowiedzi mówią o zawieszeniu USB mechanizmie , tj. O „logicznym wyłączeniu”, nigdy nie spowodują fizycznego odcięcia VBUS + 5 V od portu USB.

Tylko kilka koncentratorów może faktycznie przeciąć VBUS, jak opisano tutaj .

Hubpower narzędzie może go (jeśli obsługuje ją hub) zrobić.

rustyx
źródło
7

Po napotkaniu tego samego problemu stwierdziłem, że polecenia powinny być wprowadzane inaczej, aby „sudo” odpowiednio stosowało prawa.

Użyj polecenia „tee”.

echo 0 | sudo tee /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms

zastosuje prawa roota do komendy „tee”, która zapisze 0 w określonym pliku, zastępując wszystko, co już tam jest. Aby dołączyć, użyj polecenia tee z opcją -a.

dla informacji zobacz stronę man tee

JohnMoore
źródło
2
teeKomenda będzie miała efekt uboczny również drukowania na ekranie. Jeśli chcesz, dd of=/sys/bus/...zapisze tylko do pliku i nigdzie indziej.
Brandon Rhodes,
4

Właściwie usbXto nic innego jak numery portów USB, gdzie Xoznacza liczbę podobny 1albo 2i tak dalej ... Na przykład, usb1a usb2dla portów 1 i 2 . Ogólnie laptop może mieć trzy lub cztery porty USB z portami USB 2.0 i USB 3.0.

W Ubuntu usb1, usb2... usbXsą linki do /sys/devices/pci000:00/*. Aby dobrze to zrozumieć, uruchom następujące polecenie:

ls -l /sys/bus/usb/devices/

Aby włączyć / wyłączyć porty USB, usbXzostanie zastąpione przez, usb1gdy chcesz włączyć / wyłączyć USB Port Number 1(lub odnieść się do stosu wymiany):


Edycja: Podziękowania dla Stefana Dencheva za wskazanie poprawnego echa tekstu do pliku za pomocą sudo . (Sprawdź także jego komentarz.) Nie powinieneś teraz otrzymywać wiadomości o odmowie pozwolenia .

sudo sh -c "echo '0' > /sys/bus/usb/devices/usb1/power/autosuspend_delay_ms"
sudo sh -c "echo 'auto' > /sys/bus/usb/devices/usb1/power/control"

Po wyświetleniu lsusbwyniku wygląda na to, że Twoje urządzenie Seagate jest podłączone Port No. 2, więc musisz je wyłączyć usb2. Wtedy polecenia będą:

sudo sh -c "echo '0' > /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms"
sudo sh -c "echo 'auto' > /sys/bus/usb/devices/usb2/power/control"
Saurav Kumar
źródło
Dzięki. Jeśli spróbuję, echo "0" > "/sys/bus/usb/devices/usb2/power/autosuspend_delay_ms"wynik jest następującybash: /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms: Permission denied
ciekawy_koder
następnie spróbuj sudozobaczyć, co się stanie ..
Saurav Kumar,
Spróbował tego. Wciąż ten sam błąd.
curious_coder
Właściwie nie próbowałem włączać / wyłączać żadnych portów w Linuksie. Moją dewizą było wyjaśnienie usbXproblemu. Jeśli masz jasność co do poleceń, które chwytałeś, StackOverflowtylko powinieneś spróbować. W każdym razie teraz jestem również zainteresowany, aby wiedzieć, jakie jest właściwe polecenie włączenia / wyłączenia portów. Odpowiem ci wkrótce, kiedy to dla mnie zadziała. Poinformuj, że odłączasz urządzenie i spróbuj ponownie. lub wypróbuj pierwszą odpowiedź podaną na stackoverflow.
Saurav Kumar,
1
sudo sh -c "echo 'on' >> /sys/bus/usb/devices/usb4/power/control"
UIlrvnd
1

udisksctlma power-offflagę, której sugeruję używać w połączeniu z unmount

Z man udisksctl:

power-off
           Arranges for the drive to be safely removed and powered off. On the
           OS side this includes ensuring that no process is using the drive,
           then requesting that in-flight buffers and caches are committed to
           stable storage. The exact steps for powering off the drive depends
           on the drive itself and the interconnect used. For drives connected
           through USB, the effect is that the USB device will be deconfigured
           followed by disabling the upstream hub port it is connected to

Próbny

Oto ja odmontowuję napęd USB, a następnie go wyłączam

testdir:$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 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 001 Device 009: ID 154b:007a PNY 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

testdir:$ lsblk                                                                
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111.8G  0 disk 
└─sda1   8:1    0 111.8G  0 part /
sdb      8:16   1    30G  0 disk 
└─sdb1   8:17   1    30G  0 part /media/xieerqi/6A32C4555E1C5B4D
sr0     11:0    1  1024M  0 rom  

testdir:$ udisksctl unmount -b /dev/sdb1 && udisksctl power-off -b /dev/sdb1
Unmounted /dev/sdb1.

testdir:$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 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 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

testdir:$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111.8G  0 disk 
└─sda1   8:1    0 111.8G  0 part /
sr0     11:0    1  1024M  0 rom  

testdir:$ 
Sergiy Kolodyazhnyy
źródło