我找到了类似的主题,但找不到答案。
在我的系统(Xubuntu 20.04)中grep . /sys/bus/usb/devices/*/power/wakeup
仅提供此功能
/sys/bus/usb/设备/1-1/power/wakeup:已禁用 /sys/bus/usb/设备/2-1/power/wakeup:已禁用 /sys/bus/usb/devices/3-13/power/wakeup:已禁用 /sys/bus/usb/devices/3-14/power/wakeup:已禁用 /sys/总线/USB/设备/3-5/电源/唤醒:已禁用 /sys/bus/usb/devices/usb1/power/wakeup:已禁用 /sys/bus/usb/devices/usb2/power/wakeup:已禁用 /sys/bus/usb/devices/usb3/power/wakeup:已禁用 /sys/bus/usb/devices/usb4/power/wakeup:已禁用
完整文件列表/sys/bus/usb/devices/3-5/power/
活动持续时间 异步 自动暂停 自动暂停延迟 ms 连接持续时间 控制 等级 坚持 运行时活动儿童 运行时活动时间 运行时启用 运行时状态 运行时暂停时间 运行时使用情况 醒来 唤醒中止计数 唤醒活动 唤醒活动计数 唤醒计数 唤醒到期次数 唤醒最后时间_ms 唤醒最大时间_ms 唤醒总时间_毫秒
然而,无线鼠标(+ 2.4GHz USB 适配器)可将系统从挂起状态唤醒。有什么方法可以禁用该特定 USB 端口/设备吗?
给lshw
我
*-usbhost:0 产品:xHCI 主机控制器 供应商:Linux 5.4.0-70-generic xhci-hcd 物理 ID:0 总线信息:usb@3 逻辑名称:usb3 版本:5.04 功能:usb-2.00 配置:驱动程序=集线器插槽=15 速度=480Mbit/s *-USB:0 描述:鼠标 产品:无线鼠标 供应商:Genius 物理 ID:5 巴士信息:USB@3:5 版本:10.01 功能:USB-1.10 配置:驱动程序=usbhid 最大功率=100mA 速度=12Mbit/s
并lsusb -t
说
/:总线 04.端口 1:Dev 1,Class=root_hub,驱动程序=xhci_hcd/6p,5000M /: 公共汽车03.端口 1:设备 1,类别=root_hub,驱动程序=xhci_hcd/15p,480M |__端口 5:设备 8,如果为 0,则类 = 人机接口设备,驱动程序 = usbhid,12M |__ 端口 10:Dev 2,If 2,Class=Audio,Driver=snd-usb-audio,480M |__ 端口 10:设备 2,如果 0,类别=视频,驱动程序=uvcvideo,480M |__ 端口 10:Dev 2,If 3,Class=Audio,Driver=snd-usb-audio,480M |__ 端口 10:Dev 2,If 1,Class=Video,Driver=uvcvideo,480M |__ 端口 12:设备 3,如果为 0,则类别 = 供应商特定类别,驱动程序 = mt7601u,480M |__ 端口 13:设备 4,如果为 0,则类别=无线,驱动程序=btusb,12M |__ 端口 13:设备 4,如果 1,类别=无线,驱动程序=btusb,12M |__ 端口 14:设备 5,如果为 0,则类 = 人机接口设备,驱动程序 = usbhid,1.5M /:总线 02.端口 1:Dev 1,Class=root_hub,驱动程序=ehci-pci/2p,480M |__ 端口 1:设备 2,如果 0,类别=Hub,驱动程序=hub/8p,480M /:总线 01.端口 1:Dev 1,Class=root_hub,驱动程序=ehci-pci/2p,480M |__ 端口 1:设备 2,如果 0,类别=Hub,驱动程序=hub/6p,480M
但由于/sys/bus/usb/devices
似乎没有相关内容,我不确定要配置什么以及如何配置。
答案1
将值disabled
而不是写入enabled
文件/sys/bus/usb/devices/3-5/power/wakeup
可以正常工作:当值为时disabled
,相应的鼠标或键盘不会唤醒计算机,但如果值为enabled
- 它们会唤醒它。此帮助脚本针对具有特定vendorId
和的设备执行此操作productId
:
#!/bin/bash
### Put it here: /usr/bin/usb-resume-control
while getopts v:p:s: flag
do
case "${flag}" in
v) vendor=${OPTARG};;
p) product=${OPTARG};;
s) state=${OPTARG};;
esac
done
if [ -z "$vendor" -o -z "$product" ]; then
echo -en "Usage: $0 -v vendorId -p productId -s state\nin any order, where vendorId and productId are both from [lsusb] and state can be enable or disable\n"
exit 1;
fi
if [ -z $state ]; then
stateTo="disabled"
fi
DEVICES=/sys/bus/usb/devices
for a in `ls $DEVICES`; do
if [ -f "$DEVICES/$a/idVendor" -a -f "$DEVICES/$a/idProduct" ]; then
idVendor=`cat "$DEVICES/$a/idVendor"`
idProduct=`cat "$DEVICES/$a/idProduct"`
if [ -f "$DEVICES/$a/product" ]; then
productName=`cat "$DEVICES/$a/product"`
fi
WAKEUPFILE="$DEVICES/$a/power/wakeup"
if [ $idVendor = $vendor -a $idProduct = $product -a -f "$WAKEUPFILE" ]; then
oldState=`cat "$WAKEUPFILE"`
echo "$state" > "$WAKEUPFILE"
newState=`cat "$WAKEUPFILE"`
echo Bus-port:$a vendor=$idVendor product=$idProduct name=$productName WakeUp: old=$oldState new=$newState
fi
fi
done
为了自动化流程,请创建一个包含以下内容的systemd
单元文件:/etc/systemd/system/control-usb-wakeup-mouse.service
[Unit]
Description=Control wakeup of USB device before sleep so they will or not resume the computer
Before=sleep.target
[Service]
Type=oneshot
ExecStart=/usr/bin/usb-resume-control -v 045e -p 0745 -s disabled
StandardOutput=journal
[Install]
WantedBy=sleep.target
将 vendorId 和 productId 更新为您的 USB 设备(参见 的输出lsusb
)。之后针对设备运行以下命令:
chmod 755 /etc/systemd/system/control-usb-wakeup-mouse.service
systemctl daemon-reload
systemctl enable control-usb-wakeup-mouse.service
现在提到的设备无法唤醒睡眠后的计算机。
答案2
有时,USB 端口的 BIOS 设置可用于在挂起期间启用/禁用电源和/或启用/禁用唤醒。
但您可能还需要禁用相关 USB 控制器/集线器的唤醒功能。请尝试以下操作:
cat /proc/acpi/wakeup
我实际上不知道如何确认这里的设备名称是你想要的设备,因为这里列出的名称与你在其他地方看到的不同,但就我而言,我的 USB 设备是 EHC1、EHC2 和 XHC
您可以通过以下方式在启用和禁用之间切换:
sudo -s
echo XHC > /proc/acpi/wakeup
exit
但我不确定这是否是永久性的改变。我不确定使它永久化的最佳方法,我只是制作了一个可执行脚本来回显我需要的命令,并将其添加到 roots crontab 中,如下所示:
@reboot /etc/my_script
答案3
我知道这有点过时了,但我也遇到过这个问题,其他解决方案都不起作用。我找到了一个更简单的解决方案,希望它能有所帮助。
什么乌格利奇说关于写值已禁用代替已启用文件中的/sys/bus/usb/devices/3-5/power/wakeup
设置正确无误。不过需要说明的是,这只能在重新启动之前起作用,重新启动后,它才会再次启用。
一个快速而肮脏的方法来设置“永久”禁用是简单地回显已禁用进入 **/*/power/wakeup 文件/etc/rc.local文件。
echo disabled > /sys/bus/usb/devices/3-5/power/wakeup
在最后一行之前/etc/rc.local文件应该可以解决问题。