Ports USB marche / arrêt

18

Est-il possible d'activer / désactiver un port USB spécifique en utilisant le terminal dans Ubuntu?

lsusb affiche le résultat suivant:

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 est mon disque dur externe. Puis-je l'éteindre dans le terminal?

J'ai essayé de contrôler une alimentation USB (marche / arrêt) avec Linux . Mais je suis confus quant à ce qui devrait être remplacé à la place de usbX.

curious_coder
la source

Réponses:

8

Toutes les réponses précédentes parlent d'un mécanisme de suspension USB , c'est-à-dire d'une "mise hors tension logique", elles ne couperont jamais physiquement le VBUS + 5V du port USB.

Seuls quelques concentrateurs peuvent réellement couper VBUS comme décrit ici .

L' outil hubpower peut le faire (si le hub le prend en charge).

rustyx
la source
7

Après avoir rencontré le même problème, j'ai constaté que les commandes devaient être entrées différemment afin que "sudo" applique les droits de manière appropriée.

Utilisez la commande "tee".

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

appliquera les droits root à la commande "tee" qui écrira le 0 dans le fichier spécifié, remplaçant tout ce qui existe actuellement. Pour ajouter, utilisez la commande tee avec l'option -a.

pour info voir la page de manuel de tee

JohnMoore
la source
2
La teecommande aura pour effet secondaire d'imprimer également à l'écran. Si vous le souhaitez, dd of=/sys/bus/...n'écrira que dans le fichier, et nulle part ailleurs.
Brandon Rhodes
4

En fait, ce usbXn'est rien d'autre que les numéros de ports USB où Xdésigne le nombre comme 1ou 2et ainsi de suite ... Par exemple, usb1et usb2pour les ports 1 et 2 . En général, un ordinateur portable peut avoir trois ou quatre ports USB avec des ports USB 2.0 et USB 3.0.

Dans Ubuntu, usb1, usb2... usbXsont les liens vers /sys/devices/pci000:00/*. Pour bien le comprendre, exécutez cette commande:

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

Donc, pour activer / désactiver les ports USB usbXseront remplacés par usb1lorsque vous souhaitez activer / désactiver USB Port Number 1(ou se référer à Stack Exchange):


Edit: Merci à Stefan Denchev de nous indiquer la bonne façon d' écho du texte dans un fichier en utilisant sudo . (Vérifiez également son commentaire.) Vous ne devriez pas recevoir le message d' autorisation refusée maintenant.

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"

Après avoir vu votre lsusbrésultat, il semble que votre appareil Seagate soit connecté Port No. 2, vous devez donc le désactiver usb2. Les commandes seraient alors:

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
la source
Merci. Si j'essaye, echo "0" > "/sys/bus/usb/devices/usb2/power/autosuspend_delay_ms"la sortie estbash: /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms: Permission denied
curious_coder
puis essayez de sudovoir ce qui se passe ..
Saurav Kumar
Essayé. Toujours la même erreur.
curious_coder
En fait, je n'ai pas essayé d'activer / désactiver des ports sous Linux. Ma devise était de vous expliquer clairement le usbXproblème. Si vous êtes très clair sur les commandes que vous avez saisies, StackOverflowalors vous seul devriez essayer. De toute façon maintenant, je suis également intéressé de savoir quelle est la commande réelle pour activer / désactiver les ports. Je vous répondrai bientôt, quand cela fonctionnera pour moi. Dites ensuite que vous débranchez votre appareil et réessayez. ou essayez la première réponse donnée à stackoverflow.
Saurav Kumar
1
sudo sh -c "echo 'on' >> /sys/bus/usb/devices/usb4/power/control"
UIlrvnd
1

udisksctla un power-offdrapeau, que je vous suggère d'utiliser en conjonction avec unmount

Du 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

Démo

Voici que je démonte ma clé USB et que je l'éteins

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
la source