Câu hỏi hay. Hãy cùng tìm hiểu!
Bắt đầu bằng cách điều tra tùy chọn "Tạm dừng khi không hoạt động",
<property ...>Suspend when inactive for</property> ...
<object ... id="combobox_sleep_ac">
chúng ta có thể biết rằng nó đặt khóa GSinstall được gọi là sleep-inactive-ac-timeout
:
widget = GTK_WIDGET (gtk_builder_get_object (..., "combobox_sleep_ac")); ...
g_object_set_data (G_OBJECT(widget), "_gsettings_key", "sleep-inactive-ac-timeout");
Các tài liệu cho khóa này cung cấp một mô tả ngắn gọn:
Lượng thời gian tính bằng giây mà máy tính bật nguồn AC cần không hoạt động trước khi đi ngủ. Giá trị 0 có nghĩa là không bao giờ.
nhưng vẫn không giải thích "không hoạt động" nghĩa là gì.
Tìm kiếm cho sleep-inactive-ac-timeout
dẫn chúng ta đến GNOME Cài đặt Daemon ,
timeout_sleep = g_settings_get_int (..., "sleep-inactive-ac-timeout");
mà định kỳ kiểm tra một thuộc tính của Phiên Gnome được gọi là Presence.status
:
result = g_dbus_proxy_get_cached_property (...->session_presence_proxy, "status");
Nếu nó thấy rằng trạng thái không hoạt động , nó sẽ đặt hệ thống ngủ :
idle_set_mode (..., GSD_POWER_IDLE_MODE_SLEEP);
Vì vậy, chúng ta cần tìm hiểu cách Phiên Gnome quyết định xem hệ thống có "nhàn rỗi" hay không.
Theo dõi ngược từ nơi Phiên Gnome cập nhật giá trị của Presence.status
,
gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, ...);
chúng ta có thể thấy rằng nó sử dụng bộ IDLETIME
đếm từ Xorg:
if (... && strcmp (counters[i].name, "IDLETIME") == 0) {
...->counter = counters[i].counter;
Các IDLETIME
hành vi của truy cập được tóm tắt trong một bài viết trên blog của tác giả của GNOME Power Manager:
gnome-power-manager sử dụng bộ đếm bên trong Xorg gọi là IDLETIME. Bộ đếm này chỉ được tăng lên khi người dùng không di chuyển chuột hoặc nhấp vào một số phím. Khi người dùng nhấp vào cái gì đó, IDLECOUNTER được đặt lại.
Điều này cho chúng ta biết rằng Ubuntu xác định không hoạt động bằng cách đo lượng thời gian đã trôi qua kể từ lần nhấn phím hoặc chuyển động chuột cuối cùng. Việc sử dụng CPU và hoạt động mạng không ảnh hưởng đến.
wake up calls
.