このトピックが何度も議論されたことを私は知っていますが、答えのどれも私を助けませんでした。ちなみに、私はDebianを実行しています。
取り引きは次のとおりです。私は非常にシンプルで、オン/オフスイッチさえない(動作し、常にオンになっている)USB電源LEDランプを購入しました。コマンドラインでオン/オフできるようにしたい。これが私が試したものです:
echo on > /sys/bus/usb/devices/usb1/power/level # turn on
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
これは私が多くのフォーラムで見つけたものです。 「オン」にすることは機能しますが、「一時停止」の結果は
-su: echo: write error: Invalid argument
すべてのUSBに対して。私も試しました
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
エラーは発生しませんが、何も実行されません(ここでも、すべてのusbNに対して)
しようとしている
echo "usb1" > /sys/bus/usb/drivers/usb/unbind
キーボード、マウス、USB wifiカードなど、より「インテリジェントな」デバイスでのみ機能します。つまり、電源がオフになっているのはtyhoseデバイスだけで、他のUSBではエラーは発生しませんが、ランプは決して消灯しません。
/ sys/bus/usb/devices /の内容は
1-0:1.0 1-1:1.0 1-2:1.0 1-2:1.2 2-0:1.0 4-0:1.0 4-1:1.0 6-0:1.0 8-0:1.0 8-2:1.0 usb2 usb4 usb6 usb8
1-1 1-2 1-2:1.1 1-2:1.3 3-0:1.0 4-1 5-0:1.0 7-0:1.0 8-2 usb1 usb3 usb5 usb7
私がやろうとした
echo device_name > /sys/bus/usb/drivers/usb/unbind
どれも1つですが、反応するのはデバイスusbNとN-Mのみで、n-m:x.yの形式のデバイス
tee: /sys/bus/usb/drivers/usb/bind: No such device
(たとえば、「1-0:1.0」、「1-0 \:1.0」、「1-0 \:1.0」を入れてみましたが、すべて同じ結果が得られました)。
最後に、実行後に表示されるもの
lsusb -t
ランプを抜き差ししても変化しません。
何か案は?
デバイスID 2-1をオフにします。
echo '2-1' |Sudo tee /sys/bus/usb/drivers/usb/unbind
デバイスID 2-1をオンに戻します。
echo '2-1' |Sudo tee /sys/bus/usb/drivers/usb/bind
私の場合、デバイスID 2-1を使用してUSBスティックへの電力を制御し、結果としてライトを制御します。
これが役に立てば幸い
壊れた状態になったときにUSBデバイスをリセットして修正するだけの場合は、バインド/バインド解除のusbfs特殊ファイルを使用するのが少し面倒です(デバイスIDが変更される可能性があるため、他のデバイスを再バインドしたくないかどうかを正確に識別するには少し注意が必要です)。この場合、lsusb
で指定されたベンダーIDと製品IDをusb_modeswitch
と一緒に使用する方がはるかに簡単です。たとえば、次の方法でワイヤレスアダプターを識別したとします。
$ lsusb
Bus 001 Device 042: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 035: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
次に、以下を使用してワイヤレスアダプターをリセットできます。
$ Sudo usb_modeswitch -v 0x7392 -p 0x7811 --reset-usb
同じベンダーと製品IDで複数のデバイスが接続されている場合、usb_modeswitchはバスとデバイス番号のフラグを提供します。上記のワイヤレスアダプターの例では、フラグに-b 1 -g 42
を追加します。
これはあなたのランプでは機能しません。このオフは論理的に正しいです。電力を処理するのはデバイス次第です。そしてあなたのランプは何もしません(
それが私のために働くこのコードを試してください(根ざしのためにだけ)
String[] cmdline = { "su", "-c", "echo '1-1' >/sys/bus/usb/drivers/usb/unbind" };
try {
Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
Log.e("MainActivity","Failed"+e);
}
そしてバインドのためにもう一度これを行います
String[] cmdline = { "su", "-c", "echo '1-1' >/sys/bus/usb/drivers/usb/bind" };
try {
Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
Log.e("MainActivity","Failed"+e);
}