2018年5月27日 星期日

ubuntu禁止滑鼠喚醒睡眠中的電腦

動力來自電力供應不足...好啦其實就是我以前過得太奢侈了都在浪費電orz

點進來之前,我用的其實是lubuntu分支,並且禁止的是所有usb喚醒(參考資料有禁用單一裝置的方法)。符合需求請往下看



這個acpi,我記得還在用windows時,有些電腦用了睡眠一定要按電源鍵才能恢復,有些可以按鍵盤上的特定按鈕恢復,有些鍵盤隨便按就會恢復,有些碰到滑鼠就恢復...

當然此一時彼一時,現在知道這些可以從主機板bios控制,也能從作業系統列黑白名單來控制,這樣就不怕被沒給選項的bios綁住手腳←目前狀態
當然要細到一定要按鍵盤上指定按鍵才能喚醒這種,應該還是bios有多做事啦...就先不討論

感謝噗友dd-han / 呆翰 / 天津風的資料分享,看著並按照這篇的資料做了實驗
https://askubuntu.com/questions/252743/mouse-movement-wakes-computer-from-suspend-how-to-disable-this?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
之後,得到了這樣的清單
cat /proc/acpi/wakeup
Device S-state   Status   Sysfs node
P0P1   S4 *disabled
RP01   S4 *disabled  pci:0000:00:1c.0
RP02   S4 *disabled
PXSX   S4 *disabled
RP03   S4 *disabled
PXSX   S4 *disabled
RP04   S4 *disabled
PXSX   S4 *disabled
RP05   S4 *disabled
PXSX   S4 *disabled
RP06   S4 *disabled  pci:0000:00:1c.5
PXSX   S4 *enabled   pci:0000:03:00.0
PEG0   S4 *disabled  pci:0000:00:01.0
PEGP   S4 *disabled
PEG1   S4 *disabled
PEG2   S4 *disabled
PEG3   S4 *disabled
GLAN   S4 *disabled
EHC1   S4 *enabled   pci:0000:00:1d.0
EHC2   S4 *enabled   pci:0000:00:1a.0
HDEF   S4 *disabled  pci:0000:00:1b.0
阿那個device是在寫啥,根本有字天書,更慘的是我猜謎技能不包含英語,根本猜不出那個縮寫是啥...
...沒關係我們有lspci!
lspci
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
00:16.0 Communication controller: Intel Corporation 6 Series/C200 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller (rev 05)
00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5)
00:1c.5 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 6 (rev b5)
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
00:1f.0 ISA bridge: Intel Corporation H61 Express Chipset Family LPC Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 6 Series/C200 Series Chipset Family SATA AHCI Controller (rev 05)
00:1f.3 SMBus: Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller (rev 05)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 09)
看著wakeup清單的sysfs node去找,把前面pci:0000:省略掉只對著後面看,就能找到「人類名稱」
RP01   S4 *disabled  pci:0000:00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5)
RP06   S4 *disabled  pci:0000:00:1c.5 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 6 (rev b5)
PXSX   S4 *enabled   pci:0000:03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 09)
PEG0   S4 *disabled  pci:0000:00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port (rev 09)
EHC1   S4 *enabled   pci:0000:00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
EHC2   S4 *enabled   pci:0000:00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
HDEF   S4 *disabled  pci:0000:00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller (rev 05)
這樣,我就能找到目前允許喚醒睡美人(:P)的有三個來源,一個是通過網路喚醒,第二第三都是通過usb喚醒...使用usb鍵盤滑鼠的話,走的就是這條
不過這裡有兩件事情比較奇妙:
參考的文章有提到他有power button,我這邊顯然沒有
我目前還沒搞定「睡進硬碟」的S4狀態(Suspend to disk),只做到睡進記憶體的S3(Suspend to ram),可是這張wakeup列表全都標記為S4喚醒...或者我理解錯了,或許寫S4不是說這行只在S4有效,而是這行會包含S1到S4都有效?
總之,我要禁止喚醒的滑鼠是在usb上,所以我決定把主機板上的usb給關了就好...因為我暫時看不出來怎麼關掉單一個usb裝置(後來發現下面回文有xd),更慘的是lsusb下去,我看鍵盤滑鼠好像被kvm合成一體了!?
lsusb
Bus 002 Device 005: ID 05af:0802 Jing-Mold Enterprise Co., Ltd
Bus 002 Device 004: ID 0557:8021 ATEN International Co., Ltd CS1764A [CubiQ DVI KVMP Switch]
Bus 002 Device 003: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
嗯沒關係,我可以接受只能用電源鍵喚醒,所以鍵盤就請他犧牲一下了
下指令
ECHO EHC1 >/proc/acpi/wakeup
bash: /proc/acpi/wakeup: 拒絕不符權限的操作
...咦?也對,他不在我家裡
sudo ECHO EHC1 >/proc/acpi/wakeup
bash: /proc/acpi/wakeup: 拒絕不符權限的操作
還不行?剛才好像有看到有人提到要sudo再su
sudo su ECHO EHC1 >/proc/acpi/wakeup
bash: /proc/acpi/wakeup: 拒絕不符權限的操作
...拿的方法不對,抄另外一行
sudo sh -c "ECHO EHC1 >/proc/acpi/wakeup"
喔喔問我密碼了(敲
sh: 1: ECHO: not found

...大小寫?
sudo sh -c "echo EHC1 >/proc/acpi/wakeup"
賓果!
再看一下wakeup確定EHC1被關了...確實disabled了!
至於寫進開機批次,讓它每次都自動除能嘛...
目前先測試而已,這種搞砸了重開就恢復的還滿方便的,確定沒後遺症再來寫

發文前測試了一下,我鍵盤滑鼠剛好就歸EHC1管,所以一猜就中xd,之後就是用一段時間確定沒問題,再寫進開機批次

其實是發給自己看的,尤其我已經忘記我當初怎麼改擷圖的儲存路徑以後xd


補充:噗友acelan提出另一種指令風格,把 sudo sh -c "echo EHC1 >/proc/acpi/wakeup" 寫成 echo EHC1 | sudo tee /proc/acpi/wakeup 。還沒理解指令原理,總之先記下來...

沒有留言: