web-dev-qa-db-ja.com

USBポートの電源オン/オフ

Ubuntuのターミナルを使用して特定のUSBポートをオン/オフすることは可能ですか?

lsusbは次の結果を表示します

Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 2232:1020  
Bus 002 Device 009: ID 0bc2:a013 Seagate RSS LLC 
Bus 002 Device 003: ID 0a5c:219c Broadcom Corp. 

Seagateは私の外付けハードディスクです。ターミナルで電源を切ることはできますか? https://stackoverflow.com/questions/4702216/controlling-a-usb-power-supply-on-off-with-linux を試しました。ただし、usbXの代わりに何を置き換える必要があるのか​​混乱しました

17
curious_coder

これまでの回答はすべて、USBサスペンドメカニズム、つまり「論理的な電源オフ」について語っています。つまり、VBUS + 5VをUSBポート。

こちら で説明されているように、実際にVBUSをカットできるハブはわずかです。

hubpower ツールで実行できます(ハブがサポートしている場合)。

7
rustyx

同じ問題が発生した後、「Sudo」が適切に権限を適用するように、コマンドを異なる方法で入力する必要があることがわかりました。

「tee」コマンドを使用します。

echo 0 | Sudo tee /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms

「tee」コマンドにルート権限を適用し、指定されたファイルに0を書き込み、現在そこにあるものをすべて置き換えます。追加するには、オプション-aを指定してteeコマンドを使用します。

詳細については、teeのmanページを参照してください

7
JohnMoore

実際、usbXUSBポート番号にすぎません。Xは、12などの番号を表します。たとえば、usb1ポートのusb21および2。一般に、ラップトップにはUSB 2.0およびUSB 3.0ポートを持つ3つまたは4つのUSBポートがあります。

Ubuntyでは、usb1usb2...usbX/sys/devices/pci000:00/*へのリンクです。それをよく理解するには、次のコマンドを実行します。

    ls -l /sys/bus/usb/devices/

したがって、USBポートを有効/無効にするusbXは、usb1を有効/無効にする(またはStackExchangeを参照する)ときにUSB Port Number 1に置き換えられます。

編集

Stefan Denchevechoに正しい方法を教えてくれて、Sudo。 (彼のコメントも確認してください。)permission deniedメッセージを今すぐ受け取ってはいけません。

Sudo sh -c "echo '0' > /sys/bus/usb/devices/usb1/power/autosuspend_delay_ms"
Sudo sh -c "echo 'auto' > /sys/bus/usb/devices/usb1/power/control"

lsusbの結果を確認すると、SeagateデバイスがPort No. 2に接続されているように見えるので、usb2を無効にする必要があります。コマンドは次のようになります。

Sudo sh -c "echo '0' > /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms"
Sudo sh -c "echo 'auto' > /sys/bus/usb/devices/usb2/power/control"

うまくいけば、理解できるようになります。

4
Saurav Kumar

udisksctlにはpower-offフラグがあり、unmountと組み合わせて使用​​することをお勧めします

man udisksctlから:

power-off
           Arranges for the drive to be safely removed and powered off. On the
           OS side this includes ensuring that no process is using the drive,
           then requesting that in-flight buffers and caches are committed to
           stable storage. The exact steps for powering off the drive depends
           on the drive itself and the interconnect used. For drives connected
           through USB, the effect is that the USB device will be deconfigured
           followed by disabling the upstream hub port it is connected to

デモ

USBジャンプドライブをアンマウントしてから電源をオフにします

testdir:$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 009: ID 154b:007a PNY 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

testdir:$ lsblk                                                                
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111.8G  0 disk 
└─sda1   8:1    0 111.8G  0 part /
sdb      8:16   1    30G  0 disk 
└─sdb1   8:17   1    30G  0 part /media/xieerqi/6A32C4555E1C5B4D
sr0     11:0    1  1024M  0 rom  

testdir:$ udisksctl unmount -b /dev/sdb1 && udisksctl power-off -b /dev/sdb1
Unmounted /dev/sdb1.

testdir:$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

testdir:$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111.8G  0 disk 
└─sda1   8:1    0 111.8G  0 part /
sr0     11:0    1  1024M  0 rom  

testdir:$ 
1