GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntuは一時停止する前に非アクティブをどのように判断しますか?

30分後に「非アクティブ時に一時停止」するように設定しました。

それが非アクティブであるかどうかをどのように判断しますか?キーボード/マウスを介したユーザー入力だけですか?

プログラムを動作させないままにしておくと、たとえば、長い時間がかかるビデオの処理が30分後に中断され、そのプログラムが停止しますか?長時間のダウンロードについても同じ質問ですが、途中で中断されますか。

承認された回答:

良い質問。調べてみましょう!

  1. 「非アクティブ時に一時停止」オプションを調査することから始めます

    <property ...>Suspend when inactive for</property> ...
    <object ... id="combobox_sleep_ac">
    

    sleep-inactive-ac-timeoutというGSettingsキーが設定されていることがわかります。 :

    widget = GTK_WIDGET (gtk_builder_get_object (..., "combobox_sleep_ac")); ...
    g_object_set_data (G_OBJECT(widget), "_gsettings_key", "sleep-inactive-ac-timeout");
    

    このキーのドキュメントには、簡単な説明が記載されています:

    AC電源のコンピューターがスリープ状態になる前に非アクティブである必要がある時間(秒単位)。値0は、決してないことを意味します。

    ただし、「非アクティブ」の意味についてはまだ説明されていません。

  2. sleep-inactive-ac-timeoutを検索しています GNOME設定デーモンに移動します

    timeout_sleep = g_settings_get_int (..., "sleep-inactive-ac-timeout");
    

    Presence.statusと呼ばれるGNOMEセッションのプロパティを定期的にチェックします :

    result = g_dbus_proxy_get_cached_property (...->session_presence_proxy, "status");
    

    ステータスがアイドル状態であることが検出されると、システムはスリープ状態になります。

    idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);
    

    したがって、GNOMEセッションがシステムが「アイドル」であるかどうかをどのように判断するかを学ぶ必要があります。

  3. GNOMEセッションがPresence.statusの値を更新する場所から逆方向にたどります 、

    gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);
    

    IDLETIMEを使用していることがわかります Xorgのカウンター:

    if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
        ...->counter = counters[i].counter;
    
  4. IDLETIME カウンターの動作は、GNOMEPowerManagerの作成者によるブログ投稿に要約されています。

    gnome-power-managerは、IDLETIMEと呼ばれるXorg内のカウンターを使用します。このカウンターは、ユーザーがマウスを動かさない場合、またはいくつかのキーをクリックしない場合にのみ増分されます。ユーザーが何かをクリックすると、IDLECOUNTERがリセットされます。

これは、Ubuntuが最後のキーストロークまたはマウスの動きから経過した時間を測定することによって非アクティブを判断することを示しています。 CPU使用率とネットワークアクティビティは考慮されません。

関連:Mac –VirtualBoxを使用してUbuntuVMを作成しますか?
Ubuntu
  1. Ubuntu20.04にアップグレードする方法

  2. Ubuntu18.04をUbuntu18.10にアップグレードする方法

  3. (フルディスク暗号化を使用して)Ubuntuを有効にして、RAMにスリープ/サスペンドする前にLukssupendを呼び出す方法は?

  1. Ubuntu20.04にRをインストールする方法

  2. Ubuntuを20.10にアップグレードする方法

  3. Ubuntuを21.10にアップグレードする方法

  1. Ubuntuを21.04にアップグレードする方法

  2. Ubuntu21.10にアップグレードする方法

  3. Ubuntu18.04にGoをインストールする方法