GNU/Linux >> Tutoriels Linux >  >> Linux

Couper l'alimentation du port USB. Ou éteignez l'alimentation de tout le sous-système USB ?

J'ai une lampe USB que j'ai spécifiquement achetée afin de l'éteindre par programmation à un certain moment, donc je dois couper l'alimentation de son port USB.

Je crois que j'ai un hub usb à usb6. La lampe est connectée à l'un des ports de ce hub :

#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

Voici ce que j'ai essayé :

Deux solutions sont ici, la première suggère :

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

mais j'obtiens une write error: Invalid argument lorsque vous essayez d'écrire dans /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

La deuxième solution :

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

qui éteint l'alimentation du périphérique USB-Hub.

J'essayais aussi de suivre ceci :

Mais la sortie de lsusb -t se bloque simplement :

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

Ce qui m'empêche d'utiliser cette méthode pour obtenir la partie "2-1.1" :

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

Existe-t-il un autre moyen d'obtenir ces informations ?

Sinon, existe-t-il un moyen de couper l'alimentation de l'ensemble du sous-système USB ? Quelque chose comme modprobe -r usb_etc ?

Mon noyau est :

$uname -r
3.2.0-4-amd64

Réponse acceptée :

Vous pouvez utiliser mon outil uhubctl - utilitaire de ligne de commande pour contrôler l'alimentation USB par port pour les concentrateurs USB compatibles.

Cela ne fonctionne que sur les concentrateurs qui prennent en charge la commutation d'alimentation par port, mais notez que de nombreuses cartes mères modernes ont des concentrateurs USB qui prennent en charge cette fonctionnalité.

Pour compiler :

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

Pour installer à l'échelle du système en tant que /usr/sbin/uhubctl :

sudo make install

Pour répertorier l'état de tous les hubs, leurs emplacements et ports pouvant être contrôlés par uhubctl :

sudo uhubctl

(vous pouvez éviter d'utiliser sudo si vous configurez les autorisations USB udev).

Connexe :Pourquoi la suppression d'un fichier sur une clé USB ne libère-t-elle pas d'espace ?

Pour éteindre le port 5 d'un seul concentrateur compatible :

sudo uhubctl -a 0 -p 5

Si vous avez plus d'un hub compatible connecté, utilisez -l pour spécifier l'emplacement du hub pour le contrôler :

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

Pour éteindre puis rallumer :

sudo uhubctl -a 2 -p 5

Notez que les concentrateurs USB 3.0 sont également pris en charge et que bon nombre de nouveaux concentrateurs USB 3.0 fonctionnent bien.

En savoir plus ici.


Linux
  1. Linux USB :allumer et éteindre l'alimentation ?

  2. Désactiver le cache de fichiers Linux

  3. Comment éteindre l'écran avec un raccourci sous Linux ?

  4. USB Type-C, comment la direction de l'alimentation électrique est-elle contrôlée ?

  5. Comment puis-je cloner tout mon système d'exploitation sur une clé USB amorçable ?

3 façons d'éteindre Debian

Comment désactiver la navigation dans les répertoires sur Apache et Nginx

Comment désactiver le retour à la ligne en moins

Comment vérifier la puissance qu'un port USB peut fournir ?

Obtenir la consommation d'énergie d'un périphérique USB

Quand désactiver TCP SACK ?