何度の待機/再開サイクル後にX11が画面をスリープモードにするのを止めるのはなぜですか?

何度の待機/再開サイクル後にX11が画面をスリープモードにするのを止めるのはなぜですか?

数年間(〜2012-2020)、いくつかのコンピュータ(さまざまな年のAMD / Intel、S3 / AMD / Intelグラフィックカード)で、X11でDDXとは関係のない奇妙なバグが観察されました。

時々、数回のスリープ(echo mem > /sys/power/state)と目覚ましサイクルの後、X11はモニターのDPMS設定を「忘れて」画面を無期限に保ちます。

この状態ではxset dpms force suspend(または - standby)が正しく機能します。アクティビティの検出やタイムアウトの管理にバグがあるかどうか疑問に思います。

問題が表面化するのに数週間かかる場合もあり、非常に迅速に発生する場合もあります。問題は数日前に再起動することで発生しました。私の考えでは、この問題はこのコンピュータで以前に一度だけ発生したようです(約1年間経験しました)。

まあ、多分これは実際に競争条件であるかもしれません。うん、うん。

厳密なテストのために、設定可能な値をすべてデフォルト600(10分)から5秒に変更しました。これでxset q以下が表示されます。

Screen Saver:
...
  timeout:  5    cycle:  5
...
DPMS (Energy Star):
  Standby: 5    Suspend: 5    Off: 5
  DPMS is Enabled
  Monitor is On

私の画面はXスクリーンセーバーで消去されず、DPMSスタンバイ/一時停止状態に入ることもありません。

デバッグをどこで開始できますか?

私は自分のXコピーを作成し、printfできるだけ多くを追加し、常にシステムXではなく私のXを使用することを覚えておく必要があるようです...しかし、去る前にそこ、誰かが私が最初に試してみるべき興味深く洞察力のあるおいしい情報があるかどうか疑問に思います。

ありがとうございます:)

気づくこの問題は私のシステムで発生しました。、再起動を数日間延期できるかどうかを見てみましょう。結局、それは「Zのある月」のようです。

答え1

Chromeエラーです1339361。遊ぶとどのChrome(またはSlackなどのElectronベースのソフトウェア)では、スクリーンセーバー(DPMSを含む)はプロセスが終了するまで無効になっています。

拡張機能を無効にするとMIT-SCREEN-SAVER便利です。

$ sudo tee /etc/X11/xorg.conf.d/01-no-mit-screen-saver.conf <<EOM >/dev/null
Section "Extensions"
    Option    "MIT-SCREEN-SAVER" "Disable"
EndSection
EOM
$ reboot

MIT-SCREEN-SAVER無効になっていることを確認してください。

$ xdpyinfo -queryExtensions | grep MIT-SCREEN-SAVER

Linuxでスクリーンセーバーを一時停止する方法はいくつかあります。無効にしても、MIT-SCREEN-SAVERスクリーンセーバー、DPMS、YouTubeなどのwakelockには何の影響もなく、引き続き正常に機能する必要があります。

この問題のデバッグ中にゲームをプレイしても、Chromiumがスクリーンセーバーを無効にしているように見える別のバグ(私の考えでは)が見つかりました。ボーカル。これがOutlookで新しい電子メールが鳴るたびに私の画面が目覚める理由です。しかしそれはその他物語...

気になるならDPMSの魔法がxorg-serverその中で起こります。DPMSSetDPMSを呼び出してSetScreenSaverTimer、タイマーを起動します(または起動しません!)。


エラー防止オプションを使用すると、wakelockに関係なくDPMSを強制的に開くようにするための重要な回避策を提案できます。明らかに長いタイムアウトが必要です。そうしないと、中断することなく映画を見ることができません。

$ sudo apt install xprintidle
$ cat <<EOM >crontab
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
DISPLAY=:0
 
*/15 * * * *   t=`xprintidle` && [ $t -ge 7200000 -a $t -lt 9000000 ] && xset dpms force off
EOM
$ crontab crontab
$

関連情報