Voici un exemple avec une souris sans fil USB Logitech sous linux.
Lisez le paragraphe pertinent de "/proc/bus/usb/devices" en fonction de vos périphériques "Vendor" (identifiant du vendeur) et "ProdID" (identifiant du produit) ou "Manufacturer" et "Product" (toutes ces valeurs sont constantes pour chaque appareil).
cat /proc/bus/usb/devices
(premier paragraphe avec l'appareil sous tension, deuxième paragraphe avec le même appareil hors tension mais toujours branché)
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=046d ProdID=c50e Rev=25.10
S: Manufacturer=Logitech
S: Product=USB RECEIVER
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 70mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=046d ProdID=c50e Rev=25.10
S: Manufacturer=Logitech
S: Product=USB RECEIVER
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 70mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
Vous avez besoin de deux variables ici. Elles sont situées dans la ligne "T :" (première ligne du paragraphe). Ces variables sont : Bus (Bus=01 dans cet exemple) Cnt (Cnt=01 dans cet exemple)
Vous devrez ajouter "1" (un arithmétique) à "Cnt" pour obtenir le rang Rank=Cnt+1 (c'est une fonction mathématique, Rank=2 dans cet exemple)
Donc le dispositif que vous recherchez est la chaîne suivante : Bus-Rank (ce n'est pas une fonction mathématique, c'est une chaîne, 1-2 dans cet exemple)
Pensez aussi au "C : Ligne " ". Elle contient des informations sur la puissance (courant) de l'appareil. S'il y a un astérisque dans "C : " (comme dans notre 1er exemple) alors l'appareil est sous tension. Si ce n'est pas le cas (" C : "), alors l'appareil est " plus ou moins " hors tension, ce qui signifie qu'il y a toujours un petit courant lorsqu'un appareil est branché, sinon nous ne serions pas en mesure de lire toutes ces informations.
Attention enfin à la ligne "I :". Si le champ "I:*" contient un astérisque (comme dans notre 1er exemple), alors il y a une entrée, depuis ou vers l'appareil, je ne suis pas sûr, peut-être les deux. Le champ de la dernière ligne contient le pilote utilisé ("usbhid" dans notre 1er exemple).
Nous sommes prêts à mettre notre appareil sous tension :
éteindre
echo -n "Bus-Rank" > /sys/bus/usb/drivers/usb/unbind
echo -n "1-2" > /sys/bus/usb/drivers/usb/unbind (in our example)
mise en marche
echo -n "Bus-Rank" > /sys/bus/usb/drivers/usb/bind
echo -n "1-2" > /sys/bus/usb/drivers/usb/bind (in our example)
Ce qui suit est un simple bash script "USBMS" (USB Mouse Switch) qui contrôle la puissance du dispositif dans notre exemple ci-dessus. Il n'est pas très dynamique et il utilise les constantes "Product" et "Manufacturer" pour localiser le paragraphe pertinent de "/proc/bus/usb/devices". Vous devriez plutôt utiliser les constantes "Vendor" (identifiant du fournisseur) et "ProdID" (identifiant du produit). Il vérifie également l'état d'alimentation du périphérique. Exécuter en tant que super-utilisateur.
Commande : ./USBMS action
paramètre : action = "off" ou "0" pour mettre hors tension - action = "on" ou "1" pour mettre sous tension (sans les guillemets)
#!/bin/bash
USBmouseProduct="USB RECEIVER"
USBmouseManufacturer="Logitech"
signal=$1
nr3=$(awk '/Product='"$USBmouseProduct"'/ {print NR}' /proc/bus/usb/devices)
nr3=$(expr $nr3 + 0)
nr2=$(awk '/Manufacturer='"$USBmouseManufacturer"'/ {print NR}' /proc/bus/usb/devices)
nr2=$(expr $nr2 + 0)
nr1=$(expr $nr2 - 3)
nr4=$(expr $nr3 + 1)
nrdiff=$(expr $nr3 - $nr2)
[ $nr3 != 0 -a $nr2 != 0 -a $nrdiff = 1 ] && (
usbmbus0=$(awk 'NR=='$nr1' {print $2}' /proc/bus/usb/devices | awk -F= '{print $2}')
usbmbus=$(expr $usbmbus0 + 0)
usbmdev=$(awk 'NR=='$nr1' {print $8}' /proc/bus/usb/devices)
usbmrank=$(awk 'NR=='$nr1' {print $5}' /proc/bus/usb/devices | awk -F= '{print $2}')
usbmrank=$(expr $usbmrank + 1)
usbmbusrank="$usbmbus""-""$usbmrank"
usbmpower=$(awk 'NR=='$nr4' {if ( $1=="C:" ) {print 0}; if ( $1=="C:*" ) {print 1}}' /proc/bus/usb/devices)
case $signal in
off|0)
[ $usbmpower = 1 ] && echo -n "$usbmbusrank" > /sys/bus/usb/drivers/usb/unbind
;;
on|1)
[ $usbmpower = 0 ] && echo -n "$usbmbusrank" > /sys/bus/usb/drivers/usb/bind
;;
esac
)
2 votes
Pardonnez mon ignorance, mais, BOC ?
0 votes
@JonHadley, BOC = Woot Bag of Crap. fr.wikipedia.org/wiki/Woot#Bag_of_Crap . Cherchez-le sur youtube pour des déballages très divertissants. J'essaie à chaque fois et je n'en ai pas eu un seul !
3 votes
La réponse semble être une mine d'informations sur la gestion de l'alimentation USB - premier résultat Google pour
ganged power switching
(sans guillemets).0 votes
Où les avez-vous achetés ? Vous avez trouvé d'autres solutions ?
1 votes
Oui, c'est possible, vérifiez github.com/mvp/uhubctl
0 votes
Fwiw, ce
usbreset.c
a fait l'affaire pour moi avec le clavier Razer Lycosa lorsqu'il a décidé que la touche 'o' devait être utilisée. pas travailler tout d'un coup.