30分後に「非アクティブ時に一時停止」するように設定しました。
それが非アクティブであるかどうかをどのように判断しますか?キーボード/マウスを介したユーザー入力だけですか?
プログラムを動作させないままにしておくと、たとえば、長い時間がかかるビデオの処理が30分後に中断され、そのプログラムが停止しますか?長時間のダウンロードについても同じ質問ですが、途中で中断されますか。
承認された回答:
良い質問。調べてみましょう!
-
「非アクティブ時に一時停止」オプションを調査することから始めます
<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は、決してないことを意味します。
ただし、「非アクティブ」の意味についてはまだ説明されていません。
-
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セッションがシステムが「アイドル」であるかどうかをどのように判断するかを学ぶ必要があります。
-
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;
-
IDLETIME
カウンターの動作は、GNOMEPowerManagerの作成者によるブログ投稿に要約されています。gnome-power-managerは、IDLETIMEと呼ばれるXorg内のカウンターを使用します。このカウンターは、ユーザーがマウスを動かさない場合、またはいくつかのキーをクリックしない場合にのみ増分されます。ユーザーが何かをクリックすると、IDLECOUNTERがリセットされます。
これは、Ubuntuが最後のキーストロークまたはマウスの動きから経過した時間を測定することによって非アクティブを判断することを示しています。 CPU使用率とネットワークアクティビティは考慮されません。
関連:Mac –VirtualBoxを使用してUbuntuVMを作成しますか?