Linux

掛起後通過 /proc/acpi/wakeup 從鍵盤/滑鼠喚醒 ACPI。如何找到正確的設備?

  • January 18, 2018

我想通過鍵盤或滑鼠喚醒我的系統。這可以通過*/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 以啟用來自該設備的喚醒。

引用自:https://unix.stackexchange.com/questions/17633