【问题标题】:Turning off a single usb device... again关闭单个 USB 设备...再次
【发布时间】:2013-09-12 13:30:14
【问题描述】:

我知道这个话题已经讨论过很多次了,但没有一个答案对我有帮助。作为记录,我正在运行 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 的设备产率

    tee: /sys/bus/usb/drivers/usb/bind: No such device

(例如,我尝试输入“1-0:1.0”、“1-0\:1.0”和“1-0\:1.0”,都给出了相同的结果)。

最后一件事,执行后显示什么

    lsusb -t

当我插入或拔下灯时不会改变。

有什么想法吗?

【问题讨论】:

  • 灯牌的大用处。

标签: usb debian


【解决方案1】:

关闭设备 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 中为您工作,请为他们创建一个别名,以便您以后的生活更轻松。

希望这会有所帮助, 苏

【讨论】:

  • 非常好,但是如果我想以这种方式永久禁用设备/端口,我应该在启动顺序中的哪个位置放置此命令?例如,我想永久禁用内置网络摄像头,并始终让用户插入的网络摄像头变为 /dev/video0 。
  • 如何识别哪个设备 ID 控制着什么?
【解决方案2】:

如果您只想重置 USB 设备以在它进入损坏状态后对其进行修复,那么使用绑定/取消绑定 usbfs 特殊文件可能会有点麻烦(因为设备 ID 可以更改,并且它们'如果您不想重新绑定其他设备,要准确识别它有点棘手)。在这种情况下,我发现将lsusb 提供的供应商和产品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 添加到标志中。

【讨论】:

  • 这是在 Ubuntu (12.04 LTS) 上对我有用的唯一方法,用于重新启动挂起后未重新连接的 USB 无线适配器。谢谢!
  • usb_modeswitch 方法不适用于有问题的 USB 加密狗调制解调器 - 它通常显示为 /dev/ttyUSB0、1 和 2,但在 usb_modeswitch 重置后它返回为 /dev/ ttyUSB1、2 和 3 破坏了 /etc/ppp/peers/ 中的硬编码关联。我发现我需要在取消绑定和绑定之间暂停大约 10-15 秒以避免这种情况。
【解决方案3】:

试试这个对我有用的代码(仅适用于 root)

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

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2013-10-27
    相关资源
    最近更新 更多