Display Power Management Signaling (正體中文) - ArchWiki

Jump to content

DPMS (VESA Display Power Management Signaling) 當電腦非使用中啓用螢幕省電特性。可以按照DPMSSetTimeouts(3)的說明來設定 監視器進入預設的省電等級 ——待用(standby,隨時再顯示)、暫停(suspend,省電但再顯示慢)或關閉 (off,連背光都全關)—— 之前停止活動的時間。 注意DPMS發展用於CRT監視器螢幕，而在LCD顯示器上通常 待用、暫停、關閉等等模式與CRT下沒有差別。

## Xorg中設定 DPMS

註記: 截至Xorg 1.8的 DPMS 如果 ACPI 也在核心執行(kernel runtime)時啓用會自動偵測並啓用。

加入下列文字到檔案： `/etc/X11/xorg.conf.d/` 在 `Monitor` 部份 (如果沒有自行建立) : Option "DPMS" "true"

加入下列文字設定到 `ServerFlags` 段落，如果需要自定就修改時間(單位分鐘): Option "StandbyTime" "10" Option "SuspendTime" "20" Option "OffTime" "30"

註記: 如果 `"OffTime"` 選項沒有工作, 用 screen blanking 替代, 這選項將保持螢幕常常以一個黑色圖片來顯示 (以LCD來說，液晶轉暗面但背光沒有關閉)。或者, 變更 `"blanktime"` 為 `"0"` 停用 screen blanking :

Option "BlankTime" "30"

最後範例檔案 `/etc/X11/xorg.conf.d/10-monitor.conf` 可能看來像這樣：

Section "Monitor" Identifier "LVDS0" Option "DPMS" "false" EndSection

Section "ServerFlags" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "0" Option "BlankTime" "0" EndSection

Section "ServerLayout" Identifier "ServerLayout0" EndSection

## 啓用 DPMS

注意使用gdm(3.38.2)及xwayland(1.20.9)時有可能無法自動啓用dpms

無法啓用時xset -q 輸出會像這樣 :

    $ xset q

    ~
    DPMS (Energy Star):
    Server does not have the DPMS Extension

可以啓用時 xset -q 輸出會像這樣：

    $ xset q

    ~
    DPMS (Energy Star):
    Standby: 0    Suspend: 0    Off: 0
    DPMS is Enabled
    Monitor is On

可能解決法(參考):

    安裝vbetool，使用指令sudo vbetool dpms off 或 on，來關閉/打開螢幕。
    不過關閉螢幕後必須進入盲打於終端機輸入指令或重新開機才能再次啟動螢幕。

    參考GDM設定，
    在 /etc/gdm/custom.conf 設定中取消wayland off的註解後存檔並重新開機(wayland也可能造成systemctl 無法登入時呼叫自定義服務) :

    /etc/gdm/custom.conf

    [daemon]
    # Uncomment the line below to force the login screen to use Xorg
    WaylandEnable=false

## 停用 DPMS

Note:之前的部份已有提到選項 `"DPMS" "false"`， 因為 DPMS 預設被許多去腳本啓用, 要停用他必須明確的宣告。

要完全停用 DPMS，添加下列選項文字到檔案: `/etc/X11/xorg.conf.d/10-monitor.conf`:

    Section "Extensions"
    Option      "DPMS" "Disable"
    EndSection

## 用指令修改 DPMS 與螢幕保護(screensaver)設定

可以用指令 xset 指令，指令由安裝包提供: xorg-xset 。

例子:

Command | Description
--- | ---
xset s off | Disable screen saver blanking
xset s 3600 3600 | Change blank time to 1 hour
xset -dpms | Turn off DPMS
xset s off -dpms | Disable DPMS and prevent screen from blanking
xset dpms force off | Turn off screen immediately
xset dpms force standby | Standby screen
xset dpms force suspend | Suspend screen

指令查詢目前設定:

    $ xset q

    ...
    Screen Saver:
    prefer blanking:  yes    allow exposures:  yes
    timeout:  600    cycle:  600
    DPMS (Energy Star):
    Standby: 600    Suspend: 600    Off: 600
    DPMS is Enabled
    Monitor is On

查閱 xset(1) 獲得所有可用命令。

{{Note (正體中文)|

- XScreenSaver 與 xfce4-power-manager 用他們自有的 DPMS 設定並覆蓋 xset 的設定。 查看 XScreenSaver#DPMS and blanking settings 與 Xfce#Display blanking 得到進一步訊息。
- 如果手動在shell輸入指令時，你可能需要個前綴 `sleep 1;` 讓他正確地工作，例如 `sleep 1; xset dpms force off`
- `xset dpms 0 0 0`, 這設定所以有 DPMS 超時設定到零，也許是較好的方式去禁用 "disable" DPMS， 由於選項 `-dpms` 可能被回複的時候，例如，關閉螢幕以指令 `xset dpms force off`.
- 如果使用 `xset` 在 xinitrc 不工作，指定設定於檔案 `/etc/X11/xorg.conf.d/`. 查看 [[#Xorg中設定 DPMS] 得到詳細說明。

}}

## DPMS 在 Linux console 中用指令 setterm 互動

指令 setterm 作用造成終端機(terminal)瞭解轉譯代碼(escape codes)改變了終端機。本質上他僅僅 writes/echos 終端機序列(terminal sequences)到目前終端機裝置， 不論那裝置是以螢幕、遠端ssh 終端機、控制台終端模式(console mode)、序列控制台(serial consoles)等等形式。

setterm Syntax: (0 disables)

setterm -blank [0-60|force|poke] setterm -powersave [on|vsync|hsync|powerdown|off] setterm -powerdown [0-60]

註記: 僅僅控制台顯示關閉並不會啓用 DPMS 電能節約。控制台顯示關閉預設是禁用的(常亮)。 [1]

### 管線指令輸出到指令cat以看到轉譯符

$ setterm -powerdown 2>&1 | exec cat -v 2>&1 | sed "s/\\^\\[/\\\\033/g"

### 用轉譯符到任何 tty (搭配以寫入附加的組合) 以修改終端機

$ setterm -powerdown 0 >> /dev/tty3

註記: 此例附加`>>` 被使用而不是 `>`。 腳本有權限問題使用 sudo 或其他指令，你也可以用 tee 指令去附加setterm的輸出到 tty 裝置，讓tty's 附加但不寫入。(

#### Bash 迴圈去設定所有 ttys 0-256

$ for i in {0..256}; do setterm -powerdown 0 >> /dev/tty$i; done; unset i;

## 參考資料

- PC Monitor DPMS specification explanation
- DPMS control in X

Categories:

- X server (正體中文)
- Power management (正體中文)