關閉 X11 / Xorg 顯示(非待機)
在Wayland下,我曾經
busctl --user set-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode off
關閉/打開顯示器,但是由於Wayland無法使用而不得不返回X11後,此命令與dpms強制關閉相同。使用 X11 我可以執行
sleep 1; xset dpms force off
,但這只會使顯示器進入待機狀態,並且一旦檢測到任何輸入(例如滑鼠移動)就會喚醒。這是不需要的行為,我更喜歡使用特定快捷方式喚醒顯示器的能力。這樣我可以確保顯示器不會自行或意外打開。那麼,如何強制關閉顯示器以防止使用者輸入在 X11 下再次喚醒它?
我認為您可能誤解了 DPMS“關閉”的含義。看看維基百科中的表格,DPMS 的實際作用是通過關閉水平同步和垂直同步信號(或 HDMI 等效信號),並禁用顯卡中的 DAC 來指示省電狀態,而其餘的顯卡卡繼續執行。因此,您並沒有完全關閉所有東西,而是進入了可能的“最深”省電模式。
OTOH,使用
xrandr --off
真的完全關閉了輸出,並禁用了顯卡中用於產生輸出的所有內容,就好像顯示器根本沒有連接任何東西一樣。當然,如果它是您唯一的顯示器,這不起作用,因為沒有更多的圖形顯示器可以繪製任何東西。這實際上是為了啟用和禁用額外的第二個或第三個監視器。所以你不希望它“完全關閉”,你想要最深的 DPMS 省電狀態,它恰好被稱為“關閉”。
您的
busctl
命令告訴 Wayland 使用PowerSaveMode
,即 DPMS。而且 Wayland 在檢測到滑鼠或鍵盤輸入時似乎並沒有重新啟用 DPMS,因此它一直處於關閉狀態。同理,
xset dpms
告訴 X 伺服器使用 DPMS。這完全是一回事。不同之處在於 X 伺服器在檢測到輸入時會重新啟用 DPMS。至於“為什麼”,這是開發人員決定它應該如何工作的方式。在 X 中,
xset dpms
即使沒有額外的螢幕保護程序也能正常工作,這就是為什麼重新打開螢幕的方式被合併到 X 伺服器中的原因。對於 Wayland,設計師似乎已經決定你總是需要一個額外的螢幕保護程序(它的工作是PowerSaveMode
向 Wayland 傳達想要的資訊),所以它將它留給螢幕保護程序來監視輸入並再次打開螢幕。你能夠偽裝成一個螢幕保護程序,這busctl
或多或少是個意外。這不是錯誤,這是不同的設計。
正如我所說,嘗試使用滑鼠和鍵盤輸入
evtest --grab /dev/input/eventX
(僅evtest
用於查看哪個設備是哪個設備。小心,數字不需要在靴子中保持不變,查看 udev 符號連結)或等效項ioctl
,如果您正在編寫自己的屏保程序。如果要監視特定組合的輸入,則無論如何都需要這樣做。