如何正确配置 WakeOnUSB?

如何正确配置 WakeOnUSB?

如何配置USB 唤醒在 10.04 或 10.10 Ubuntu(如果需要,2.6.36 或更高版本)上正确运行?(USB 唤醒是指当计算机处于睡眠状态时,例如 USB 键盘事件会唤醒机器!)笔记本电脑是宏碁 Aspire Timeline X 1830T。我不知道Linux内核以何种方式支持控制器。

有不同的方法可以解决这个问题,例如 /proc/acpi/wakeup... 或 UDEV... 或者 HAL 之类的东西?

/proc/acpi/wakeup显示 S4 中的每个设备,但我需要 S3。

Device S-state Status Sysfs node
P0P2 S4 *disabled
PEGP S4 *disabled
P0P1 S0 *disabled pci:0000:00:1e.0
EHC1 S4 *disabled pci:0000:00:1d.0
USB1 S4 *enabled
USB2 S4 *disabled
USB3 S4 *disabled
USB4 S4 *disabled
EHC2 S4 *disabled pci:0000:00:1a.0
USB5 S4 *disabled
USB6 S4 *disabled
USB7 S4 *disabled
HDEF S0 *disabled pci:0000:00:1b.0
RP01 S5 *disabled pci:0000:00:1c.0
PXSX S5 *disabled pci:0000:01:00.0
RP02 S0 *disabled pci:0000:00:1c.1
PXSX S5 *disabled pci:0000:02:00.0
RP03 S0 *disabled
PXSX S5 *disabled
RP04 S0 *disabled
PXSX S5 *disabled
RP05 S0 *disabled
PXSX S5 *disabled
RP07 S0 *disabled
PXSX S5 *disabled
RP08 S0 *disabled
PXSX S5 *disabled
GLAN S0 *disabled
PEG3 S4 *disabled
PEG5 S4 *disabled
PEG6 S4 *disabled
SLPB S3 *enabled
  • S4,据我所知是挂起到磁盘...如果我将 USB1 回显到唤醒表中,它似乎也不起作用。它只是设置了一个 S4 标志。
  • 我能在 S3 中获得 USB 端口吗?

我想让机器从 Suspend-To-Ram (S3, ACPI standard) 模式唤醒,以防外接键盘上的键按下。只有按下笔记本电脑内部键盘上的某个键时,它才会从挂起模式唤醒。如果我插入 USB 鼠标,USB 端口似乎甚至没有供电。我没有 BIOS 选项来更改此设置。

有关该设备的更多具体信息:

usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 13 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=04d9 ProdID=1603 Rev=03.10
S: Manufacturer=
S: Product=USB Keyboard
C: #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

root@underwater-laptop:/# lsusb
[...]
Bus 001 Device 013: ID 04d9:1603 Holtek Semiconductor, Inc.
Bus 001 Device 004: ID 0bda:0138 Realtek Semiconductor Corp.
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
[...]

如果这不起作用,我必须正确解释原因 :( - 但我认为研究这个内核内部非常困难。这里有任何有用的信息提示吗?我希望这是可能的......我只是在寻找任何解决方案。

编辑:这个,通过 USB 唤醒,在 Windows 上运行!

非常感谢,Marius

答案1

由于没有任何 USB* 设备绑定到 PCI 总线,因此系统的 ACPI 表可能有问题。

在我的笔记本电脑上,当我插入 USB 键盘时,我可以看到 pci 路径0000:00:1d.0dmesg输出中:

input: ... as /devices/pci0000:00/0000:00:1d.0/usb6/6-2/6-2.3/6-2.3:1.0/input/input14

从那里我可以在中找到 ACPI 设备名称/proc/acpi/wakeup,并将其回显以启用它:

USB0  S3 enabled  pci:000:00:1d.0

我认为由于您的系统缺少 pci 总线到 ACPI 设备的映射,因此无法使其工作。您可能需要开始调试 DSDT 才能取得进一步的进展。http://acpi.sourceforge.net/dsdt/index.php

答案2

我发现在 Ubuntu Lucid 10.04.3 上使用 2.6.32-37/proc/acpi/wakeup毫无价值。这似乎/sys是唯一重要的事情。

下面链接的usb-wakeup脚本反向遍历/sys树以仅启用 usbhid 设备(即键盘和鼠标)。它还启用它们的父集线器和控制器。这就是我让它工作所需的。udev 规则在启动时以及插入任何 usbhid 设备时触发脚本。

udev 脚本要求脚本在 中/usr/local/sbin,并且确保使脚本可执行,chmod 755 /usr/local/sbin/usb-wakeup

答案3

使用 lsusb 获取你的 USB 设备的产品和供应商 ID:

Bus 004 Device 002: ID 0458:002e KYE Systems Corp. (Mouse Systems)

在我的例子中,它的鼠标 ID 为 0458:002e,然后您创建新的 udev 规则:

sudo nano /etc/udev/rules.d/90-keyboardwakeup.rules

插入此代码并将 idVendor 和 idProduct 替换为 lsusb 中的正确 ID

SUBSYSTEM=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="002e" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup'"

重启并测试。在 11.04 和 12.04 上测试过(可能也适用于较低版本)。我在这个论坛中找到了答案邮政(答案来自埃德罗帕

相关内容