web-dev-qa-db-ja.com

1つのUSBデバイスをオフにしています...もう一度

このトピックが何度も議論されたことを私は知っていますが、答えのどれも私を助けませんでした。ちなみに、私は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

ランプを抜き差ししても変化しません。

何か案は?

20
user2772761

デバイス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スティックへの電力を制御し、結果としてライトを制御します。

  • ヒント:それらがDebianで機能する場合は、後で簡単に使えるようにエイリアスを作成します。

これが役に立てば幸い

18
user3534136

壊れた状態になったときに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を追加します。

8
jwatt

これはあなたのランプでは機能しません。このオフは論理的に正しいです。電力を処理するのはデバイス次第です。そしてあなたのランプは何もしません(

1
Eugen Konkov

それが私のために働くこのコードを試してください(根ざしのためにだけ)

 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);
}
0
Innocent