web-dev-qa-db-fra.com

Comment puis-je éteindre le port USB?

J'utilise Lubuntu 16.04. J'ai des haut-parleurs analogiques qui tirent leur alimentation d'une prise USB. Je voudrais qu'ils s'éteignent lorsque j'éteins et suspends le pc. Je pensais que ce serait assez facile, mais j'ai passé beaucoup de temps à googler et je n'ai toujours pas de solution.

Mon meilleur pari semble être hubctl car cela semble fonctionner sur mon matériel (l'auteur avertit que tous les contrôleurs de hub ne prennent pas en charge la fonctionnalité). Je le crois parce que j'ai réussi à éteindre le clavier USB.

Alors maintenant, j'ai besoin de savoir quoi spécifier pour éteindre la prise USB des haut-parleurs. Cela ne peut que susciter des incertitudes, car ce ne sont pas de vrais périphériques USB et ne s'afficheront pas en lsusb. En regardant le panneau arrière et le manuel de la carte mère, je vois que le groupe de quatre prises où les haut-parleurs sont branchés est décrit comme ports USB 2.0 7-10. Ma souris et ma webcam sont connectées au même groupe de prises.

Exécuter uhubctl sans argument donne:

Current status for hub 2-1 [8087:8002, USB 2.00, 8 ports]
Port 1: 0100 power
Port 2: 0100 power
Port 3: 0100 power
Port 4: 0100 power
Port 5: 0100 power
Port 6: 0100 power
Port 7: 0100 power
Port 8: 0100 power
Current status for hub 1-1 [8087:800a, USB 2.00, 6 ports]
Port 1: 0100 power
Port 2: 0100 power
Port 3: 0100 power
Port 4: 0100 power
Port 5: 0100 power
Port 6: 0100 power
Current status for hub 4-5 [174c:3074 ASUS TEK. ASM107x, USB 3.00, 4 ports]
Port 1: 02a0 power 5gbps Rx.Detect
Port 2: 02a0 power 5gbps Rx.Detect
Port 3: 02a0 power 5gbps Rx.Detect
Port 4: 02a0 power 5gbps Rx.Detect
Current status for hub 3-9 [174c:2074 ASUS TEK. ASM107x, USB 2.10, 4 ports]
Port 1: 0100 power
Port 2: 0303 power lowspeed enable connect [047d:2043 NOVATEK Kensington U+P Keyboard]
Port 3: 0100 power
Port 4: 0100 power

Ce n'est pas trop utile. Mon clavier apparaît, mais tous mes autres périphériques USB - souris, disque dur Seagate, webcam - ne sont pas mentionnés.

J'ai essayé diverses commandes:

uhubctl -a off -p 2 -l 3-9     #Turns off keyboard as expected
uhubctl -a off -p 2 -l 4-5     #ALSO turns off keyboard. Why ?

uhubctl -a off -p 12345678 -l 2-1 #Does not turn anything off
uhubctl -a off -p 123456   -l 1-1 #Does not turn anything off
uhubctl -a off -p 134      -l 4-5 #Does not turn anything off.

Je peux donc éteindre le clavier. Aucun autre périphérique USB n'est répertorié (bien qu'ils soient là) et ils ne peuvent pas être désactivés.

Je n'ai aucune idée de ce que les noms de concentrateur représentent, à savoir 2-1, 1-1, 4-5, 3-9. Il ne semble pas non plus y avoir de moyen de déduire les noms de hub de lsusb.

lsusb donne:

Bus 002 Device 002: ID 8087:8002 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:800a Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 174c:3074 ASMedia Technology Inc. ASM1074 SuperSpeed hub
Bus 004 Device 002: ID 0bc2:ab24 Seagate RSS LLC 
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 007: ID 047d:2043 Kensington 
Bus 003 Device 003: ID 174c:2074 ASMedia Technology Inc. ASM1074 High-Speed hub
Bus 003 Device 002: ID 0f62:1001 Acrox Technologies Co., Ltd Targus Mini Trackball Optical Mouse
Bus 003 Device 006: ID 046d:0994 Logitech, Inc. QuickCam Orbit/Sphere AF
Bus 003 Device 004: ID 0b05:180a ASUSTek Computer, Inc. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

lsusb -t donne:

/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
    |__ Port 5: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M
    |__ Port 5: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 9: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 7, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 7, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 10: Dev 4, If 1, Class=Vendor Specific Class, Driver=btusb, 12M
    |__ Port 10: Dev 4, If 2, Class=Vendor Specific Class, Driver=btusb, 12M
    |__ Port 10: Dev 4, If 0, Class=Vendor Specific Class, Driver=btusb, 12M
    |__ Port 10: Dev 4, If 3, Class=Application Specific Interface, Driver=, 12M
    |__ Port 14: Dev 6, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 14: Dev 6, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 14: Dev 6, If 2, Class=Audio, Driver=snd-usb-audio, 480M
    |__ Port 14: Dev 6, If 3, Class=Audio, Driver=snd-usb-audio, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M

Je peux voir qu'il existe une relation entre les noms des concentrateurs et les numéros de bus/port, mais je ne peux pas proposer de règle.

J'ai remarqué de la part de LSUSB que les périphériques USB 2.0 semblent utiliser un contrôleur Intel, tandis que les périphériques USB 3.0 et 2.1 semblent utiliser un contrôleur ASUS. Je me demandais si les puces Intel ne pouvaient pas prendre en charge le contrôle de l'alimentation; j'ai donc essayé les haut-parleurs de la prise USB 2.1 que je peux éteindre lorsque ce dernier est connecté au clavier. Pas de chance.

Quelqu'un a-t-il une idée de la raison pour laquelle uhubctrl se comporte comme il le fait?

Peut-être que uhubctl est un fouillis rouge qui ne fonctionnera pas. Je sais qu’il existe d’autres moyens de changer d’alimentation sous Ubuntu, mais ils semblent dépendre de la possibilité de déterminer le répertoire qui représente la prise USB. Cela, je ne sais pas comment faire.

3
user1759557
  • uhubctl utilise la même méthode d'adressage que le noyau Linux pour les périphériques USB: b-x.y.z, où b est le numéro de bus USB, puis x, y, z sont les numéros de port de la chaîne de concentrateurs à partir du concentrateur USB racine pour un bus donné. Cet adressage est semi-stable - il ne changera pas si vous débranchez et rebranchez les périphériques USB dans les mêmes ports physiques.
  • Pour répondre à votre deuxième question, je dois citer this de uhubctl README:

    Si vous avez un concentrateur USB 3.0 compatible connecté au port USB3 en amont, il sera détecté comme 2 concentrateurs virtuels indépendants: USB2 et USB3, et vos périphériques USB seront connectés au concentrateur virtuel USB2 ou USB3 en fonction de leurs capacités et de la vitesse de connexion. Pour contrôler l'alimentation de tels concentrateurs, il est nécessaire d'activer/désactiver les concentrateurs virtuels USB2 et USB3 pour que les modifications d'activation/désactivation prennent effet. uhubctl essaiera de le faire automatiquement (à moins que vous ne désactiviez ce comportement avec l'option -e).

  • Enfin, uhubctl ne listera que les concentrateurs USB prétendant prendre en charge le protocole PPPS (commutation d'alimentation par port). Cependant, il existe des hubs qui réclament un support mais ne fonctionnent pas vraiment (des circuits de commutation manquent physiquement). Je maintiens liste de tous les hubs dont on sait qu'ils fonctionnent à coup sûr.

Divulgation: Je suis auteur uhubctl :) N'hésitez pas à ouvrir des questions contre uhubctl ici .

4
mvp