Existe-t-il un moyen d'éteindre un périphérique USB à l'aide d'un logiciel?

11

Existe-t-il un moyen de désactiver complètement un périphérique USB (spécifique) à l'aide du logiciel d'une machine Linux?

Je veux l'utiliser pour éteindre (pour que la LED soit éteinte) une (seule) clé USB.

Connaissez-vous une méthode pour y parvenir? Par exemple en utilisant / sys / bus / usb ou similaire?

Daniel Jour
la source
Oui. Démontez simplement l'appareil.
iglvzx
1
Non, ça n'aide pas. Il y a aussi la possibilité qu'il n'y ait pas de partitions utilisables (qui pourraient être montées) sur le bâton.
Daniel Jour
Pour un lecteur flash, la seule façon de retirer le disque est echo 1 > /sys/block/sd<letter[s]>/device/delete... (l'éjection peut le faire ...) Cela POURRAIT avoir pour conséquence que le périphérique soit (soft) "éteint" ... cela ne fonctionnera pas pour les périphériques non-disque ..)
Gert van den Berg

Réponses:

10

Si votre machine exécute un ancien noyau, vous pourriez émettre echo suspend > /sys/bus/usb/devices/X-X/power/levelpour forcer la suspension de l'appareil.

Cependant, depuis 2.6.32, cela n'est plus possible:

Nous pouvons classer les événements de gestion de l'alimentation en deux grandes classes: externes et internes. Les événements externes sont ceux déclenchés par un agent en dehors de la pile USB: suspension / reprise du système (déclenchée par l'espace utilisateur), reprise dynamique manuelle (également déclenchée par l'espace utilisateur) et réveil à distance (déclenché par le périphérique). Les événements internes sont ceux déclenchés dans la pile USB : suspension automatique et reprise automatique. Notez que tous les événements de suspension dynamique sont internes ; les agents externes ne sont pas autorisés à émettre des suspensions dynamiques.

power/control

    This file contains one of two words: "on" or "auto".
    You can write those words to the file to change the
    device's setting.

    "on" means that the device should be resumed and
    autosuspend is not allowed.  (Of course, system
    suspends are still allowed.)

    "auto" is the normal state in which the kernel is
    allowed to autosuspend and autoresume the device.

    (In kernels up to 2.6.32, you could also specify
    "suspend", meaning that the device should remain
    suspended and autoresume was not allowed.  This
    setting is no longer supported.

(depuis http://www.kernel.org/doc/Documentation/usb/power-management.txt )

Je suppose que la meilleure chose que vous puissiez faire est de dissocier le périphérique du pilote , il n'y aurait donc aucune activité dessus, puis de configurer le périphérique pour qu'il se suspende automatiquement dès que possible ( echo auto > /sys/bus/usb/devices/X-X/power/control && echo 0 > /sys/bus/usb/devices/X-X/power/autosuspend_delay_ms).

Cependant, pour autant que je comprends les spécifications USB , même si vous suspendez l'appareil, il restera un certain port d'alimentation, il pourrait donc être impossible de désactiver la LED s'il est alimenté par un schéma `` stupide '' (c'est-à-dire directement connecté à + 5V et GND broches).

un terrain
la source
Je marque cela comme une réponse acceptée parce que j'ai pu dissocier le périphérique de son pilote et configurer la suspension automatique, ce qui entraîne l'arrêt du périphérique. Malheureusement, les clés USB ciblées (ou: leurs LED) sont directement connectées à + 5V et GND, et ne peuvent donc pas être mises hors tension.
Daniel Jour
3

L'utilisation de la commande d'éjection devrait fonctionner.

Courez eject /dev/<devicename>et il devrait s'éteindre.

soandos
la source
Malheureusement, cela ne fonctionne pas pour mon bâton de test ici :(
Daniel Jour
2
Ce qui n'est pas surprenant si votre clé USB n'est pas un lecteur de CD, disquette, bande ou SCSI. ejectne fonctionne qu'avec ces derniers.
Dmitry Grigoryev