我知道这个话题已经讨论了很多次,但没有一个答案对我有帮助。为了记录,我正在运行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
每个usbN。我也试过
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
不会出错,但也不会做任何事情(同样,对于每个usbN)
尝试
echo "usb1" > /sys/bus/usb/drivers/usb/unbind
仅适用于更多“智能”设备,如键盘,鼠标或USB wifi卡。我的意思是只有关闭tyhose设备,其他usbN不会出错,但灯泡永远不会熄灭。
/ 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
每一个都有,但只有usbN和N-M反应的设备,形式为n-m:x.y yield
tee: /sys/bus/usb/drivers/usb/bind: No such device
(我试过投入,例如,“1-0:1.0”,“1-0 \:1.0”和“1-0 \:1.0”,都给出了相同的结果)。
最后一件事,执行后显示的内容
lsusb -t
当我插上或拔下灯泡时,不会改变。
有什么想法吗?
答案 0 :(得分:16)
关闭设备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棒的电源,因此控制光。
希望这有帮助, 苏
答案 1 :(得分:8)
如果您想要做的只是重置USB设备以在其进入损坏状态时进行修复,那么使用bind / unbind usbfs特殊文件可能会有点痛苦(因为设备ID可以更改,并且它们& #39;准确识别你是否想要重新绑定其他设备有点棘手)。在这种情况下,我发现使用lsusb
与usb_modeswitch
提供的供应商和产品ID更加容易。例如,如果我使用以下标识我的无线适配器:
$ 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
添加到标志中。
答案 2 :(得分:0)
这不适用于您的灯泡。这个关闭只是逻辑上的。处理电源取决于设备。你的灯什么都不做(
答案 3 :(得分:0)
试试这个适用于我的代码(仅适用于root)
longitude
再次为绑定做这个
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);
}