Je sais que ce sujet a été discuté à plusieurs reprises, mais aucune des réponses ne m'a aidé. Pour mémoire, j'utilise Debian.
Le problème est le suivant: j'ai acheté une lampe LED alimentée par USB, ce qui est très simple et n'a même pas d'interrupteur marche/arrêt (cela fonctionne et est toujours allumé). Je veux pouvoir l'activer/le désactiver via la ligne de commande. Voici ce que j'ai essayé:
echo on > /sys/bus/usb/devices/usb1/power/level # turn on
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
c'est ce que j'ai trouvé sur de nombreux forums. Activer "marche", mais "suspendre" les rendements
-su: echo: write error: Invalid argument
pour chaque usbN. J'ai aussi essayé
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
qui ne donne pas d'erreur, mais ne fait rien non plus (encore une fois, pour chaque usbN)
en essayant
echo "usb1" > /sys/bus/usb/drivers/usb/unbind
ne fonctionne que pour les appareils plus "intelligents", comme le clavier, la souris ou la carte wifi usb. Ce que je veux dire, c'est que seuls les appareils tyhose sont éteints, les autres usbN ne donnent pas d'erreur, mais la lampe ne s'éteint jamais.
le contenu de/sys/bus/usb/devices/est
1-0:1.0 1-1:1.0 1-2:1.0 1-2:1.2 2-0:1.0 4-0:1.0 4-1:1.0 6-0:1.0 8-0:1.0 8-2:1.0 usb2 usb4 usb6 usb8
1-1 1-2 1-2:1.1 1-2:1.3 3-0:1.0 4-1 5-0:1.0 7-0:1.0 8-2 usb1 usb3 usb5 usb7
j'ai essayé de faire
echo device_name > /sys/bus/usb/drivers/usb/unbind
avec chacun d'entre eux, mais seuls les appareils usbN et N-M réagissent, ceux de la forme n-m: x.y
tee: /sys/bus/usb/drivers/usb/bind: No such device
(J'ai essayé de mettre, par exemple, "1-0: 1.0", "1-0 \: 1.0" et "1-0 \: 1.0", tous ont donné le même résultat).
Une dernière chose, ce qui est affiché après l'exécution
lsusb -t
ne change pas lorsque je branche ou débranche la lampe.
Des idées?
Désactivez l'ID d'appareil 2-1:
echo '2-1' |Sudo tee /sys/bus/usb/drivers/usb/unbind
Rallumez l'ID de l'appareil 2-1:
echo '2-1' |Sudo tee /sys/bus/usb/drivers/usb/bind
Dans mon cas, l'utilisation de l'ID d'appareil 2-1 contrôle l'alimentation de ma clé USB et, par conséquent, contrôle la lumière.
J'espère que cela aide, Su
Si tout ce que vous voulez faire est de réinitialiser un périphérique USB pour le réparer une fois qu'il est dans un état cassé, l'utilisation des fichiers spéciaux de liaison/dissociation usbfs peut être un peu pénible (car les ID de périphérique peuvent changer, et ils sont un un peu difficile à identifier précisément si vous ne voulez pas lier d'autres appareils). Dans ce cas, j'ai trouvé beaucoup plus facile d'utiliser les ID de fournisseur et de produit donnés par lsusb
avec usb_modeswitch
. Par exemple, si j'identifie mon adaptateur sans fil en utilisant:
$ lsusb
Bus 001 Device 042: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 035: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Je peux ensuite réinitialiser l'adaptateur sans fil en utilisant:
$ Sudo usb_modeswitch -v 0x7392 -p 0x7811 --reset-usb
Si plusieurs périphériques sont connectés avec les mêmes ID de fournisseur et de produit, usb_modeswitch fournit des indicateurs de numéro de bus et de périphérique. Pour l'exemple d'adaptateur sans fil ci-dessus, j'ajouterais -b 1 -g 42
aux drapeaux.
Cela ne fonctionnera pas pour votre lampe. Cette désactivation est tout simplement logique. C'est à l'appareil de gérer l'alimentation. Et votre lampe ne fait rien (
Essayez ce code, cela fonctionne pour moi (uniquement pour rooté)
String[] cmdline = { "su", "-c", "echo '1-1' >/sys/bus/usb/drivers/usb/unbind" };
try {
Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
Log.e("MainActivity","Failed"+e);
}
et pour lier à nouveau faire cela
String[] cmdline = { "su", "-c", "echo '1-1' >/sys/bus/usb/drivers/usb/bind" };
try {
Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
Log.e("MainActivity","Failed"+e);
}