我想通过键盘或鼠标唤醒我的系统。这可以通过以下方式完成/proc/acpi/唤醒和一个简单的
echo DEVNAME > /proc/acpi/wakeup
我的唤醒文件看起来像这样
Device S-state Status Sysfs node
---------------------------------------
1. P0P2 S4 *disabled pci:0000:00:01.0
2. P0P3 S4 *disabled
3. P0P1 S4 *disabled pci:0000:00:1e.0
4. UAR1 S4 *disabled pnp:00:0c
5. EUSB S4 *disabled pci:0000:00:1d.7
6. USBE S4 *disabled pci:0000:00:1a.7
7. P0P5 S4 *disabled
8. P0P6 S4 *disabled
9. P0P7 S4 *disabled
10. P0P8 S4 *disabled pci:0000:00:1c.4
11. P0P9 S4 *disabled pci:0000:00:1c.5
12. GBEC S4 *disabled
13. USB0 S4 *disabled pci:0000:00:1d.0
14. USB1 S4 *disabled pci:0000:00:1d.1
15. USB2 S4 *disabled pci:0000:00:1d.2
16. USB3 S4 *disabled
17. USB4 S4 *disabled pci:0000:00:1a.0
18. USB5 S4 *disabled pci:0000:00:1a.1
19. USB6 S4 *disabled pci:0000:00:1a.2
20. P0P4 S4 *disabled pci:0000:00:1c.0
我的问题是:如何找出哪个 (USB) 设备属于我的鼠标/键盘?我失败了LSSB到目前为止,但也许我只是错过了正确的开关。
答案1
grep `ls /dev/input/by-path/*-mouse |\
head -1 |\
cut -d- -f 3` /proc/acpi/wakeup |\
gawk '{print $1}'
这会找到鼠标的输入设备,然后在 /proc/acpi/wakeup 中查找 PCI ID 并给出名称。事实上,您只需将该命令的输出重定向回 /proc/acpi/wakeup 即可从该设备启用唤醒。
答案2
好吧,我找到了一种方法,虽然它看起来不太干净;)
我将从最后开始 - 运行这个单行会告诉你真相:
grep "USB.*pci" /proc/acpi/wakeup |\
cut -d ':' -f 2- |\
while read aaa; do \
find /dev/.udev \
-name "*$aaa*" \
-print \
-exec grep "$aaa" /proc/acpi/wakeup \; -exec echo \; ;\
done
很好,不是吗?这是它的工作原理:
- 开始应该是显而易见的:
grep "USB.*" /proc/acpi/wakeup
仅从列表中提取具有已知 sysfs 节点的 USB 设备。 cut -d ':' -f 2-
只留下每行“pci:”后面的结尾(数字)。- 然后,对于每个结局(
aaa=0000:00:1d.2
等等),尝试找到一个udev 设备符号链接包含该字符串。 - 对于找到的每个设备符号链接,查找命令:
- 打印 udev 符号链接的名称,<-- 这是最有用的部分
- 执行 grep 显示与
/proc/acpi/wakeup
找到的设备对应的行, - 为了输出清晰而附加一个空行。
因此,由于 udev 对设备符号链接进行了有意义的命名,您可以辨别哪个 USB 设备是键盘、鼠标等。