web-dev-qa-db-ja.com

USBポートの電源をオフにするにはどうすればよいですか?

Lubuntu 16.04を使用しています。 USBソケットから電源を取るアナログスピーカーがあります。 PCの電源を切ってサスペンドするときに、それらをオフにしてほしい。私はそれはかなり簡単だと思ったが、私はグーグルで多くの時間を費やし、まだ解決策を持っていません。

私の最善の策は hubctl のようです。これは私のハードウェア上で実行されるようです(著者はすべてのハブコントローラーが機能をサポートしているわけではないと警告しています)。これは、USBキーボードを正常にオフにしたためです。

そこで、スピーカーのUSBソケットの電源を切るために何を指定するかを知る必要があります。実際のUSBデバイスではなく、lsusbには表示されないため、これには推測が必要です。背面パネルとマザーボードのマニュアルを見ると、スピーカーが接続されている4つのソケットのグループがUSB 2.0ポート7〜10として記述されていることがわかります。マウスとウェブカメラが同じソケットグループに接続されています。

引数なしでuhubctlを実行すると、次の結果が得られます。

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

それはあまり役に立ちません。キーボードは表示されますが、他のすべてのUSBデバイス(マウス、Seagate HDD、Webカメラ)は記載されていません。

私はさまざまなコマンドを試しました:

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.

キーボードをオフにすることができます。他のUSBデバイスはリストされていませんが(存在する場合)、オフにすることはできません。

ハブ名が何を表しているのかわかりません(2-1、1-1、4-5、3-9)。また、lsusbからハブ名を推測する方法はないようです。

lsusbは以下を提供します。

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の結果:

/:  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

ハブ名とバス/ポート番号の間には何らかの関係があることがわかりますが、ルールを思い付くことができません。

Lsusbから、USB 2.0デバイスはIntelコントローラーを使用しているように見えますが、USB 3.0および2.1デバイスはASUSコントローラーを使用しているようです。 Intelチップが電源制御をサポートしていないのではないかと思ったので、USB 2.1ソケットのスピーカーを試してみました。運がありません。

誰もuhubctrlがそれと同じように動作する理由を知っていますか?

たぶんuhubctlは赤ニシンで動作しないでしょう。 Ubuntuで電源を切り替える方法は他にもありますが、USBソケットを表すディレクトリを決定できるかどうかに依存しているようです。これはどうすればいいかわかりません。

3
user1759557
  • uhubctlは、Linuxカーネルと同じUSBデバイスのアドレス指定方法を使用しています:b-x.y.z、ここでbはUSBバス番号、次にxyzは、特定のバスのルートUSBハブから始まるハブチェーンのポート番号です。このアドレス指定は半安定です-USBデバイスを取り外して同じ物理ポートに接続しても変更されません。
  • 2番目の質問に答えるには、uhubctlのREADMEから this を引用する必要があります。

    互換性のあるUSB 3.0ハブをUSB3アップストリームポートに接続している場合、2つの独立した仮想ハブとして検出されます:USB2およびUSB3。USBデバイスは、その機能と接続速度に応じてUSB2またはUSB3仮想ハブに接続されます。このようなハブの電源を制御するには、USB2とUSB3の両方の仮想ハブの電源をオン/オフにして、電源のオン/オフの変更を有効にする必要があります。 uhubctlは、これを自動的に実行しようとします(オプション-eでこの動作を無効にしない限り)。

  • 最後に、uhubctlは、PPPS(ポートごとの電源切り替え)をサポートすると主張するUSB​​ハブのみをリストします。ただし、サポートを要求しているが実際には動作しないハブがあります(スイッチング回路が物理的に欠落しています)。 動作することがわかっているすべてのハブのリスト を維持しています。

開示:私はuhubctl作成者です:) uhubctl here に対して問題をオープンしてください。

4
mvp