我有一个漂亮的小 USB 灯,它没有关闭开关,插入电源后就会一直处于“亮”状态。
我的问题是,有没有办法禁用 USB 端口,以便在插上电源时关闭灯?最好是从命令行完成此操作,但如果有可能,那无论如何都会很酷。我使用 Mac 和 Linux,但有兴趣了解这是否可以在任何操作系统上实现,或者物理硬件是否阻止了这样的使用。
答案1
在大多数情况下,风扇和灯等 USB 配件并不是真正的 USB 设备 - 它们只需要一点点 5v 电源。
USB 对实际设备的工作方式是,它们在启动时获得少量电量,足以让它们打开。然后它们会使用 USB 控制器进行枚举并请求更多电量。
由于这些伪 USB 设备实际上根本没有与计算机通信,因此关闭它的唯一方法就是完全切断该 USB 端口的电源,据我所知,通常无法通过软件来做到这一点。
答案2
我实际上并没有亲自尝试过,但从我对这个主题所做的研究来看(为了完成与您完全相同的事情),您将需要:
- 支持“每端口电源切换”的 USB 集线器 - 支持此功能的集线器并不多
- 一个可以实际切换电源的实用程序
看一眼http://www.gniibe.org/development/ac-power-control-by-USB-hub/index,他正在做类似的事情,并包括一些关于该主题的背景、支持的集线器列表以及构建实用程序的 C 源代码。
我在美国找不到他提到的任何 USB 集线器,与我联系后确认 D-Link DUB-H7 可以使用 - 例如,你可以在亚马逊上买到它。
我还没有找到在 Windows 上执行此操作的方法,但看起来你对 Linux 最感兴趣。
答案3
7 端口 USB 集线器 D-Link DUB_H7 修订版 2(黑色)没有每端口电源切换,它仅支持联动电源切换。
#lsusb -v
输出显示两次 4 端口集线器,这里是集线器描述符的输出:
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 4
wHubCharacteristic 0x00e0
Ganged power switching
Ganged overcurrent protection
TT think time 32 FS bits
Port indicators
bPwrOn2PwrGood 50 * 2 milli seconds
bHubContrCurrent 100 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0100 power
Port 2: 0000.0100 power
Port 3: 0000.0100 power
Port 4: 0000.0100 power
答案4
尝试使用http://www.nirsoft.net/utils/usbdeview.zip。此可执行文件显示连接到您的计算机的所有 USB 设备,并允许您根据需要单独断开它们的连接。
正如自述文件中所述:
USBDeview 是一款小型实用程序,可列出当前连接到计算机的所有 USB 设备以及您之前使用的所有 USB 设备。对于每个 USB 设备,都会显示扩展信息:设备名称/描述、设备类型、序列号(用于大容量存储设备)、设备添加的日期/时间、供应商 ID、产品 ID 等... USBDeview 还允许您卸载之前使用的 USB 设备,并断开当前连接到计算机的 USB 设备。您还可以在远程计算机上使用 USBDeview,只要您以管理员用户身份登录该计算机即可。