Command-Line

關閉 X11 / Xorg 顯示(非待機)

  • May 11, 2017

在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,如果您正在編寫自己的屏保程序。如果要監視特定組合的輸入,則無論如何都需要這樣做。

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