是否可以使用linux手动打开/关闭USB电源?
有这个外置USB散热风扇(你用来冷却自己的那种,而不是PC),能够从终端控制它会很好,因为我想将风扇定位在远处.
我想这也适用于其他各种各样的东西,因为那里有很多USB玩具.也许是空气净化器等(我听说它们确实不起作用).
Rom*_*aka 61
注意.此答案中的信息与较旧的内核相关(最高2.6.32).有关较新内核的信息,请参阅tlwhitec的答案.
# disable external wake-up; do this only once
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo on > /sys/bus/usb/devices/usb1/power/level # turn on
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
Run Code Online (Sandbox Code Playgroud)
(您可能需要将usb1更改为usb n)
资料来源:Documentation/usb/power-management.txt.gz
tlw*_*tec 58
根据文档,内核2.6.32的USB电源管理有几处变化,似乎在2.6.38中得到了解决.现在,您需要等待设备变为空闲,这由特定设备驱动程序控制.驱动程序需要支持它,否则设备将永远不会达到此状态.不幸的是,现在用户没有机会强行执行此操作.但是,如果你很幸运,你的设备可能会闲置,那么要关闭它,你需要:
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend"
echo "auto" > "/sys/bus/usb/devices/usbX/power/level"
Run Code Online (Sandbox Code Playgroud)
或者,对于2.6.38及以上的内核:
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
echo "auto" > "/sys/bus/usb/devices/usbX/power/control"
Run Code Online (Sandbox Code Playgroud)
字面意思是,在设备闲置时暂停.
因此,除非你的粉丝是"智能"的东西,可以看作是一个设备并由驱动程序控制,你可能在当前的内核上没有太多运气.
gra*_*rew 23
我发现这些解决方案至少适用于正确配置的Terminus FE 1.1 USB集线器芯片:
1.要关闭集线器所有USB端口的电源,您可以使用以下命令从内核解除集线器的绑定:
echo "1-4.4.4" > /sys/bus/usb/drivers/usb/unbind
Run Code Online (Sandbox Code Playgroud)
重新打开电源 - 你可以用它绑回来
echo "1-4.4.4" > /sys/bus/usb/drivers/usb/bind
Run Code Online (Sandbox Code Playgroud)
2.单独切换每个端口的电源比较棘手:我能够使用hubpower控制每个端口 - 但它有一个缺点:hubpower首先断开usbdevfs,导致所有USB设备从系统断开,至少在ubuntu上:
usb_ioctl.ioctl_code = USBDEVFS_DISCONNECT;
rc = ioctl(fd, USBDEVFS_IOCTL, &usb_ioctl);
Run Code Online (Sandbox Code Playgroud)
有了这个ioctl禁用,我能够关闭单独的端口电源而无需分离所有设备 - 但电源立即恢复(可能是由于内核看到未初始化的设备)导致USB设备只是做"冷启动"这就是我一般都想做.我补丁的中心力量在这里
Dom*_*ano 19
英特尔的PowerTOP允许您实时切换USB外围设备等设备.这些被称为'可调参数'.
sudo apt install powertop
sudo powertop
Run Code Online (Sandbox Code Playgroud)
请注意,Bad表示设备始终处于打开状态.切换到Good将在预设的非活动保存时间(默认为2000ms)后关闭设备.
有关如何永久更改这些更改的详细信息,请参阅PowerTOP文档.
它为您生成配置脚本(几乎与此线程上的其他海报一样).
注意:这些脚本不会影响USB引脚电源(始终打开).
这些仅发送驱动程序协议以激活和停用设备.
如果要控制引脚电源,可以使用支持的智能USB集线器,或者更好的微控制器.
小智 7
我想这样做,用我的USB硬件我做不到.我在这里写了一个hacky方法:http://pintant.cat/2012/05/12/power-off-usb-device/.简而言之:我使用USB继电器打开/关闭另一根USB线的Vc ......
小智 5
echo '2-1' |sudo tee /sys/bus/usb/drivers/usb/unbind
Run Code Online (Sandbox Code Playgroud)
适用于ubuntu
人们之所以提出这样的问题,是因为可怕的——确实是“邪恶” ——USB自动暂停“功能”。
自动挂起会关闭“空闲”USB 设备的电源,除非设备的驱动程序正确支持此功能,否则设备可能无法连接。因此,打开/关闭 USB 端口是问题的症状,而不是问题本身。
我将向您展示如何全局禁用自动挂起,无需手动打开和关闭 USB 端口:
您不需要单独编辑“ autosuspend_delay_ms ”:可以使用以下命令全局和持久地禁用 USB 自动挂起:
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&usbcore.autosuspend=-1 /' /etc/default/grub
update-grub
systemctl reboot
Run Code Online (Sandbox Code Playgroud)
一个Ubuntu的18.04屏幕抓取遵循在“龙回答”如何说明我的成绩均达到结束。
确实,USB 电源管理内核文档声明自动挂起将被弃用,取而代之的是“ autosuspend_delay_ms ”用于禁用 USB 自动挂起:
"In 2.6.38 the "autosuspend" file will be deprecated
and replaced by the "autosuspend_delay_ms" file."
Run Code Online (Sandbox Code Playgroud)
无论其我的测试显示设置usbcore.autosuspend=-1中的/ etc /默认/ grub中,如下可以作为一个全球切换为USB autosuspend functionality-你就不要需要编辑个人“ autosuspend_delay_ms ”文件。
上面链接的同一文档指出值“0”是启用,负值是禁用:
power/autosuspend_delay_ms
<snip> 0 means to autosuspend
as soon as the device becomes idle, and negative
values mean never to autosuspend. You can write a
number to the file to change the autosuspend
idle-delay time.
Run Code Online (Sandbox Code Playgroud)
在下面带注释的Ubuntu 18.04屏幕抓取中,说明了我的结果是如何实现的(和可重现的),请注意autosuspend_delay_ms 中的默认值为“0”(启用)。
然后请注意,在 Grub 中ONLY设置后usbcore.autosuspend=-1,这些值现在在重新启动后为负(禁用)。这将为我省去编辑单个值的麻烦,现在可以编写禁用 USB 自动挂起的脚本。
希望这能让禁用 USB 自动挂起更容易,更容易编写脚本-