Linux
掛起後通過 /proc/acpi/wakeup 從鍵盤/滑鼠喚醒 ACPI。如何找到正確的設備?
我想通過鍵盤或滑鼠喚醒我的系統。這可以通過*/proc/acpi/wakeup*和一個簡單的
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)設備屬於我的滑鼠/鍵盤?**到目前為止,我使用lsusb失敗了,但也許我只是錯過了正確的開關。
好的,我找到了一種方法,雖然它看起來不太乾淨;)
我將從頭開始 - 執行這個單線會告訴你真相:
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 設備是鍵盤、滑鼠等。
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 以啟用來自該設備的喚醒。