web-dev-qa-db-ja.com

USBポートの電源をオフにします。または、USBサブシステム全体の電源をオフにします

特定の時間にプログラムでオフにするために購入したUSBランプがあるので、USBポートの電源を切る必要があります。

私はusb6にusbハブを持っていると思います。ランプはこのハブのポートの1つに接続されています:

#myhost$ lsusb 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 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 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
...
Bus 008 Device 006: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub

これが私が試したものです:

2つの解決策は here であり、最初の解決策は次のとおりです。

echo disabled > /sys/bus/usb/devices/usb1/power/wakeup 
echo suspend > /sys/bus/usb/devices/usb1/power/level  # turn off

write error: Invalid argumentに書き込もうとすると、/sys/bus/usb/devices/usb1/power/levelが表示されます。

$Sudo bash -c 'echo disabled > /sys/bus/usb/devices/usb6/power/wakeup'
$echo suspend|Sudo tee /sys/bus/usb/devices/usb6/power/level suspend
tee: /sys/bus/usb/devices/usb6/power/level: Invalid argument
$Sudo bash -c 'echo suspend> /sys/bus/usb/devices/usb6/power/level'bash: line 0: echo: write error: Invalid argument

2番目のソリューション:

Sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'

これは、usb-hubデバイスの電源をオフにします。

私もフォローしようとしていました this

しかし、lsusb -tの出力がハングするだけです。

$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C

これにより、この方法を使用して「2-1.1」の部分を取得することができなくなります。

echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind

この情報を取得する別の方法はありますか?

または、USBサブシステム全体の電源を切る方法はありますか? modprobe -r usb_etcのようなもの?

私のカーネルは:

$uname -r
3.2.0-4-AMD64
31
user84207

私のツール uhubctl -コマンドラインユーティリティを使用して、互換性のあるUSBハブのポートごとのUSB電力を制御できます。

ポートごとの電源切り替えをサポートするハブでのみ機能しますが、最新のマザーボードの多くには、この機能をサポートするUSB​​ハブが搭載されています。

コンパイルします:

git clone https://github.com/mvp/uhubctl
cd uhubctl
make

システム全体に/usr/sbin/uhubctlとしてインストールするには:

Sudo make install

Uhubctlで制御できるすべてのハブ、その場所、ポートのステータスを一覧表示するには:

Sudo uhubctl

(udev USBアクセス許可を構成する場合、Sudoの使用を回避できます)。

互換性のある単一のハブのポート5の電源をオフにするには:

Sudo uhubctl -a 0 -p 5

複数の互換性のあるハブが接続されている場合は、-lを使用してハブの場所を指定し、ハブを制御します。

Sudo uhubctl -a 0 -p 5 -l 3-1.2

電源をオフにしてからオンに切り替えるには:

Sudo uhubctl -a 2 -p 5

USB 3.0ハブもサポートされていることに注意してください。また、かなりの数の新しいUSB 3.0ハブが実際に機能します。

詳細はこちら をお読みください。

23
mvp

新しいカーネルの "suspend"が機能しない場合は、 linuxでのUSB電源の制御(オン/オフ) 、ショートバージョンを参照してください。

echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
echo "auto" > "/sys/bus/usb/devices/usbX/power/control"

しかし、それは文字通り電力をカットするのではなく、デバイスに電源オフの信号を送ります。電源管理を実装して正しいことを行うのはデバイス次第です。

カーネルの 公式ドキュメント には多くの詳細があります。そこでは、/sys/bus/usb/devices/.../power/のさまざまなファイルと、デバイスとポートの管理方法について説明しています。

実際のUSBデバイスではないもの(USBランプがLSUSBに表示されますか?)シリアルへのcp210x usbとして起動し、電源オフも行いません。 echo '5-4.6' > /sys/bus/usb/drivers/usb/unbindでgpsを「切断」してecho '5-4.6' > /sys/bus/usb/drivers/usb/bindで再接続できますが、バッテリーの充電時間は常にオンです。

しかし、それは 一部のハブは適切に行う のようです。

20
Jorge Nerín

[〜#〜]ではありません[〜#〜]個別に編集する必要はありませんautosuspend_delay_ms "ファイル。

USB自動サスペンドを無効にすることができます[〜#〜]グローバルに[〜#〜]および[〜#〜]永続的に[〜#〜]with:

sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&usbcore.autosuspend=-1 /' /etc/default/grub

update-grub

systemctl reboot

提案された修正をテストし、その正当性を検証するのに数秒しかかかりません。

以下のUbuntu 18.04注釈付きのスクリーンショットは、上記のように修正して、ホストを[〜#〜]すべて[〜#〜]USB自動サスペンド設定が無効になっています:

Ubuntu 18.04 demo globally disabling USB autosuspend

0
F1Linux