web-dev-qa-db-fra.com

Allumer / éteindre les ports USB

Est-il possible d'activer/désactiver un port USB spécifique à l'aide d'un 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é https://stackoverflow.com/questions/4702216/controlling-a-usb-power-supply-on-off-with-linux . Mais confondu ce qui devrait être remplacé à la place de usbX

17
curious_coder

Toutes les réponses précédentes parlent d’un mécanisme de suspension USB , c’est-à-dire un "arrêt logique", ils ne couperont jamais physiquement le VBUS + 5V du Port USB.

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

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

7
rustyx

Après avoir rencontré le même problème, j’ai trouvé que les commandes devaient être entrées différemment pour 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é, en remplaçant tout ce qui se trouve actuellement. Pour ajouter, utilisez la commande tee avec l'option -a.

pour plus d'informations, consultez la page de manuel de tee

7
JohnMoore

En fait, usbX n’est autre que les numéros de ports USBX désigne un nombre tel que 1 ou 2 et ainsi de suite. Par exemple, usb1 et usb2 pour les ports 1 et 2. En général, un ordinateur portable peut avoir 3 ou 4 ports USB avec les ports USB 2.0 etUSB 3.0.

Dans ubunty usb1, usb2...usbX sont les liens vers /sys/devices/pci000:00/*. Pour bien le comprendre, lancez cette commande:

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

Donc, activer/désactiver les ports USB usbX sera remplacé par usb1 lorsque vous souhaitez activer/désactiver USB Port Number 1 (ou vous référer à StackExchange):

Modifier

Merci à Stefan Denchev de dire le bon chemin pour echo du texte dans un fichier en utilisant Sudo. (Vérifiez également son commentaire.) Vous ne devriez pas recevoir le message permission denied 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 résultat lsusb, il semble que votre périphérique Seagate soit connecté à Port No. 2. Vous devez donc désactiver usb2. Les commandes sont les suivantes:

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"

J'espère que cela fonctionne et vous pouvez comprendre maintenant.

4
Saurav Kumar

udisksctl a power-off flag, que je vous suggère d’utiliser en conjonction avec unmount

À partir 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 moi en train de démonter mon jumpdrive USB puis de l'éteindre

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:$ 
1